"마이크로서비스 패턴"과 "도메인 주도 설계로 시작하는 마이크로서비스 개발"을 읽고 키워드를 정리해놓은 글입니다
1) 모듈성 : API 라는 경계를 가지고 있어 서로 다른 서비스가 API를 통해서만 통신. 느슨한 결합
2) 서비스마다 디비 분리
3) dumb pipe( rest, gRCP ) 같은 가벼운 프로토콜 위주의 통신
1) 지속적인 전달/배포
- 테스트성 : 자동화 테스트가 꼭 필요
- 배포성 : 개발자가 자신이 담당한 서비스 자율적으로 배포
- 자율성, 느슨한 결합 : 다른 팀과 독립적으로 개발가능
2) 서비스 규모가 작아 관리가 쉬움
3) 독립적 배포
4) 결함 격리가 잘됨
* 한 서비스에 메모리 누수 발생시, 다른 서비스는 메모리 누수아님
5) 새로운 기술 도입이 쉬움
1) 복잡함
2) 도입 시점, 경우 설정의 어려움
3) 분산 시스템 자체의 단점. 복잡, 지연시간, 설계
패턴이란? 특정 상황에서 발생한 문제에 대한 재사용 가능한 해법
패턴언어란? 특정 영역 내부에서 문제를 해결하는 연관된 패턴의 집합
패턴의 구조
: 패턴 적용 결과
1) 강제 조항 : forces
- 문제를 해결하기 위해 반드시 처리해야할 이슈
2) 결과 맥락 : resulting context
- 3 부분(장점, 단점, 이슈) 으로 기제
3)연관 패턴: related patterns
: 한 패턴과 다른 패턴의 관계 기술
(1) 선행자 : 이 패턴을 필요하게 만든 선행 패턴
(2) 후행자 : 이 패턴으로 야기된 이슈를 해결하는 패턴
(3) 대안 : 이 패턴의 대체 솔루션을 제공하는 패턴
(4) 일반화 : 문제를 해결하는 일반적인 솔루션에 해당하는 패턴
(5) 세분화 : 특정 패턴을 더 세부적으로 나타난 형태
: 애플리케이션을 여러 서비스로 분해하는 패턴
1) 비즈니스 능력에 따라 서비스 분해
2) DDD 하위 도메인에 따라 서비스 구성 분해
: 프로세스 간 통신(IPC) 패턴
5가지 그룹으로 정리
1) 통신 스타일 : 어떤 종류 IPC?
2) 디스커버리 : 서비스 클라이언트는 예를 들어 http 요청을 할 때 서비스 인스턴스의 IP 주소를 어떻게 가져오는가?
3) 신뢰성 : 서비스 불능시 서비스 간 통신은 어떻게 보장되는가?
: 클라이언트가 여러 개의 마이크로서비스를 호출하기 위해서 최적의 경로를 찾아주는 라우팅 기능과 적절한 부하 분산을 위한 로드벨런싱 기능 제공
: 다양한 클라이언트(모바일, 웹) 에 맞게 백엔드를 두고, api 게이트웨이 등 클라이언트 종류에 따라 최적화된 처리를 수행하게 도와준다.
: 여러개의 서비스로 구성되어 있는 시스템에서 하나의 서비스에 장애가 발생했을 때, 다른 서비스에 장애 전이를 막기 위해, 일정 이상 실패 횟수 임계치를 초과하여 해당 서비스를 호출하면 다른 유사한 서비스로 우회하여 사용자는 장애를 인지하지 못하게하고 그 동안 문제되는 서비스를 복구하여 대응하는 패턴이다.
: 네트워크 인프라 계층에서 msa를 위한 기능( 로드벨런싱, 로깅, 메트릭, 트렌젝션, 추적 등)을 제공