일반적인 완화 전략 - AWS 권장 가이드

일반적인 완화 전략

시작하려면 예방 완화를 사용하여 장애 모드가 사용자 스토리에 영향을 미치지 않도록 하는 것이 좋습니다. 그런 다음 수정 완화 조치를 고려해야 합니다. 수정 완화는 시스템이 스스로 복구하거나 변화하는 조건에 적응하는 데 도움이 됩니다. 다음은 복원력 속성에 부합되는 각 장애 범주에 대한 일반적인 완화 목록입니다.

장애 범주

원하는 복원력 속성

완화

단일 장애점(SPOF)

중복성 및 내결함성

  • 예를 들어 Elastic Load Balancing(ELB) 이면에 있는 여러 EC2 인스턴스를 사용하여 중복성을 구현합니다.

  • AWS 글로벌 서비스 컨트롤 플레인의 종속성을 제거하고 글로벌 서비스 데이터 플레인에서만 종속성을 사용합니다.

  • 리소스를 사용할 수 없는 경우 단계적 성능 저하를 사용합니다. 그러면 시스템이 단일 장애점에 대해 정적으로 안정적입니다.

과도한 로드

충분한 용량

과도한 지연 시간

적시 출력

잘못된 구성 및 버그

올바른 출력

책임 공유

장애 격리

  • 시스템에서 내결함성을 구현하고 여러 컴퓨팅 또는 컨테이너 클러스터, 여러 AWS 계정, 여러 AWS Identity and Access Management(IAM) 위탁자, 여러 가용 영역 및 가능하면 여러 AWS 리전와 같은 논리적 및 물리적 장애 격리 경계를 사용합니다.

  • 셀 기반 아키텍처셔플 샤딩과 같은 기법도 장애 격리를 개선할 수 있습니다.

  • 계단식 실패를 방지하려면 느슨한 결합단계적 성능 저하와 같은 패턴을 고려합니다. 사용자 스토리의 우선순위를 지정할 때 해당 우선순위 지정을 통해 기본 비즈니스 기능에 필수적인 사용자 스토리와 단계적 성능 저하가 나타날 수 있는 사용자 스토리를 구분할 수도 있습니다. 예를 들어 전자 상거래 사이트에서는 웹 사이트에 있는 프로모션 위젯의 성능 저하가 새 주문을 처리하는 기능에 영향을 미치지 않기를 원할 수 있습니다.

이러한 완화 중 일부는 구현하는 데 최소한의 노력이 들지만, 특정 사용자 스토리의 구성 요소뿐만 아니라 전체 워크로드를 재설계해야 할 수도 있는 완화(예: 예측 가능한 장애 격리를 위한 셀 기반 아키텍처 채택 및 최소한의 책임 공유)도 존재합니다. 앞서 설명한 대로 장애 모드의 가능성과 영향을 완화하기 위해 수행한 절충을 비교하는 것이 중요합니다.

각 장애 모드 범주에 적용되는 완화 기법 외에도 사용자 스토리 또는 전체 시스템을 복구하는 데 필요한 완화 방법을 고려해야 합니다. 예를 들어 장애가 발생하면 워크플로가 중단되고 데이터가 의도한 대상에 기록되지 않을 수 있습니다. 이 경우 워크플로를 리드라이브하거나 데이터를 수동으로 수정하려면 운영 도구가 필요할 수 있습니다. 장애가 발생할 때 데이터 손실을 방지하기 위해 워크로드에 체크포인트 메커니즘을 빌드해야 할 수도 있습니다. 또는 워크플로를 일시 중지하고 추가 피해를 방지하고자 새 작업 수락을 중지하기 위해 비상 조치를 빌드해야 할 수 있습니다. 이러한 경우 필요한 운영 도구와 가드레일을 생각해보아야 합니다.

마지막으로 완화 전략을 개발할 때 사람의 실수를 항상 가정해야 합니다. 최신 DevOps 사례에서는 운영을 자동화하려고 하지만 인간은 여전히 다양한 이유로 워크로드와 상호 작용해야 합니다. 인적 작업이 잘못되면 유지 관리 중에 노드를 너무 많이 제거하거나 오버로드가 발생하거나 기능 플래그를 잘못 설정하는 등 SEEMS 범주에 장애가 발생할 수 있습니다. 이러한 시나리오는 실제로 예방 가드레일의 장애입니다. 근본 원인 분석에서 '사람은 실수를 하는 존재'라는 결론으로 끝나지 않아야 합니다. 대신 처음부터 실수가 발생한 이유를 해결해야 합니다. 따라서 완화 전략에서는 작업자가 워크로드 구성 요소와 상호 작용하는 방법과 안전 가드레일을 통해 작업자 실수로 인한 영향을 방지하거나 최소화하는 방법을 고려해야 합니다.