"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 알아야 할 주요 croservices 디자인 패턴

알아야 할 주요 croservices 디자인 패턴

2024-11-01에 게시됨
검색:406

Top icroservices Design Patterns You Should Know

확장 가능하고 유지 관리가 가능하며 복원력이 뛰어난 시스템을 구축하려면 마이크로서비스 아키텍처에서 점점 더 널리 퍼지고 있는 중요한 디자인 패턴에 대한 인식이 필요합니다. 모놀리식 아키텍처와 달리 마이크로서비스는 대규모 시스템을 네트워크를 통해 서로 연결되는 보다 관리하기 쉽고 독립적인 서비스로 나눕니다. 그러나 이러한 분산 특성으로 인해 통신, 데이터 관리, 서비스 조정 등의 영역이 복잡해집니다.

잘 알려진 마이크로서비스 디자인 패턴을 채택하면 이러한 문제를 완화하고 시스템의 안정성과 효율성을 크게 향상시키는 데 도움이 될 수 있습니다. 모든 소프트웨어 개발자가 알아야 할 상위 7가지 마이크로서비스 디자인 패턴은 이 문서에서 다룹니다.

1. API 게이트웨이 패턴

API 게이트웨이는 마이크로서비스에 대한 모든 클라이언트 요청에 대한 단일 진입점 역할을 합니다. 클라이언트가 여러 서비스와 직접 상호 작용하는 대신 API 게이트웨이는 이러한 요청을 통합하고 이를 적절한 마이크로서비스로 라우팅하며 응답을 집계합니다. 클라이언트-서버 통신을 단순화하고 인증, 로깅, 속도 제한과 같은 교차 문제를 관리하는 방법을 제공합니다.

이익:

✓ 요청/응답 처리를 중앙 집중식으로 제어합니다.

✓ 내부 마이크로서비스 복잡성을 추상화하여 클라이언트 측 상호 작용을 단순화합니다.

✓ 보안, 캐싱, 조절을 더 쉽게 구현할 수 있습니다.

예:

Node.js에서 Express.js를 사용하여 기본 API 게이트웨이 구축:

import express from 'express';
import proxy from 'express-http-proxy';

const app = express();

// Forward requests to microservice A
app.use('/serviceA', proxy('http://serviceA-url'));

// Forward requests to microservice B
app.use('/serviceB', proxy('http://serviceB-url'));

app.listen(3000, () => {
  console.log('API Gateway running on port 3000');
});

2. 회로 차단기 패턴

마이크로서비스 아키텍처에서는 서비스 실패가 불가피합니다. 회로 차단기 패턴은 서비스 호출을 모니터링하고 특정 오류 임계값에 도달하면 실패한 서비스에 대한 추가 호출을 중지하여 계단식 오류를 방지하는 데 도움이 됩니다. 서비스가 복구되면 회로 차단기가 호출을 다시 허용합니다. 이를 통해 시스템 복원력이 향상되고 이미 어려움을 겪고 있는 서비스에 불필요한 로드가 발생하는 것을 방지할 수 있습니다.

이익:

✓ 시스템 전반의 오류로부터 보호합니다.

✓ 실패 시 대체 응답 또는 대체 응답을 제공합니다.

✓ 마이크로서비스 아키텍처의 견고성을 향상합니다.

예:

회로 차단기를 위해 Node.js의 opossum 라이브러리 사용:

import CircuitBreaker from 'opossum';
import axios from 'axios';

const options = {
  timeout: 5000,
  errorThresholdPercentage: 50,
  resetTimeout: 30000,
};

const circuitBreaker = new CircuitBreaker(() => axios.get('http://serviceB-url'), options);

circuitBreaker.fire()
  .then(response => console.log(response.data))
  .catch(err => console.log('Service B is down. Circuit is open.'));

3. 서비스 패턴별 데이터베이스

각 마이크로서비스에는 자체 전용 데이터베이스가 있어야 팀이 독립적으로 작업할 수 있고 서비스 간의 긴밀한 결합을 줄일 수 있습니다. 이 디자인 패턴을 사용하면 공유 데이터베이스 스키마 변경에 영향을 받지 않고 마이크로서비스가 독립적으로 발전할 수 있습니다.

이익:

✓ 서비스 간 종속성과 경합을 줄입니다.

✓ 독립적인 확장 및 스키마 발전을 촉진합니다.

✓ 데이터 소유권과 책임을 분리합니다.

4. 사가 패턴

