안정성 테스트 전략 설계를 위한 권장 사항

이 Azure Well-Architected Framework 안정성 검사 목록 권장 사항에 적용됩니다.

RE:08 테스트 및 프로덕션 환경에서 비정상 상황 엔지니어링 원칙을 적용하여 복원력 및 가용성 시나리오를 테스트합니다. 테스트를 사용하여 활성 오작동 및 시뮬레이션된 부하 테스트를 수행하여 정상적인 성능 저하 구현 및 크기 조정 전략이 효과적인지 확인합니다.

이 가이드에서는 워크로드의 안정성을 검증하고 최적화하기 위한 안정성 테스트 전략을 설계하기 위한 권장 사항을 설명합니다. 안정성 테스트는 워크로드의 복원력 및 가용성, 특히 솔루션을 디자인할 때 식별하는 중요한 흐름에 중점을 둡니다. 이 가이드에서는 오류 주입 및 카오스 엔지니어링과 관련된 일반적인 테스트 지침 및 지침을 제공합니다.

정의

용어 정의
가용성 상당한 가동 중지 시간 없이 애플리케이션 워크로드가 정상 상태로 실행되는 시간입니다.
카오스 엔지니어링 애플리케이션 및 서비스를 실제 스트레스와 실패에 적용하는 사례입니다. 카오스 엔지니어링의 목표는 신뢰할 수 없는 조건과 누락된 종속성에 대한 복원력을 구축하고 유효성을 검사하는 것입니다.
오류 주입 시스템의 복원력을 테스트하기 위해 시스템에 오류를 도입하는 행위입니다.
복구 기능 복원력의 동의어입니다.
복원력 실패 모드를 견디고 복구하는 애플리케이션 워크로드의 기능입니다.

주요 디자인 전략

일반 테스트 지침

  • 테스트를 정기적으로 수행하여 기존 임계값, 대상 및 가정의 유효성을 검사합니다. 워크로드에서 큰 변화가 발생하면 정기적인 테스트를 실행합니다. 테스트 및 스테이징 환경에서 대부분의 테스트를 수행합니다. 프로덕션 시스템에 대해 테스트의 하위 집합을 실행하는 것도 유용합니다. 프로덕션 환경을 사용하여 주요 테스트 환경의 일대일 패리티를 계획합니다.

  • 테스트를 자동화하여 일관된 테스트 검사 및 재현성을 보장합니다. 일반적인 테스트 작업을 자동화하고 빌드 프로세스에 통합합니다. 수동으로 소프트웨어를 테스트하는 것은 지루하고 오류에 취약하지만 수동 예비 테스트를 수행할 수 있습니다. 자동화된 테스트를 개발해야 하는 경우 수동 테스트를 사용하여 개발할 테스트의 scope 확인합니다.

  • 개발 주기 초기에 복원력 및 가용성 테스트를 수행하기 위한 시프트 레프트 테스트 접근 방식을 채택합니다.

  • 모든 사용자가 모든 일반 테스트의 프로세스와 결과를 쉽게 이해할 수 있도록 간단한 설명서 형식을 조정합니다.

  • 문서화된 결과를 운영 팀, 기술 리더십, 비즈니스 이해 관계자 및 재해 복구 관련자와 같은 적절한 팀과 공유합니다. 결과는 SLO(서비스 수준 목표), SLA(서비스 수준 계약), RTO(복구 시간 목표) 및 RPO(복구 지점 목표)와 같은 안정성 목표의 구체화를 알려야 합니다.

  • 백업에 대한 정기적인 테스트 주기를 만듭니다. 데이터를 격리된 시스템으로 복원하여 백업이 유효하고 복원이 제대로 작동하도록 합니다.

  • 복구에 대한 기대치가 적절한지 확인하기 위해 재해 복구 관련자와 복구 시간 메트릭을 문서화하고 공유합니다.

  • 업계 표준 배포 테스트 절차를 사용하여 자동화되고 예측 가능하며 효율적인 배포 프로세스를 갖도록 합니다.

  • 일시적인 오류를 견딜 수 있는 워크로드의 기능을 테스트합니다. 자세한 내용은 일시적인 오류 처리에 대한 권장 사항을 참조하세요.

  • 부하 패턴의 변경 내용과 사용량 급증에 대응하는 워크로드의 기능을 테스트합니다. 이 정보를 사용하여 크기 조정 전략을 테스트할 수 있습니다. 부하 및 스트레스 테스트에 대한 자세한 내용은 테스트 권장 사항을 참조하세요.

  • 워크로드가 오류 주입을 사용하여 종속 서비스 또는 기타 종속성에서 오류를 처리하는 방법을 테스트합니다.

  • 자기 치유 및 자기 보존 디자인이 오작동에 어떻게 반응하는지 테스트하고 유효성을 검사합니다. 자동화된 복구 및 수동 복구 작업을 테스트합니다.

  • 재해 복구 계획을 테스트하여 치명적인 오류 및 기타 주요 인시던트에 대응합니다.

  • 오류 주입을 사용하여 정상적으로 성능이 저하되고 구성 요소 오작동의 폭발 반경을 최소화하는 워크로드의 기능을 테스트합니다.

