Skip to main content

Command Palette

Search for a command to run...

Cloud:: AWS 클라우드 디자인 패턴 시리즈 리뷰 : 안정성 편

Updated
2 min readView as Markdown

금일은 AWS 기술 블로그의 클라우드 디자인 패턴 시리즈 중 안정성 편을 리뷰하겠습니다. 안정성을 위한 디자인 패턴 2가지를 소개하며 이에 관한 도표와 관련 AWS 서비스를 소개하고 있습니다. 회로 차단기와 Retry 패턴을 구현하기 위한 AWS 서비스는 AWS Step Functions 이 있습니다.

아티클에서는 아키텍처 안정성을 위해 1) 회로 차단기(Circuit-breaker) 패턴, 2) Retry 패턴을 소개합니다.

1. 회로 차단기(Circuit-breaker) 패턴

회로 차단기(Circuit-breaker) 패턴은 전기 회로 차단기에서 영감을 받아 구현한 방식으로 외부 호출에 실패가 지속 발생할 경우 두 연결성을 해지하여 부가적인 문제 발생을 제지하는 것을 말합니다. 회로 차단기 패턴은 3가지 상태(닫힘(Closed), 열림(Open), 반 열림(Half open))들에 기반하여 시스템이 작동합니다.

회로 차단기의 작동 방식:

  1. 시스템 정상일 때는 회로가 닫혀있음. 마치 닫혀있을 때 전류가 흐를 수 있듯이.

  2. 실패 임계값이 넘을 경우 열림 상태로 전환. 열리면 전류가 흐르지 않음.

  3. 열린 상태에서 일정 시간 지난 후 반 열림(Half Open) 상태로 전환 후 호출 성공 여부 카운트.

  4. 호출 연속 성공하면 다시 닫힘 상태로 돌아가고, 그렇지 않으면 다시 열린 상태로 들어감.

회로 차단기를 적용하는 상황은 보통 실패 가능성 높은 Caller를 의도적으로 거부하거나, Caller의 요청에 대해 Callee(수신 서비스)의 지연 시간이 비정상적으로 높거나 장애 상황일 경우 입니다.

회로 차단기 구현 시 고려해야 할 점은 운영중 서비스와는 독립적으로 구현해야 합니다. 또 어드민 완전 제어를 통해 복구 시간을 통제할 수 있어야 합니다. 가시성(Observability) 확보를 통해 운영 상태 모니터링과 실패 요청에 관한 로깅도 필수입니다. 마지막으로 다중 스레드 호출의 경우, 첫 번째 호출에 대해 회로를 열어야 합니다.

https://aws.amazon.com/ko/blogs/tech/cloud-design-patterns-on-aws-1/

2. Retry with backoff 패턴

Retry with backoff 디자인 패턴은 요청 실패 시 즉각적인 재시도 대신 일정 대기 시간을 두고 재시도하는 방식입니다. 이를 통해 시스템 부하를 방지하고 애플리케이션의 안정성을 높일 수 있습니다.

대기 시간 설정에는 주로 지수 백오프(Exponential backoff)를 사용하며, 이는 대기 시간을 기하급수적으로 늘려가며 재시도하는 방식입니다. 실패한 호출들이 동시에 백오프하여 경합이 발생할 경우, 임의성을 추가하여 경합 상황을 완화할 수 있습니다.

Retry 패턴은 주로 아래와 같은 상황에 적용할 수 있습니다.

  • 429 Too many request 자주 발생할 경우

  • 일시적인 네트워크 이슈 발생할 경우

  • 요청 처리 서비스가 장애로 인해 서비스 성능이 저하될 수 있는 경우

https://aws.amazon.com/ko/blogs/tech/cloud-design-patterns-on-aws-1/

Review

이 글은 두 디자인 패턴의 개념을 명확하게 설명하고 있으며, 적용 상황과 주의점을 잘 짚어준다는 점에서 매우 유용했습니다. 서버 개발자로서 애플리케이션에 문제가 발생했을 때 예외 처리를 애플리케이션 내부에서만 해결하려는 접근을 무의식적으로 해왔는데요. 서킷 패턴의 경우, 운영 중인 서비스와 독립적으로 구현하여 애플리케이션을 둘러싼 시스템의 안정성 자체를 제어한다는 클라우드 관점의 접근 방식이 흥미로웠습니다.

Reference

https://aws.amazon.com/ko/blogs/tech/cloud-design-patterns-on-aws-1/

More from this blog

Cloud:: AWS Global Accelerator

금일은 AWS Global Accelerator가 무엇이고, DNS와 무엇이 다른지, 그리고 적용 방법에 대해 간단하게 다뤄보겠습니다. AWS 블로그 글을 참고했습니다. Summary DNS 대신 AWS 자체 네트워크 기반인 Global accelerator을 사용할 경우 성능과 안정성이 향상된다 accelerator 추가를 위해 포트 80번에 TCP 리스너를 추가하고, 리전별 엔드포인트 그룹을 생성한 후, 로드밸런서가 지역 엔드포인트와 ...

Nov 26, 20242 min read

Cloud:: AWS EC2, ECS 비용 절감 사례 분석

오늘은 레몬베이스 기술팀의 2024년 11월 AWS 클라우드 비용 절감 사례를 분석합니다. 저자는 EC2와 ECS 서비스의 비용을 절감했으며, 주요 절감 방식으로는 리소스 최적화, 할인 옵션 적용, 최신 인스턴스 활용을 사용했습니다. AWS 클라우드 비용은 AWS Billing Console과 Cost Explorer에서 확인할 수 있으며, 비용 통계 데이터의 시각화를 통해 각 영역별 비용 발생 현황을 직관적으로 파악할 수 있습니다. 이 글에...

Nov 25, 20242 min read

Riverman's Research

6 posts