분산 아키텍처에서는 여러 서비스에 걸쳐 있는 트랜잭션을 처리하는 것이 어려울 수 있습니다. Saga 패턴은 여러 서비스에 걸쳐 조정되는 일련의 로컬 트랜잭션을 사용하여 분산 트랜잭션을 관리합니다. 각 서비스는 문제가 발생할 경우 작업을 취소하는 보상 메커니즘을 통해 해당 트랜잭션을 실행하고 다음 트랜잭션을 트리거합니다.

이익:

✓ 중앙화된 트랜잭션 관리자 없이 일관된 분산 트랜잭션을 허용합니다.

✓ 마이크로서비스 전반에 걸쳐 최종 일관성을 지원합니다.

✓ 필요한 경우 불완전한 작업의 롤백을 활성화합니다.

예:

전자상거래 시스템에서는 주문 서비스가 주문을 생성하고 결제 서비스가 결제를 처리하며 재고 서비스가 재고 수준을 업데이트할 수 있습니다. 결제가 실패할 경우 주문 및 재고 업데이트를 롤백해야 하며 이는 보상 거래를 통해 처리됩니다.

5. 이벤트 소싱 패턴

이벤트 소싱 패턴은 시스템 상태를 일련의 이벤트로 저장합니다. 현재 상태를 데이터베이스에 저장하는 대신 마이크로서비스는 상태 변경을 나타내는 이벤트를 저장합니다. 이러한 이벤트를 재생함으로써 항상 현재 상태를 재구성할 수 있으며, 이는 완전한 감사 추적을 제공하고 정교한 복구 메커니즘을 가능하게 합니다.

이익:

✓ 모든 변경 사항에 대한 명확한 감사 추적을 제공합니다.

✓ 과거 사건을 재생하여 기록 분석이 가능합니다.

✓ 필요한 경우 상태 재구축을 촉진합니다.

예:

회계 시스템에서는 "거래 생성", "거래 승인", "거래 완료"와 같은 이벤트가 이벤트로 저장됩니다. 모든 거래 이벤트를 재생하여 현재 잔액을 다시 계산할 수 있습니다.

6. CQRS(명령 쿼리 책임 분리) 패턴

CQRS 패턴은 읽기 및 쓰기 작업을 여러 모델로 분리합니다. 쓰기 작업은 명령 모델에 의해 처리되고 읽기 작업은 쿼리 모델에 의해 처리됩니다. 이 패턴은 읽기가 쓰기보다 훨씬 빈번한 고성능 애플리케이션에 특히 유용합니다.

이익:

✓ 읽기/쓰기 문제를 분리하여 성능을 최적화합니다.

✓ 읽기 및 쓰기에 대한 다양한 확장성 전략을 지원합니다.

✓ 특정 작업에 맞게 조정된 유연한 모델을 허용합니다.

7. 교살자 무화과 패턴

Strangler Fig Pattern은 모놀리스의 일부를 마이크로서비스로 리팩터링하거나 교체할 수 있는 점진적인 마이그레이션 전략입니다. 새로운 기능이 추가되면 마이크로서비스로 구축됩니다. 시간이 지남에 따라 전체 시스템을 한 번에 중단하지 않고 서비스별로 모놀리스가 교체됩니다.

이익:

✓ 모놀리식에서 마이크로서비스로 마이그레이션할 수 있는 무중단 경로를 제공합니다.

✓ 전체 시스템 재작성 위험을 줄입니다.

✓ 점진적인 개선과 리팩토링이 가능합니다.

예:

시스템의 다른 부분은 그대로 유지하면서 모놀리식 애플리케이션의 사용자 인증 구성 요소를 독립형 마이크로서비스로 추출하는 것부터 시작할 수 있습니다. 시간이 지남에 따라 전체 시스템이 모듈화될 때까지 더 많은 구성 요소가 마이크로서비스로 이동됩니다.

결론

마이크로서비스 설계 원칙을 사용할 때 분산 시스템에서 발생하는 문제를 해결하는 방법은 다양합니다. 신뢰할 수 있고 확장 가능한 마이크로서비스 아키텍처를 구축하려면 서비스 간 데이터 관리, 서비스 간 통신 강화, 오류 처리 등 목표와 상관없이 이러한 패턴을 파악해야 합니다. 특정 요구 사항과 장단점을 해결함으로써 이러한 각 패턴은 마이크로서비스의 복원력과 성능에 기여합니다.

릴리스 선언문 이 기사는 https://dev.to/wallacefreitas/top-7-microservices-design-patterns-you-should-know-3c16?1에 복제되어 있습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다. 그것
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3