계획된 중단 및 계획되지 않은 중단 활용

계획된 유지 관리 또는 계획되지 않은 중단으로 인해 워크로드가 오프라인 상태이면 테스트를 수행하고 워크로드에 대한 이해를 향상시킬 수 있는 고유한 기회가 있습니다. 다음 섹션에서는 각 시나리오에 대한 권장 사항을 제공합니다.

계획된 유지 보수

업데이트 또는 패치에 대한 유지 관리 기간을 계획한 경우 유지 관리 작업에 포함되지 않은 구성 요소 및 흐름을 테스트할 수 있습니다. 예기치 않게 워크로드를 저하하거나 모두 오프라인으로 전환할 위험이 없는 테스트를 수행합니다. 유지 관리 기간 동안 충분한 시간이 있는 경우 유지 관리 작업이 완료된 후 유지 관리에 관련된 구성 요소 및 흐름을 테스트할 수도 있습니다.

계획되지 않은 중단

모든 중단 인시던트를 워크로드에 대해 자세히 알아보고 우선 순위에 따라 다음 단계를 수행하여 복원력을 개선할 수 있는 기회로 사용합니다.

  • 고객을 위해 워크로드를 다시 온라인으로 가져옵니다. 이렇게 하려면 문제에 대한 해결 방법을 수행하거나 문제를 resolve 복구 프로세스를 시작할 수 있습니다.

  • 중단의 근본 원인을 확인하고 해결합니다. 조사의 일환으로 근본 원인을 해결할 수 있는 경우 근본 원인과 이를 해결하기 위해 취한 조치를 문서화합니다. 문제가 나중에 추가 유지 관리 기간을 수행해야 하는 경우 완화 조치가 예상되는 부하를 철저히 테스트하여 처리할 수 있는지 확인합니다. 완화 조치를 다루기에 충분한 모니터링을 설정해야 합니다.

  • 해당하는 경우 워크로드의 모든 구성 요소에서 유사한 문제의 영향을 받을 수 있는 동일한 문제 또는 구성 약점을 찾습니다. 이 기회를 사용하여 이러한 구성 요소를 사전에 해결합니다. 워크로드 전체에서 유사한 문제의 패턴을 검색하려면 인시던트 기록을 참조하세요.

  • 결과를 사용하여 테스트 전략을 개선합니다. 동일한 오류를 직접 테스트하여 근본 원인 및 유사한 문제를 성공적으로 해결했는지 확인합니다.

오류 주입 및 비정상 상황 엔지니어링 지침

