1. Why MSA in 11st?

2. Project Vine

3. MSA 플랫폼 Solution

4. Java Library Hystrix

5. Netflix OSS(Open Source Software)의 Eureka

6. Netflix OSS(Open Source Software) Ribbon

7. API Gateway

8. Netflix OSS(Open Source Software) Zuul

9. Server to Server 호출 in MSA

1. Why MSA in 11st?

초대형 거대 Monolithic System(Click)

8년 넘게 사용해 온 낙후된 S/W Stack

200만 라인의 공통 모듈

폭증하는 트래픽으로 수년 내에 감당하기 힘들 것으로 예상되는 부하

2. Project Vine(11번가 팀에서 만듦)

2-1) Project Vine

Strangler Application Pattern

Legacy System(Click) 교살 전략

→ 새로운 Application은 도립된 API 서버로 개발

→ Legacy와 함께 운영

2-2) Project Vine Image

Untitled

→ 업무 도메인 별로 서버 분리

→ Legacy 코드에서는 새로운 API 서버들을 호출

→ 기존 코드와 새로운 API 호출은 DB Flag를 통해서 Switchable하게

3. MSA 플랫폼 Solution

3-1) NETFLIX | OSS(Click)

→ 개발자들이 가장 친숙해 하는 환경

Untitled

Untitled

4. Java Library Hystrix(Click)

4-1) Hystrix

Netflix가 만든 Fault Tolerance Library

장애 전파 방지 & Resilience

4-2) Hystrix Java Library

Untitled

4-3) Hystrix의 주요 4가지 기능

4-4) Hystrix Command를 호출할 때 벌어지는 일

4-4)-1. Isolation

→ 두 가지 Isolation 방식을 Circuit Breaker 별로 지정 가능함.

4-4)-2. Circuit breaker(Click)

메소드의 실행 결과 성공 혹은 실패(Exception) 발생 여부를 기록하고 통계 냄.

통계에 따라 Circuit Open 여부를 결정함.

Untitled

Untitled

→ 외부에서 장애가 생기면 같이 장애가 날 확률이 높을 수 있기 때문에

→ 인위적으로 Circuit Breaker Key에 해당하는 값을 같게 해주면

⇒ 두 개의 메소드는 통계를 공유하게 되고, 하나가 차단될 때 나머지도 함께 차단이 됨.

4-4)-3. Fall-back(Click)

실패한 경우 (Exception) 사용자가 제공한 메소드를 대신 실행함.

ex) 상품 추천 서버를 호출했는데 추천 서버가 반응이 없거나 Exception이 난다면

고정된 상품 목록을 대신 보여줌으로써 사용자 불편사항을 최소화 할 수 있음.

Untitled

⇒ Fall-back 잘못 사용하면 비즈니스 로직의 에러나 장애 상황을 감추게 될 수 있음.

4-4)-4. Time out

특정시간 동안 메소드가 종료되지 않는 경우 Exception을 발생시킴.

Q : 사용하는 대부분 Library에는 Time out이 존재하는데

별도의 인터셉터하는 Time out을 줄 필요가 있을까?

→ 어느 시간 안에 Timeout을 결정하지 못하는 경우가 있어 대부분적으로 걸어주기에 적당함.

Untitled

⇒ Timeout이 1초라는 작은 값이 지정되어 있지만 대부분의 API는 1초 이하인 경우 많음.

⇒ UI 로직이나 좀 더 복잡한 로직의 경우 충분히 1초를 넘길 수도 있음. 적절히 조절해 사용해야함.

5. Netflix OSS의 Eureka(Click)

5-1) Netflix가 만든 Dynamic Service Discovery

등록 : 서버가 자신의 서비스 이름(종류)와 IP 주소, 포트를 등록.

조회 : 서비스 이름(종류)을 갖고 서버 목록을 조회.

Untitled

⇒ Ribbon이 서버 목록을 가져올 때 사용 됨.

5-2) Eureka가 Enable된 Spring Cloud Application

Server가 시작시 Eureka Server에 자동으로 자신의 상태 등록 (UP)

주기적 HeartBeat으로 Eureka Server에 자신이 살아 있음을 알림.

Server 종료시 Eureka Server에 자신의 상태 변경(DOWN) 혹은 자신의 목록 삭제.

Eureka 상에 등록된 이름은 'spring.application.name'

5-3) Eureka + Ribbon in Spring Cloud

하나의 서버에 Eureka Client와 Ribbon Client가 함께 설정되면 Spring Cloud는

다음의 Ribbon Bean을 대체

5-3)-1. ServerList<Server>

기본 : ConfiurationBasedServerList

변경 : DiscoveryEnabledNIWSServerList

5-3)-2. IPing

기본 : DummyPing

변경 : NIWSDiscoveryPing

⇒ 서버의 목록을 설정으로 명시하는 대신 Eureka를 통해서 Look up 해오는 구현

6. Netflix OSS의 Ribbon(Click)

6-1) Netflix가 만든 Software Load Balancer를 내장한 RPC(REST) Library

Untitled