시그마 삽질==six 시그마

MSA 본문

프로그래밍/MSA

MSA

Ethan Matthew Hunt 2020. 9. 2. 20:53

 

1. MSA 정의

 

경량화되고 독립적인 여러 개의 서비스를 조합하여 유연하게 애플리케이션을 구현하는 방식

 

모노리틱 단점:

대규모 서비스에서 일부 변경시에도 전체 빌드 배포(수정무관모듈배포,빌드시간증가)

일부 장애가 전체 장애

특정 기능만 scale-out 불리

 

2. MSA 장점

 

1)유연함.애자일 가속화

유연한 독립적 배포(빌드시간,배포타임 줄어듬)

애플리케이션이 분할되어 개발자는 조각을 담당 더 민첩하게 행동하여 출시기간 단축가능

응집도는 높이고 결합도는 낮춤

서비스에 맞는 다른 아케텍처(DB..)  / 같은 언어 다른버전/다른 언어,

 

2)높은 확장성

특정 서비스만(수요증가) 스케일 업/아웃 가능

 

3)뛰어난 복구능력

모노리틱처럼 한곳의 장애로 시스템 전체 장애가 발생하지 않는다.

 

 

3. MSA 단점

 

1) ACID 보장 어려움

2) 통합 테스트 어려움

3) 다른 서비스의 모델이 변경되는 것에 영향 받음
4) 개별 서비스의 장애 발생시 이슈

5) 클라우드 비용 과다

6) polyglot의 한계 (언어->빌드환경,배포환경 달라짐)

 

4. MSA에 사용되는 기술

 

 

Spring cloud config

 

분산 시스템에서 서버 클라이언트 구성에 필요한 설정정보를 외부시스템에서 관리

하나의 중앙화 된 저장소에서 구성요소 관리 가능

설정값의 변경으로 각 서비스를 다시 빌드하지 않고 동적으로 적용 가능

애플리케이션 배포 파이프라인을 통해 환경에 맞는 구성 정보 사용

/actuator/refresh 로 설정정보 갱신 가능

 

 

Spring Cloud Bus 

 

분산 시스템의 노드를 경량 메시지 브로커와 연결

상태 및 구성에 대한 변경 사항을 연결된 노드에게 전달(브로드캐스팅)

보통 동적으로 config 변경 적용하기 위해 사용되어짐 (/actuator/busrefresh, spring monitor 활용)

 

Spring Cloud Netflix - Eureka 

 

다이나믹 서비스 디스커버리 서버

MSA에서 서비스들은 동적으로 확장되고 축소되기에 인스턴스의 상태를 동적으로 관리하는 서버가 필요

이를 서비스 디스커버리 서버로 칭하며 넷플릭스는 Eureka라는 이름으로 공개

새로운 인스턴스는 시작할 때 Eureka 서버에 IP, 호스트 주소, 포트 정보 등을 스스로 전송

 운영자들은 설정 파일에 Eureka 서버 정보만 입력하면 되고, 서비스들은 다른 서비스를 호출할 때 Eureka 서버에 등록된 인스턴스를 조회

eureka.instance.instanceId=${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}

 

 

 

Spring Cloud Gateway

 

API gateway:단일 진입점. 인증/인가, L/B & 라우팅, 로깅, Circuit Breaker의 역할

Netty(비동기 지원 was): 1THREAD / MANY REQUESTS

Route/Predicates/Filters(RewirtePath)

customFilter/globalFilter/LogginFilter..

 

Spring Cloud Circuit Breaker

 

다양한 circuit breaker 구현에 대한 추상화 제공. 구현체 중 Resilience4J 가 있음(특정조건 장애 발생시 트래픽 차단)

Resilience4J 는 Netfilx Hystrix에 영향을 받은 경량화된 fault tolerance library

 

Resilience4j

1. Circuit Breaker: Count(요청건수 기준) 또는 Time(집계시간 기준)으로 Circuit Breaker제공.

메소드의 실행 결과 성공 혹승 실패 발생 여부를 기록하고 통계를 낸다. 통계에 따라 Circuit Open여부 결정