오류 주입 테스트는 구성 요소 오류에 대응하는 워크로드의 기능을 강조하여 비정상 상황 엔지니어링의 원칙을 따릅니다. 사전 프로덕션 및 프로덕션 환경에서 오류 주입 테스트를 수행합니다. 인프라 및 애플리케이션 계층에 테스트를 적용합니다. 오류 모드 분석을 수행하기 위한 권장 사항을 학습한 정보를 적용하여 우선 순위를 지정하는 오류만 테스트하고 오류를 해결하는 완화 전략이 있는지 확인합니다. 카오스 엔지니어링의 주요 지침은 다음과 같습니다.

  • 자동 관리. 오류가 발생할 때까지 기다리지 마세요. 비정상 상황 실험을 수행하여 오류를 예측하여 프로덕션 환경에 영향을 미치기 전에 문제를 검색하고 해결합니다.

  • 실패 수용. 시스템에서 발생하는 오류를 수락하고 알아봅니다. 오류를 복잡한 시스템의 자연스러운 부분으로 보고 이를 시스템의 안정성을 배우고 개선할 수 있는 기회로 사용합니다.

  • 시스템 중단. 의도적으로 시스템에 오류 또는 스트레스를 주입하여 복원력을 테스트합니다. 실제 오류 또는 중단을 시뮬레이션하여 워크로드의 복구 기능을 테스트하고 개선합니다.

  • 단일 실패 지점을 조기에 식별하고 해결. 테스트할 때 오류 모드 분석을 참조하고 업데이트하여 설명서의 오류에 대한 유효성을 검사하고 해결합니다. 중복성 및 세분화와 같은 안정성 접근 방식을 적용하여 워크로드의 가용성을 높이고 가동 중지 시간을 최소화합니다.

  • 가드 레일 및 정상적인 완화 방법 설치. 회로 차단기 패턴 또는 제한 패턴과 같은 안전 조치를 구현하여 가용성을 높입니다. 오류 발생 시 비즈니스 연속성을 가능하게 하는 정상적인 성능 저하 접근 방식을 구현합니다.

  • 폭발 반경 최소화. 오류 격리 전략을 구현하여 오류가 발생하더라도 해당 scope 제한되도록 합니다. 시스템은 고객에게 미치는 영향을 최소화하면서 계속 작동합니다.

  • 면역 구축. 비정상 상황 엔지니어링 실험을 사용하여 오류를 방지하고 복구하는 워크로드의 기능을 개선합니다.

카오스 엔지니어링은 단일 중단에 대한 대응으로 단기적인 전술적 노력이 아니라 워크로드 팀 문화와 지속적인 관행의 필수적인 부분입니다. 비정상 상황 실험을 디자인할 때 다음 표준 방법을 따릅니다.

  1. 가설로 시작합니다. 각 실험에는 특정 구성 요소의 손실을 견딜 수 있는 지정된 흐름의 기능을 테스트하는 것과 같은 명확한 목표가 있어야 합니다.
  2. 기준 동작을 측정합니다. 실험을 실행할 때 성능이 저하된 상태와 비교하려면 지정된 실험과 관련된 흐름 및 구성 요소에 대한 일관된 안정성 및 성능 메트릭이 있는지 확인합니다.
  3. 오류를 삽입합니다. 실험은 신속하게 복구할 수 있는 특정 구성 요소를 의도적으로 대상으로 지정해야 하며, 오류 주입으로 인해 실험의 폭발 반경을 제어하는 데 도움이 되는 영향에 대한 정보에 입각한 기대가 있어야 합니다.
  4. 결과 동작을 모니터링합니다. 개별 흐름 구성 요소 및 실험이 대상으로 하는 엔드 투 엔드 흐름 동작에 대한 원격 분석을 수집하여 오류의 영향을 제대로 이해합니다. 수집한 메트릭을 기준 메트릭과 비교하여 오류 주입 결과의 전체 그림을 확인합니다.
  5. 프로세스 및 관찰 내용을 문서화합니다. 실험에 대한 자세한 기록을 유지하면 워크로드 디자인에 대한 향후 결정을 알리고 시간이 지남에 따라 드러난 격차를 해결할 수 있습니다.
  6. 결과를 식별하고 조치를 취합니다. 향상된 기능으로 워크로드 백로그에 추가할 수 있는 수정 단계를 계획합니다. 다른 배포와 동일한 프로세스에 따라 비프로덕션 환경에서 디자인 개선 계획을 검토하고 테스트해야 합니다.

프로세스, 아키텍처 선택 사항 및 코드의 유효성을 주기적으로 검사하여 기술 문제를 신속하게 감지하고, 새로운 기술을 통합하고, 변화하는 요구 사항에 적응합니다.

오류 주입 실험을 수행하는 경우 다음을 수행합니다.

  • 모니터링이 준비되고 경고가 설정되어 있는지 확인합니다.
  • 인시던트 소유권을 소유하도록 DRI(직접 책임 있는 개인)를 할당하는 프로세스의 유효성을 검사합니다.
  • 설명서 및 조사 프로세스가 최신 상태인지 확인합니다.

