API Gateway Pattern
: 모든 클라이언트 요청에 단일 진입점 역할을 하는 API gateway를 두어 마이크로서비스 액세스를 단순화 하여 클라이언트와 서비스 간 원활한 커뮤니케이션을 제공
: API Gateway는 마이크로 서비스의 프론트엔드 역할을 수행하며 클라이언트로부터 요청을 받아 적절한 서비스로 라우팅을 수행
Circuit Breaker
: 서비스 내 실패 모드 (과부하, 장애 등)를 모니터링 하고 발생한 서비스에 요청이 도달하는 것을 차단하여 전체 시스템이 붕괴하는 것을 방지
: 서비스 간에 서킷 브레이커를 두고 서킷 브레이커는 요청받은 서비스의 장애를 감지하면 해당 서비스를 차단
CQRS (Command Query Responsibility Segregation)
: 서비스의 Read와 Write 작업을 구분하여 마이크로서비스의 성능과 확장성을 증가시킬 수 있는 패턴
: 읽기 및 쓰기 작업을 하는 시스템이 복잡해지고 크기가 커져도 확장 및 유지 관리가 수월
Event Sourcing
: 응용 프로그램의 상태를 일련의 이벤트로 모델링하여 저장 및 사용
: 애플리케이션의 현재 상태를 저장하는 시스템은 일련의 이벤트를 저장하고 필요 시 이를 읽어들여 애플리케이션의 상태를 업데이트
Saga Pattern
: 분산 시스템에서 여러 서비스를 포함하는 여러 트랜잭션에서 일관성을 유지하는데 사용
: 분산 트랜잭션을 처리할 수 있는 안정적인 솔루션을 제공하여 서비스의 자율성을 유지하면서 데이터 일관성을 보장
Service Discovery Pattern
: 마이크로서비스의 복잡한 설계를 쉽게 탐색할 수 있도록 도와줌
: 서비스 간 원활한 커뮤니케이션을 보장하고 수동 configuration의 필요성을 감쇠
: 클라이언트측 디스커버리와 서버측 디스커버리로 나뉨
- 서비스 레지스트리 (서비스 디스커버리)
: 서비스들의 IP 주소와 포트를 가지고 있으며, 클라이언트에서 부터 오는 요청을 처리
Load Balancing Pattern
: 대량의 트래픽이 발생할 수 록 서비스간 트래픽을 분산하는 패턴
: 라운드 로빈, 최소 연결 등의 로드밸런싱 알고리즘을 이용한다
Bulkhead Pattern
: 서비스와 리소스를 분리하여 특정 서비스에서 장애가 발생해도 전체 시스템이 다운되지 않도록 하는 패턴
: AWS Lambda와 데이터베이스의 connection pooling이 있음
Event-Driven Architecture Pattern
: 이벤트를 활용하여 서비스 간 이벤트를 트리거하여 실시간 응답을 지원하고 서비스 간 느슨한 커플링을 촉진
: 이벤트를 트리거로 활용함으로써 서비스 간 직접적인 의존성을 최소화하여 유연성을 높이고 시스템을 보다 쉽게 진화시킬 수 있음
: 이벤트 브로커를 하나 두고 이 브로커가 이벤트 발생 시 마다 서비스를 요청하는 방식
Retry Pattern
: 장애 완화 또는 극복을 위해 실패한 작업을 재시도 하는 패턴
: 재시도 방법은 최대 재시도 횟수 지정, 재시도 사이의 지연 및 exponential backoff (1회 실패 시 2번 재시도, 2회 실패 시 4번 재시도 등...)
Backends for Frontends Pattern (BFF)
: 프론트엔드 당 전용 백엔드 서비스를 생성하여 각 플랫폼에 맞는 최적의 성능과 UX를 보장
Sidecar Pattern
: 자울성을 해치지 않고 마이크로서비스에 기능을 추가할 수 있는 패턴: 서비스에 추가 구성 요소를 연결해서 핵심 서비스를 변경하지 않고 모듈식 기능을 제공할 수 있음
: 애플리케이션을 수정하지 않고 애플리케이션에 붙은 사이드카를 붙혔다 뗐다할 수 있음
- 예시
: 보안을 위해 Nginx reverse proxy 등을 붙혀서 HTTPS 통신을 수행
: 컨테이너 외부로 로그를 모으기 위해 logstash, fluentd 등을 추가
Strangler Pattern
: 모놀리식 아키텍처를 점차적으로 마이크로서비스를 기반하는 아키텍처로 리스크 없이 바꿀 수 있게 하는 패턴
: 기존에 모놀리식 아키텍처로 만든 서비스 내에서 기능을 하나씩 MSA로 변경
Reference
'Development > Development' 카테고리의 다른 글
자바 생성 패턴을 실제 프로젝트에 적용하려면? (0) | 2023.08.13 |
---|---|
주요 시스템 아키텍처 패턴 (0) | 2023.08.13 |
페어 프로그래밍에 대해 알아보자 (0) | 2023.07.09 |
똑똑한 코드는 오히려 독이다 (0) | 2023.07.09 |
프레임워커가 아닌 엔지니어가 되어라 (0) | 2023.07.09 |