2.Bulkhead : BulkHead는 resilience4j에서 동시에 호출되는 수를 제한하는 장애 방지 패턴
3.RateLimiter :일정 시간동안 들어올 수 있는 요청을 제한(유량제어 기능)
4.Retry: 요청이 실패하였을 때, 재시도하는 기능 제공(지연시간 설정 후 재시도)
5.TimeLimiter: 응답시간이 지정된 시간을 초과하면 Timeout을 발생시킴
6. Cache 성공적인 실행을 캐시. 다음번에 동일한 요청으로 들어오면 바로 반환
7. Fallback 실행을 실패(Exception)하는 경우에 사용자가 제공한 메소드를 대신 실행시킴

 

Spring Cloud Sleuth

분산 환경에서 트래픽 흐름 추적가능하도록 Slf4J MDC에 Trace,Span Id를 자동 생성해줌

zipkin 연동시 보통 HTTP로 zipkin서버에 트레이스 정보 전달  

 

Zipkin

Twitter에서 사용하는 분산 환경의 Timing 데이터 수집, 추적 시스템(오픈소스)

Google Drapper에서 발전하였으며, 분산환경에서의 시스템 병목 현상 파악

Collector, Query Service, Database webUI로 구성

span(하나의 요청에 사용되는 작업의 단위  64bit unique id) 

trace(하나의 요청에 같은 id발급. 트리 구조로 이뤄진 span 셋. 서비스 이동 경로 추적가능)

 

FeignClient

REST call을 추상화 한 Spring Cloud Netflix 라이브러리

호출하려는 HTTP Endpoint에 대한 interface를 생성

 

 

 

 

 

 

 

5. SAGA 패턴

 

1)정의

Saga는 마이크로서비스간에  비동기 메시징을 하면서 데이터 정합성을 맞추는 패턴
Step별로 보상,피봇,재시도 Transaction들을 배치하여 데이터 정합성을 맞추는 패턴

각 서비스의 로컬트랙잭션을 순차적으로 진행시켜주는 패턴

 

*MSC에서 2PC 적용 x
각 서비스에 동시에 락인(lock in)을 걸시  퍼포먼스의 이슈/가용성 이슈
2PC 미지원( 몽고DB같은 No SQL저장소 )

2)Saga의 트랜잭션

· 원복 가능 트랜잭션(Compensatable transactions) – Pivot transaction이 실패했을 때 compensation을 수행해야 하는 transaction들
· 피봇 트랜잭션(Pivot Transaction) – Saga에서 분기점이 되는 트랜잭션
· 재시도 트랜잭션(Retriable Transaction) – Pivot transaction이 성공했을 때 계속 retry하여 결국은 처리해야하는 transaction들


3)SAGA 패턴 방식

3-1)Choreography
타 서비스와 상관없이 이벤트에 따라 수행하고 결과를 이벤트로 발행하는 방식
진행상황 파악 힘듬, 서로간에 의존도도 높아짐

Triggered by Messages/Events
Decentralized Logic
Low Coupling(Purely Reactive)
Difficult to Visualize workFlow

Sales
1.Order Placed(P) 
6.Shipping Label created(C)

Billing
2. order placed (C)
3.Order Billed (P)

warehouse
4.Order Billed(C)
5.Shipping Label Created(P)


3-2) Orchestration
통제자(가 각 서비스를 비동기로 Request/Reply하여 전체 서비스의 흐름을 제어하는 방식
단순,서비스 결합도 낮아짐

Triggered by Messages/Events
Centralized Logic
Higher Coupling(Event to Command)
Visualize workflow

Sales
1.Order Placed(P)  

Orchestrator
2. Order placed (C)
3. Bill Order (P)
6.Order Billed(C)
7.Create Shipping Label(P)
10.Shipping Label Created(C)
11. ReadyToShipOrder(p)

Billing
4. Bill Order (C)
5.Order Billed(P)

warehouse
8.Create Shipping Label(C)
9.Shipping Label Created(P)

 

 

참고

https://spring.io/projects/spring-cloud

 

 

'프로그래밍 > MSA' 카테고리의 다른 글

[우아콘2020] 배달의민족 마이크로서비스 여행기 정리  (0) 2021.03.29
CQRS  (0) 2020.08.28
Comments