다음 권장 사항 및 고려 사항을 통합하여 비정상 상황 테스트 전략을 최적화합니다.

  • 시스템 가정에 이의를 제기합니다. 테스트를 통해 워크로드의 복원력과 워크로드 디자인 전략을 개선하려고 합니다. 과거의 경험을 기반으로 신뢰할 수 있다고 가정하는 구성 요소 및 흐름에 오류를 삽입할 기회를 찾습니다. 새 워크로드에서 신뢰할 수 없을 수도 있습니다.

  • 토폴로지, 플랫폼 및 리소스와 같은 변경 내용의 유효성을 검사합니다. 오류 주입 테스트를 포함하여 철저한 테스트가 없으면 변경된 후 워크로드에 대한 불완전한 그림이 있을 수 있습니다. 예를 들어 새 종속성을 실수로 도입하거나 즉시 명확하지 않은 방식으로 기존 종속성을 손상할 수 있습니다.

  • SLA 버퍼를 사용합니다. 비정상 상황 테스트를 제한하여 SLA 내에 머무르고 잠재적인 평판 또는 중단으로 인한 재정적 영향을 방지합니다. 흐름 및 구성 요소 복구 대상은 테스트의 scope 정의하는 데 도움이 됩니다.

  • 카오스 및 오류 삽입에 대한 투자로 오류 예산을 설정합니다. 오류 예산은 SLO의 100%를 달성하는 것과 합의된 SLO 달성의 차이입니다.

  • scope 넘어가면 실험을 중지합니다. 알 수 없는 결과는 카오스 실험의 예상된 결과입니다. 상당한 결과 데이터를 수집하고 가능한 한 적은 수의 프로덕션 사용자에게 영향을 미치는 것 사이의 균형을 맞추기 위해 노력합니다.

  • 개발 팀과 긴밀히 협력하여 삽입된 오류의 관련성을 확인합니다. 과거 인시던트 또는 문제를 가이드로 사용합니다. 종속성을 검사하고 해당 종속성을 제거할 때 결과를 평가합니다.

  • 비정상 상황 테스트를 통해 표시되는 워크로드 내의 여러 구성 요소 간에 이전에 발견되지 않은 종속성을 식별하고 문서화합니다.

  • 카오스 테스트 중에 검색된 종속성을 고려하여 필요에 따라 복구 계획을 조정합니다.

  • 실험 및 테스트의 결과를 새 실험 및 테스트의 기초로 사용합니다. 예기치 않은 동작이 발생하면 새 테스트가 이러한 동작을 직접 대상으로 지정하고 수정 전략을 설계할 수 있는 기회를 제공할 수 있습니다.

절충: 프로덕션에서의 오류 주입 테스트는 중단될 수 있으며 잠재적으로 가동 중지 시간을 유발할 수 있습니다. 이러한 가능성에 대해 이해 관계자와 투명하게 확인하고 실험을 종료하고 계획을 롤백하여 발생하는 오류를 신속하게 되돌릴 수 있는 안전 장치가 있는지 확인합니다. 프로덕션의 의도하지 않은 중단을 방지하려면 충분한 중복성을 계획하고 관련자가 비용 절충을 이해해야 합니다.

Azure 촉진

Azure Test Plans 계획된 수동 테스트, 사용자 승인 테스트, 예비 테스트 및 관련자의 피드백 수집에 필요한 모든 기능을 제공하는 사용하기 쉬운 브라우저 기반 테스트 관리 솔루션입니다.

Azure Chaos Studio는 카오스 엔지니어링을 사용하여 클라우드 애플리케이션 및 서비스 복원력을 측정, 이해 및 개선하는 데 도움이 되는 관리형 서비스입니다. Azure Chaos Studio는 Ignite 2023에서 일반 공급에 도달했으며 Azure 인프라를 사용하여 애플리케이션에 대한 오류 주입 및 복원력 테스트를 시작하는 데 도움이 되는 많은 기능을 갖추고 있습니다.

안정성 검사 목록

전체 권장 사항 집합을 참조하세요.