일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 백준 19238
- 웹어플리케이션 서버
- 백준 16719
- java 기술면접
- 백준 15685
- Kotlin
- 백준
- spring oauth
- JVM
- with recursive
- Spring Boot
- Spring
- 백준 16236
- springboot
- 백준 파이썬
- 백준 17626
- spring cloud
- MSA
- spring security
- 프로래머스
- JPA
- MySQL
- 파이썬
- 백준 16235
- java
- re.split
- sql 기술면접
- 프로그래머스
- 백준 17779
- Coroutine
- Today
- Total
목록MSA (14)
시작이 반
하나의 API에서 여러개의 외부 API를 호출하고 있을때 어떤 하나의 API가 장애가 발생한다면 해당 API에 엮여있는 모든 API가 장애가 발생하는 것이 맞는 것일까? 아니면 한 페이지에 추천서비스, 검색서비스, 결제 서비스등 여러개의 서비스가 있을때 하나의 서비스가 장애가 발생하면 해당 페이지는 장애가 발생하는 것이 맞는 것일까?. 이상적인 서비스는 장애난 서비스만 장애로 보여지거나 장애가 아닌것 처럼 동작을 해야 한다. 아래와 같이 아마존과 넷플릭스는 MSA로 모든 서비스가 구축되어있으며 모든 서비스가 엮여있다. 하지만 하나의 서비스가 장애가 나더라도 정상적으로 작동한다. 이때 사용하는 것이 Circuit Breaker이다. Circuit Breaker 란? 회로 차단기란 뜻으로 caller에서 c..
https://tmdrl5779.tistory.com/188?category=875847 [MSA] Spring Cloud ( Kafka 데이터 동기화 ) 이전에는 FeignClient를 사용하여 user-service에서 http통신을 통해 order-service API를 불러왔다. 현재는 서비스마다 각각의 DB를 사용하고 있다. 하지만 order-service가 여러개 실행된다면 어떻게 될까?? 하.. tmdrl5779.tistory.com 이전 포스팅에서 설명했던 order-service가 여러개 켜져있을 경우이다.만약 각 서비스당 하나의 DB를 가지고 있다면 같은 api를 호출해도 각각 다른 DB에 분산되어 저장되기 때문에 일괄적으로 데이터를 가져올때 어려움이 있다.이 때문에 DB를 하나만 사용..
서비스의 시나리오를 확인해보자. user-service에서 회원가입, 로그인을하고 user는 catalog-service에서 상품목록을 보고 order-service를 통해 해당 상품을 주문한다. 상품을 주문하면 catalog-service의 상품개수가 줄어들어야 한다. 이러한 데이터를 동기화 하기위해 Kafka를 사용해보자. order-service에서 Kafka Topic으로 메시지 전송 -> Producer catalog-service에서 Kafka Topic에 전송 된 메시지 취득 -> Consumer catalog-service에 Kafka적용 ( Consumer ) 우선 kafka관련 디펜던시를 추가해준다. Kafka config와 consumer를 작성해야한다. Kafka config관련 코..
이전에는 FeignClient를 사용하여 user-service에서 http통신을 통해 order-service API를 불러왔다. 현재는 서비스마다 각각의 DB를 사용하고 있다. 하지만 order-service가 여러개 실행된다면 어떻게 될까?? 하나의 서비스가 여러개 실행된다면 각각 가지고 있는 DB또한 달라진다. order-service1 ----- db1 order-service2 ----- db2 order-serivce3 ----- db3 .... 그럼 이때 사용자가 주문을 하게된다면 어떻게 될까?? user1 사용자가 여러 주문을 하게된다면 처음에는 db1에 주문정보가 저장되고 다음 주문은 db2, 다음 주문은 db3, 또 다음 주문은 db1 이런식으로 round robin 형식으로 순차적으..
Microservice간의 통신은 동기방식과 비동기 방식 2가지가 있다. 동기방식은 하나의 요청이 들어오면 다른작업을 하지 못한다. 이는 RestTemplate, FeignClient의 HTTP 통신 방법으로 구현이 가능하다. 비동기방식은 변경된 사항을 전달해주고 서비스는 더이상 관여를 하지 않는 방식이디. 이는 AMQP라는 프로토콜을 이용하여 구현이 가능하다. Microservice간의 통신으로 FeignClient를 사용해보겠다. FeignClient - Rest Call을 추상화한 Spring Cloud Netfix에 포함된 라이브러리이다. 사용방법으로는 호출하려는 HTTP Endpoint에 대한 Interface를 생성하고 @FeingClient를 선언한다. 기존에 User-Service appl..
외부 Config 정보 바꾸기는 3가지가 있다. - 서비스 재기동 - Actuator refresh - Spring cloud bus 이전 포스트는 Actuator refresh까지 설명하였다. Actuator refresh는 어플리케이션 서버가 한두개면 문제가 되지 않지만 수백개의 서비스가 있을경우 각각의 어플리케이션마다 다 refresh를 수동으로 해줘야 하기 때문에 번거롭다. 이보다 더 편한 방법은 3번째 방법인 Spring cloud bus를 이용하면 된다. 이방법은 한쪽에서 refresh를 config와 연결된 모든 서비스를 refresh를 해주는 방법이다. 상태 및 구성에 대한 변경사하으 연결된 노드에게 전달한다. (Broadcast) 구현방법 AMQP : 메시지 지향 미들웨어를 위한 개방형 ..
분산 시스템에서 서버, 클라이언트 구성에 필요한 설정 정보(application.yml)를 외부 시스템에서 관리 하나의 중앙화 된 저장소에서 구성요소 관리 가능 각 서비스를 다시 빌드하지 않고, 바로 적용 가능 어플리케이션 배포 파이프라인을 통해 DEV-UAT-PROD 환경에 맞는 구성 정보 사용 Local 저장소, Git저장소 등에서 관리를 할 수 있다. 우선 Spring Cloud Config 프로젝트를 생성하자 config server를 디펜던시로 등록한다. main 클래스에 EnableConfigServer를 등록해준다. application.yml 파일 (포트번호 8888) server: port: 8888 spring: application: name: config-service profile..
지금까지 API Gateway, Discovery 를 만들었다. 이번에는 간단한 User-Service, order_service, catalog-service를 만들고 API와 Discovery에 등록해 볼 것이다. USER-SERVICE 사용할 APIs (함수 내용은 설명하지 않겠습니다.) 기능 URI HTTP Method 사용자 정보 등록 /user-service/users POST 전체 사용자 조회 /user-service/users GET 사용자 정보, 주문 내역 조회 /user-service/users/{user_id} GET 작동 상태 확인 /user-service/health_check GET 환영 메시지 /user-service/welcome GET (디스커버리에 서비스를 등록하기 위해서..