마이크로서비스 패턴 책 1장
모놀리틱 구조에서 애플리케이션의 규모가 커질수록, 관리가 어려워지고, 결함이 영향을 많이 미치게 된다. 또한, 테스트 실행이나 디버깅에 많은 시간을 미치기 때문에 배포가 오래 걸리는 현상이 발생한다. 뿐만 아니라, 각 서비스의 의존성 때문에 팀의 크기는 커지게 되고 팀의 효율성이 떨어진다.
애플리케이션의 확장 종류
- 다중 인스턴스에 고루 요청 분산 (수평 확장)
- 요청 속성별 라우팅 (샤딩)
- 기능에 따른 애플리케이션 분해 (마이크로서비스)
'마이크로서비스' 에 대해 이야기해보자.
마이크로서비스 장점
- 크고 복잡한 애플리케이션을 지속적으로 전달/배포할 수 있습니다.
- 서비스 규모가 작아 관리하기 쉽습니다.
- 서비스를 독립적으로 배포/확장할 수 있습니다.
- 마이크로서비스 아키텍처 덕분에 팀이 자율적으로 움직입니다.
- 결함 격리가 잘됩니다.
- 새로운 기술을 실험하고 도입하기 쉽습니다.
마이크로서비스 단점
- 딱 맞는 서비스를 찾기가 쉽지 않습니다.
- 서비스를 잘못 분해 시 결합도 높은 서비스로 이루어짐
- 분산 시스템은 너무 복잡해서 개발, 테스트, 배포가 어렵습니다.
- 분산 시스템의 복잡성 증대
- 운영 복잡도 증가
- 아래와 같은 서비스가 필요
- 쿠버네티스: 도커 오케스트레이션 플랫폼
- 오픈시프트: 컨테이너 기반 소프트웨어의 배포 및 관리를 위한 레드헷의 제품
- 스핀네이커: 멀티 클라우드 기반의 연속 배포(CD)에 초점을 맞춘 오픈 소스 플랫폼
- 여러 서비스에 걸친 기능을 배포할 때에는 잘 조정해야 합니다.
- 마이크로서비스 아키텍처 도입 시점을 결정하기가 어렵습니다.
마이크로서비스 아키텍처 패턴 언어
-
애플리케이션 아키텍처 패턴
-
마이크로 서비스 패턴
- 인프라 패턴 : 인프라 문제
- 애플리케이션 인프라 : 개발 영향있는 인프라 문제
- 애플리케이션 패턴 : 개발자가 맞닥드리는 문제
-
애플리케이션을 여러 서비스로 분해하는 패턴 (ex: DDD)
-
통신 패턴 (ex. IPC)
-
트랜잭션 관리를 위한 일관성 패턴 (ex. 분산 트랜잭션 -> 사가 패턴)
-
데이터 쿼리 패턴 (ex. CQRS, API 조합 패턴)
-
서비스 배포 패턴 (ex. 컨테이너, 서버리스 배포)
-
관측성 패턴 (ex. 헬스체크, 로그수집, 분산추적, 예외추적, 애플리케이션 지표, 감사로깅)
-
서비스 테스트 자동화 패턴
-
횡단 관심사 처리 패턴
- 공통 관심사(ex. DB 자격증명 매개변수 전달)를 재사용하는 패턴
-
보안 패턴 (ex. API Gateway에서 사용자 검증)
마이크로 서비스 : 프로세스와 조직
- 규모가 큰 팀보다 규모가 작은 여러 팀이 효율
- 지속적 전달/배포
마이크로서비스 아키텍처를 도입하면 아키텍처, 조직, 개발 프로세스가 모두 변화...
출처: "마이크로서비스 패턴" 중에서
크리스 리처드슨