장애 시, 전파 차단이 가장 중요하다.
장애가 전파된다는 것이 MSA의 약한 고리이다.
서킷 브레이커 - 기본적 전략 (Hystrics)
콜백 메세징 (서버가 Down일 때, 기본값 설정 후 사용)까지 하이스트릭스가 처리해준다.
퍼블릭 클라우드를 사용할 시 여러개의 서비스 리전을 사용하자
카나리 배포전략 사용
장애 시나리오를 대비해 가상의 장애 상황을 가정, 행동 대응해보자
Chaos Monkey
모놀리식 -> MSA로 전환을 할 때에 라우터를 두고 대부분의 요청을 WAS로 보내고
나머지 조금만 새로운 MicroService로 요청을 보내보고 잘되면 확장하는 식으로 진행
전환 시에 DATA 이관 전략은 스키마로만 나눠져도 괜찮다.
MSA DB 설계 시 현실적으로 같은 엔티티를 동시에 CUD 안하도록 하기
분할내성, 지속성, 가용성
DB는 이 중 2가지만 선택할 수 있다.
대표자가 설문조사하는 방법인데 요즘은 사용되지 않음
다중 DB 및 MS 환경에서 각자가 자신의 Tx에만 관심을 가지는 것
보상 트랜젝션을 처리하고 삭제로직을 넣음으로서 정합성을 유지
코레오그래피 (이벤트 Pub/Sub)
실패했을 경우 fallback URL 제공
단점은 시스템 복잡도가 증가하게 된다.
쓰는 놈과 읽는 놈 역할을 따로 두는 방식
대부분 모놀리스를 분해하는데, 분해 실패 시에 발생하는 것이 마이크로리스
디커플링을 실패하고 복잡도만 높아지기 때문에, 차라리 모놀리스를 사용하는게 낫다
DB를 제대로 안나눈다
서비스를 전부 다 분리했는데 모든 서비스가 같은 DB를 바라보고 있을 경우
별같이 생겨서 데드스타라고 부름
내부 트래픽이 많다보니 문제들이 생김 (로깅 등)
그래서, 잡스러운 것은 사이드카에 실어버리고 내가 만든 로직에만 집중하자는 패턴
사이드카를 통하여 서로를 호출하며, 프록시화 되어있다.
로직은 마이크로서비스에 나머지는 사이드카에 담는다
Istio가 서비스 메시 / 로깅 시큐리티 라우팅, 디스커버리 (마이크로서비스 주소) 등
각 마이크로서비스는 서로 프록시를 통해서 통신하게 된다.