안정성 여정은 시스템이 계속 사용 가능하고 사용자 기대치를 충족하도록 각 스테이지가 이전 단계를 기반으로 하는 단계별 프로세스입니다. 이 완성도 모델은 현재 상태를 평가하고 개선에 대한 구조적 경로를 제공하는 데 도움이 됩니다.
기초는 광범위한 최적화 오버헤드 없이 즉시 개선을 위해 영역 중복과 같은 기본 제공 Azure 안정성 기능을 사용하여 Azure에서 제공하는 기본 안정성 기능을 부트스트래핑하는 것으로 시작합니다.
직관에 반하여 높은 안정성을 달성하는 방법은 실패를 불가피한 것으로 받아들이는 것입니다. 모든 문제를 방지하는 것보다는 문제가 발생할 때 시스템이 어떻게 대응할지 계획하는 것이 더 효과적입니다. 비즈니스 요구 사항은 사전에 해결할 가치가 있는 위험을 결정하는 데 도움이 됩니다. Teams는 구조적 관찰성을 갖춘 고급 모니터링 기능에 투자하고, 애플리케이션 수준 문제를 포함하도록 오류 완화를 확장하고, 복원력 측정값 테스트를 시작합니다.
다음으로 팀은 비즈니스 인사이트를 기술 기술과 통합합니다. Teams는 상태 모델링을 구현하고, 실패 모드 분석을 수행하고, 포괄적인 재해 복구 계획을 준비합니다. 이 단계는 측정 가능한 목표와 다양한 오류 시나리오에 대한 체계적인 준비를 통해 책임을 보장합니다.
시스템이 라이브 상태가 된 후에는 변경 관리, 데이터 증가 및 운영 복잡성 처리, 시스템 안정성에 미치는 영향 등 프로덕션 환경의 문제를 관리하는 데 중점을 둡니다.
최종 수준은 무기한으로 실행되며 복원력을 유지하는 것이 목표입니다. 이 수준은 기술 제어를 넘어 아키텍처 적응성에 대한 진화를 나타냅니다. 이 수준은 워크로드가 진화하고 증가함에 따라 시스템이 새롭고 예기치 않은 위험을 견딜 수 있도록 하는 데 중점을 둡니다.
모델은 각각 기본 목표와 핵심 전략 집합이 있는 5개의 고유한 완성도 수준으로 구성됩니다. 아래 탭 보기를 사용하여 각 수준을 탐색합니다. 진행하면서 강조 표시된 장단 사항 및 관련 위험도 검토해야 합니다.
최적화 작업에 시간을 소비하는 대신 워크로드 인프라 및 운영에서 복원력을 위한 견고한 토대를 설정합니다.
완성도 모델의 수준 1은 워크로드 팀이 시스템 안정성을 위한 강력한 기반을 구축할 수 있도록 설계되었습니다. 향후 안정성 결정을 위한 기본 사항을 설정하는 프로세스인 부트스트래핑에 중점을 두고 있습니다. 이 단계에는 주로 현재 사례에 대한 사소한 확장이 있는 기능 구현이 포함됩니다.
이 단계에는 연구, 인사이트 얻기 및 시스템 인벤토리 만들기가 포함됩니다. 또한 즉시 개선을 위해 영역 중복성을 사용하도록 설정하는 것과 같은 Azure의 기본 제공 안정성 기능을 사용합니다.
이러한 기본 사항을 설정하면 팀이 안정성 완성도 모델의 수준을 발전시켜 시스템의 복원력과 성능을 점진적으로 향상할 수 있도록 준비할 수 있습니다.
주요 전략
✓ 운영 책임을 오프로드할 기회를 평가합니다.
이 전략은 근본적으로 구축과 구매 또는 의존 접근법의 대조입니다. 결정은 향후 개발을 지원하면서 이 단계에서 얼마나 많은 책임을 관리할 수 있는지에 따라 달라집니다. 워크로드와 관련된 리소스를 사용하려고 하지만 유지 관리를 오프로드할 수 있는 기회를 항상 탐색해야 합니다. 다음은 이 방법을 적용할 수 있는 몇 가지 클래식 사용 사례입니다.
PaaS(Platform as a Service) 솔루션을 선택하여 클라우드 플랫폼에 대한 책임을 오프로드합니다. 복제, 장애 조치(failover) 및 백업 저장소와 같은 일반적인 복원력 요구 사항에 대해 준비된 솔루션을 제공합니다. 이 방법을 사용하면 클라우드 공급자가 호스팅, 유지 관리 및 복원력 향상을 처리합니다.
예를 들어 클라우드 공급자는 여러 컴퓨팅 노드에서 데이터를 복제하고 가용성 영역에 복제본을 분산합니다. VM(가상 머신)에서 고유한 솔루션을 빌드하는 경우 이러한 측면을 직접 관리해야 하며, 이는 시간이 많이 걸리고 복잡할 수 있습니다.
워크로드의 비즈니스 목표에 직접 연결되지 않은 작업에 대한 책임을 오프로드합니다. 데이터베이스 관리 및 보안과 같은 일부 특수 작업은 워크로드의 안정성에 영향을 줄 수 있습니다. 숙련된 팀, 기술 또는 둘 다 이러한 작업을 처리할 수 있는 가능성을 살펴봅니다.
예를 들어 팀에 데이터베이스 전문 지식이 없는 경우 관리되는 서비스를 사용하여 책임을 공급자로 전환할 수 있습니다. 이 방법은 팀이 워크로드의 기능에 집중할 수 있으므로 시작할 때 유용할 수 있습니다. 많은 기업에서 중앙에서 관리되는 서비스를 공유했습니다. 플랫폼 팀을 사용할 수 있는 경우 이러한 작업을 처리하는 데 사용합니다. 그러나 이 방법은 종속성과 조직의 복잡성을 더할 수 있습니다.
또는 팀에 적절한 전문 지식이 있는 경우 자신의 기술을 사용하고 관리 기능이 포함되지 않은 서비스를 선택하도록 명시적으로 결정할 수 있습니다.
Microsoft가 아닌 공급업체에 책임을 오프로드합니다. 기성품을 출발점으로 선택합니다. 워크로드의 비즈니스 가치에 기여하는 경우에만 사용자 지정된 솔루션을 빌드합니다.
위험:구매 또는 신뢰 옵션이 요구 사항을 부분적으로 충족하는 경우 사용자 지정 확장을 구현해야 할 수 있습니다. 이 메서드는 업데이트 및 현대화가 실용적이지 않은 "사용자 지정 잠금" 상황을 초래할 수 있습니다. 요구 사항을 정기적으로 검토하고 솔루션의 기능과 비교합니다. 둘 사이에 상당한 편차가 있는 경우에 대한 종료 전략을 개발합니다.
반대 시나리오도 위험합니다.
처음에는 구매 또는 신뢰 옵션이 더 간단해 보일 수 있지만, PaaS 서비스, 공급업체 솔루션 또는 플랫폼 소유 리소스의 제한 사항이 워크로드에 필요한 세분성 또는 수준의 자율성을 충족하지 않는 경우 나중에 재평가 및 재설계가 필요할 수 있습니다.
✓ 중요한 사용자 및 시스템 흐름 식별
이 단계에서는 워크로드를 흐름으로 분해하는 것이 중요합니다.
사용자 및 시스템 흐름에 집중합니다. 사용자 흐름은 사용자 상호 작용을 결정하며 시스템 흐름은 사용자 작업과 직접 연결되지 않은 워크로드 구성 요소 간의 통신을 결정합니다.
예를 들어 전자 상거래 애플리케이션에서 고객은 검색 및 주문과 같은 프런트 엔드 작업을 수행합니다. 한편, 백 엔드 트랜잭션 및 시스템 트리거 프로세스는 사용자 요청을 처리하고 다른 작업을 처리합니다. 이러한 고유 흐름은 동일한 시스템의 일부이지만 서로 다른 구성 요소를 포함하고 다른 용도로 사용됩니다.
이 단계에서 흐름 카탈로그 작성을 시작합니다. 사용자 상호 작용 및 구성 요소 통신을 관찰합니다. 흐름을 나열 및 분류하고, 시작점과 끝점을 정의하고, 종속성을 기록합니다. 명확성을 위해 다이어그램을 사용하여 결과 및 예외를 문서화합니다. 이 카탈로그는 비즈니스 이해 관계자와의 초기 대화에서 자신의 관점에서 가장 중요한 측면을 식별하는 중요한 도구 역할을 할 수 있습니다. 이 대화는 우선 순위의 첫 번째 수준을 알릴 수 있습니다.
기본 비즈니스 활동에 대한 위험 및 영향을 평가하여 흐름을 중요로 분류합니다. 중단이 예상되는 경우, 점진적 성능 저하는 중요한 흐름을 유지하는 데 초점을 맞춥니다. 전자상거래 예제에서 중요한 흐름에는 제품 검색, 카트에 항목 추가, 체크 아웃 등이 포함됩니다. 이러한 작업은 비즈니스에 필수적이기 때문입니다. 제품 데이터 업데이트 및 제품 이미지 유지 관리와 같은 다른 프로세스는 중요하지 않습니다. 사용자가 제품을 계속 검색하고 카트에 항목을 추가할 수 있도록 하여 중단 시 중요한 흐름이 계속 작동하여 수익 손실을 방지합니다.
비고
비즈니스 프로세스는 시간이 중요하지 않더라도 중요할 수 있습니다. 시간 중요도는 핵심 요소입니다. 예를 들어 감사 요구 사항을 충족하는 것은 중요한 프로세스이지만 감사에 대한 데이터를 즉시 제공하지 않아도 될 수 있습니다. 프로세스는 여전히 중요하지만 몇 시간 내에 복구할 수 있기 때문에 안정성은 시간이 중요하지 않습니다.
자세한 내용은 Azure Well-Architected Framework: 흐름을 사용하여 워크로드 디자인 최적화를 참조하세요.
✓ 올바른 디자인 모델, 리소스 및 기능 선택
다음 수준에서 이 전략을 적용해야 합니다.
건축학: 워크로드 디자인은 다양한 인프라 계층의 안정성 기대치를 고려해야 합니다. 초기 결정은 애플리케이션을 호스팅하기 위한 컨테이너화 또는 PaaS 중에서 선택할 수 있습니다. 또는 허브, 스포크 또는 단일 가상 네트워크와 같은 네트워킹 설정을 고려할 수 있습니다.
또한 기능에 따라 구분을 만드는 경계를 설정해야 합니다. 예를 들어 단일 영역 가상 디스크를 사용하여 한 VM에서 모든 항목을 호스팅하는 대신 컴퓨팅 및 데이터 스토리지를 분할하고 전용 서비스를 사용하는 것이 좋습니다.
주의
마이그레이션 시나리오에서 새로운 기회를 검토하지 않고 리프트 앤 시프트 접근 방식을 채택하면 누락된 이점과 비효율성이 발생할 수 있습니다. 변경하기 어려운 설정에 갇히지 않도록 조기에 현대화를 연구하고 더 나은 옵션과 개선 사항을 활용하는 것이 중요합니다.
Azure 서비스: 의사 결정 트리를 사용하여 디자인에 적합한 서비스를 선택할 수 있습니다. 워크로드가 진화하고 더 많은 기능이 필요할 때 서비스를 전환할 수 있도록 현재 요구 사항을 충족하지만 유연하게 유지되는 구성 요소를 선택합니다.
Azure 서비스 내의 SKU 또는 계층: 각 SKU의 기능을 검토하고 플랫폼의 가용성 보장을 이해합니다. 서비스 수준 계약을 평가하여 게시된 백분위수 주위에 제공되는 적용 범위를 이해합니다.
안정성을 지원하는 기능: 코드를 변경하지 않고 간단한 구성을 통해 가용성을 향상하려면 클라우드 네이티브 서비스를 선택합니다. 옵션을 이해하고 영역 중복을 늘리거나 보조 지역에 데이터를 복제하는 것과 같은 구성을 의도적으로 선택하는 것이 중요합니다.
✓ 기본 수준의 이중화로 배포
솔루션의 각 부분 내에서 단일 인스턴스와 같은 단일 실패 지점을 방지합니다. 대신 중복성을 위해 여러 인스턴스를 만듭니다. Azure 서비스는 일반적으로 기본적으로 로컬 중복성과 업그레이드 옵션을 포함하는 PaaS 서비스에서 중복성을 처리하는 경우가 많습니다. 바람직하게는 영역 중복성을 사용하여 여러 Azure 데이터 센터에 이러한 인스턴스를 분산하는 것이 좋습니다. 그렇지 않은 경우 적어도 로컬 중복성을 보장하지만 이 방법은 위험이 더 높습니다. 향후 수준에서는 지역 중복 구성 요소를 사용하여 솔루션을 확장하여 안정성 요구 사항이 충족될 수 있는지 여부를 평가합니다.
트레이드오프: 한 가지 중요한 타협은 중복성 비용 증가입니다. 또한 영역 간 통신으로 인해 대기 시간이 발생할 수 있습니다. 최소 대기 시간이 필요한 레거시 애플리케이션의 경우 중복성이 성능을 저하시킬 수 있습니다.
위험: 애플리케이션이 다중 인스턴스 환경을 위해 설계되지 않은 경우 여러 활성 인스턴스로 인해 어려움을 겪을 수 있으며 이로 인해 데이터가 일관되지 않을 수 있습니다. 또한 대기 시간이 짧은 온-프레미스 설치를 위해 애플리케이션을 빌드하는 경우 가용성 영역을 사용하면 성능이 저하될 수 있습니다.
✓ 메트릭, 로그 및 추적을 사용하도록 설정하여 흐름 모니터링
Azure Monitor와 같은 플랫폼 네이티브 도구를 선택하여 메트릭, 로그 및 추적의 가시성을 보장합니다. 기본 제공 기능을 사용하여 잠재적인 문제에 대한 경고를 설정합니다. 알림을 보내고 경고를 받을 수 있는 기본 경고가 있어야 합니다. 다음과 같은 서비스의 상태 변경을 나타내는 Azure 플랫폼 기능을 활용합니다.
인프라와 애플리케이션 모두에 대한 Azure Monitor 작업 그룹을 설정합니다.
트레이드오프: 더 많은 로그를 수집할수록 증가하는 로그의 양을 관리해야 하며, 이는 해당 로그의 저장 관련 비용에 영향을 미칩니다. 보존 정책을 사용하여 볼륨을 관리합니다. Azure Monitor를 사용하여 작업 영역에서 일일 한도를 설정합니다. 자세한 내용은 안정성에 대한 구성 권장 사항을 참조하세요.
다음 계층에서 관찰성 빌드를 시작합니다.
인프라
먼저 진단 로그를 사용하도록 설정하고 분석을 위해 플랫폼 구성 요소에서 네이티브 메트릭을 수집해야 합니다. CPU, 메모리, 입력/출력 및 네트워크 활동과 같은 리소스 사용량에 대한 정보를 수집합니다.
신청
메모리 사용량 또는 요청 대기 시간, 로그 애플리케이션 활동과 같은 애플리케이션 수준 메트릭을 수집합니다. 스레드 또는 주 애플리케이션 스레드와 별개인 프로세스에서 로깅 작업을 수행합니다. 이 방법을 사용하면 로깅이 애플리케이션의 기본 작업을 느리게 하지 않습니다.
또한 Application Insights에서 기본 가용성 테스트를 확인합니다.
데이터
기본 수준에서 데이터베이스를 모니터링하려면 데이터베이스 리소스에서 내보내는 주요 메트릭을 수집합니다. 인프라 구성 요소와 마찬가지로 네트워킹 메트릭과 같은 데이터 저장소의 컨텍스트에서 리소스 사용량을 추적합니다. 연결이 풀링되는 방법에 대한 데이터를 수집하는 것은 이후 단계에서 효율성을 향상시키는 데 중요합니다.
안정성을 위해 활성 및 실패한 연결 모니터링과 같은 연결 메트릭을 추적하는 것이 중요합니다. 예를 들어 Azure Cosmos DB에서 요청 수가 할당된 요청 단위를 초과하고 연결이 실패하기 시작하면 429 상태 코드가 반환됩니다.
✓ 오류 완화 플레이북 빌드 시작
오류는 간헐적 오류부터 약간 확장된 일시적 오류 및 치명적인 중단에 이르기까지 다양합니다.
수준 1에서는 플랫폼 오류에 집중합니다. 사용자가 제어할 수 없는 경우에도 이를 처리하기 위한 전략이 있어야 합니다. 예를 들어, 가용성 영역을 통해 영역별 중단 문제를 해결합니다. 플랫폼 수준에서 일시적인 오류를 예상하고 워크로드에서 처리합니다.
이러한 오류를 처리하는 프로세스는 복잡성에 따라 달라집니다. 잠재적인 플랫폼 수준 오류, 관련 위험 및 완화 전략을 문서화하기 시작합니다. 이 연습은 주로 이론적이고 이후 수준의 자동화로 완성됩니다.
가능성, 영향 및 완화 전략과 같은 요소를 포함하여 오류를 문서화해야 합니다. 워크로드의 목표에 맞는 중요도 배율을 사용합니다. 규모에는 다음이 포함될 수 있습니다.
높음. 심각한 재정적 손실과 사용자 신뢰 감소를 초래하는 완전한 시스템 중단.
보통. 워크로드의 일부에 영향을 미치고 사용자에게 불편을 주는 일시적인 중단입니다.
낮다. 애플리케이션의 중요하지 않은 기능에 영향을 미치고 사용자에게 가동 중지 시간을 최소화하는 사소한 소프트웨어 문제입니다.
예제 템플릿은 다음과 같습니다.
| 문제 |
위험 |
출처 |
심각도 |
가능성 |
완화 방법 |
| 일시적인 네트워크 오류 |
클라이언트가 애플리케이션 서버에 대한 연결을 끊습니다. |
Azure 플랫폼 |
높음 |
매우 가능성이 높습니다. |
다시 시도 논리 및 회로 차단기와 같은 클라이언트 쪽 논리에서 디자인 패턴을 사용합니다. |
| 영역 장애 |
사용자가 애플리케이션에 연결할 수 없습니다. |
Azure 플랫폼 |
높음 |
가능성이 없음 |
모든 구성 요소에서 영역 복원력을 사용하도록 설정합니다. |
| TLS(전송 계층 보안) 인증서 만료 |
클라이언트는 애플리케이션을 사용하여 TLS 세션을 설정할 수 없습니다. |
사용자 오류 |
높음 |
가능성 높음 |
자동화된 TLS 인증서 관리를 사용합니다. |
| CPU 또는 메모리 사용량이 정의된 제한에 도달하여 서버가 실패합니다. |
요청 시간이 초과되었습니다. |
신청 |
미디엄 |
가능성 높음 |
자동 다시 시작을 구현합니다. |
| 업데이트하는 동안 구성 요소를 사용할 수 없습니다. |
사용자가 애플리케이션에서 처리되지 않은 오류가 발생합니다. |
구성의 배포 또는 변경 |
낮음 |
배포 중 가능성이 높고 다른 시간에는 가능성이 없습니다. |
클라이언트 쪽 논리에서 구성 요소를 처리합니다. |
수준 1에서는 항상 예기치 않은 오류 사례가 있기 때문에 완전성을 위해 노력하지 마세요. 예기치 않은 중단이 발생하는 경우 플레이북에서 원인 및 완화를 문서화합니다. 이 자산을 시간이 지남에 따라 업데이트하는 살아있는 문서로 처리합니다.
✓ 일시적인 오류로부터 복구하는 메커니즘 추가
클라우드 환경에서 일시적인 오류는 일반적입니다. 재시도는 일반적으로 몇 초 내에 해결할 수 있는 단기적인 문제를 나타냅니다.
기본 제공 SDK 및 구성을 사용하여 이러한 오류를 처리하여 시스템을 활성 상태로 유지합니다. 기본 제공 구성은 종종 기본 설정이므로 구현의 유효성을 검사하기 위해 테스트해야 할 수 있습니다. 또한 아키텍처에서 일시적인 오류를 처리하도록 설계된 패턴을 구현합니다. 자세한 내용은 안정성을 지원하는 아키텍처 디자인 패턴을 참조하세요.
지속성 문제는 일시적이지 않은 오류 또는 중단의 시작을 나타낼 수 있습니다. 이 시나리오에는 애플리케이션 내에서 지역화된 문제를 해결하는 것 이상이 필요합니다. 여기에는 시스템의 중요한 사용자 및 시스템 흐름을 검토하고 자체 보존 기술과 복구 노력을 추가하는 작업이 포함됩니다. 이러한 방법은 수준 2에서 설명하는 완성도 높은 사례입니다.
✓ 기본 테스트 실행
소프트웨어 개발 수명 주기의 초기 단계에서 기본 안정성 테스트를 통합합니다. 기능 및 구성의 유효성을 검사하는 단위 테스트부터 시작하여 테스트를 수행할 기회를 찾습니다.
또한 위험 완화 플레이북에서 식별하는 문제에 대한 간단한 테스트 사례를 개발합니다. 더 높은 영향, 낮은 노력 완화에 집중합니다. 예를 들어 네트워크 중단 또는 일시적인 연결 문제를 시뮬레이션하여 재시도 논리가 중단을 해결하는 방법을 확인합니다.
위험: 테스트는 종종 개발 주기에 마찰을 발생합니다. 이러한 위험을 완화하려면 개발 작업과 함께 안정성 테스트를 추적할 수 있도록 합니다.
기능 개발이 우선 순위이며 테스트는 개발 주기에 마찰을 가져올 수 있습니다. 기능 개발이 완료되기 전에 테스트를 시작하는 것이 더 쉽습니다. 처음에 애플리케이션의 비기능적 측면을 디자인하면 나중에 해결할 문제의 백로그를 작성하는 대신 기능 기능을 추가할 때 확장할 수 있습니다. 이 방법은 처음에는 더 많은 노력이 필요하지만 관리가 가능하고 나중에 더 큰 문제를 방지합니다.
자체 보존 기능을 통합하고 오류를 관리하기 위한 기본 복구 계획을 수립하여 시스템이 기능적이고 안정적으로 유지되도록 합니다.
클라우드의 오류는 불가피합니다. 복원력 전략은 모든 조건에서 시스템 기능을 유지하기 위해 노력해야 합니다. 수준 1에는 일시적인 오류를 해결하는 메서드가 도입되었습니다. 수준 2는 오래 지속되는 오류를 방지, 감지 및 복구하기 위해 자체 보존 전략을 통합하는 데 중점을 둡니다. 해결되지 않은 상태로 두면 이러한 문제가 전체 중단으로 바뀔 수 있습니다.
수준 1에서 식별하는 중요한 흐름이 우선합니다. 애플리케이션, 서비스 및 데이터베이스를 비롯한 모든 구성 요소에 대한 복원력 및 복구 노력이 증가해야 합니다. 안정성 위험을 줄이기 위해 초기 프로비저닝 크기, 인스턴스 수 및 자동 크기 조정 정책을 조정해야 합니다.
이 수준에서는 모니터링 및 테스트 사례에 대해 의도적으로 설명합니다. 기술 요구 사항에 부합하고 개발 팀으로 범위가 지정된 고급 모니터링 기술을 사용합니다. 간단한 플레이북을 확장하여 애플리케이션 코드와 같이 개발 및 소유하는 아키텍처 구성 요소를 다룹니다.
주요 전략
✓ 오류로부터 보호하기 위해 복원력의 현재 상태를 평가합니다.
중복 수준이 오류를 견딜 수 있을 만큼 좋은가요? 유지 관리할 중복 리소스 수를 지정하는 중복 전략을 정의합니다. 로컬, 영역 간 또는 지리적으로 분산된 위치에 이러한 리소스를 배치할 위치를 결정합니다. 클라우드 플랫폼의 설정을 평가하고 비즈니스 요구 사항 및 허용 가능한 장단분에 맞는 수준을 선택합니다.
워크로드 구성 요소가 오류를 포함할 만큼 격리되어 있나요?
Bulkhead 패턴과 같은 패턴은 복원력 및 오류 격리를 구축하는 데 도움이 됩니다. Bulkhead 패턴은 시스템을 격리된 구성 요소( 벌크헤드라고 함)로 분할하여 오류가 시스템의 다른 부분으로 연속되지 않도록 방지합니다.
중요한 경로의 구성 요소가 비동기적으로 통신하나요? 그렇지 않은 경우 큐와 같은 통신 방법을 사용합니다. 이 방법은 다운스트림 구성 요소가 실패하더라도 시스템 작동을 유지합니다. 또한 시스템이 확정되지 않은 상태로 들어가지 못하게 합니다. 큐용 Azure Service Bus 및 이벤트 스트림용 Azure Event Hubs를 비롯한 Azure 옵션을 살펴봅니다.
트레이드오프: 비동기 통신은 프로세스를 분리하여 연쇄 오류를 방지하는 데 도움이 될 수 있습니다. 그러나 통신 경로에 대기 시간이 추가되므로 중요한 구성 요소에 문제가 발생할 수 있습니다. 디자인 패턴을 변경하기 전에 성능 영향을 평가합니다.
작업이 일관성을 위해 설계되어 있나요? 애플리케이션 비밀 및 인증서와 같은 자산은 만료되어 정기적으로 새로 고쳐야 할 수 있습니다. 일상적인 업데이트의 불일치로 인해 안정성 문제가 발생할 수 있습니다.
오류가 발생하기 쉽고 안정성 위험을 초래하는 불일치를 일으킬 수 있으므로 진행 중인 사람이 운영하는 작업을 식별하고 제거하는 것이 가장 좋습니다. 가능한 한 많은 운영 작업을 클라우드 공급자에게 오프로드합니다. 예를 들어 Microsoft Entra ID에서 제공하는 관리 ID와 Azure Front Door에서 관리하는 TLS(전송 계층 보안) 인증서를 사용합니다.
인증서 만료 추적 및 알림 수신과 같은 사전 조치를 위해서는 모니터링이 필요합니다. 애플리케이션은 만료가 가까워지는 TLS 인증서와 같은 중요한 이벤트를 기록해야 합니다. 여러 메서드를 사용하여 잠재적인 오류를 확인하면 필요한 작업이 수행되는지 확인할 수 있습니다.
✓ 모니터링 시스템에 기술 기능 추가
수준 1에서는 인프라에 중점을 두고 워크로드 구성 요소에서 모니터링 데이터를 수집했습니다. 기본 분석이 완료되고 기본 경고가 설정됩니다. 이 설정은 워크로드 구성 요소의 기준 성능을 이해하고 비정상적인 동작을 식별하는 데 필수적입니다.
수준 2는 워크로드 리소스에 고급 관찰 기능을 추가하고 모니터링 데이터를 분석하는 보다 구조화된 접근 방식을 채택하여 한 단계 더 모니터링합니다. 클라우드 서비스에서 제공하는 분석 도구를 활용합니다. 예를 들어 VM 인사이트 및 네트워크 인사이트와 같은 Azure Monitor 인사이트 도구는 종속성에서 상태 및 성능의 시각화를 제공합니다.
다음 계층에서 관찰 기능을 계획합니다.
신청
상태 확인에 응답합니다. 애플리케이션이 프로브의 상태 검사 요청에 응답하도록 설정합니다. 애플리케이션에는 최소한 정상 또는비정상 상태와 같은 상태 정보를 제공하는 상태 검사를 위한 전용 엔드포인트가 있어야 합니다. 이 방법을 사용하면 모니터링 시스템에서 애플리케이션이 제대로 작동하고 요청을 처리할 수 있는지 또는 해결해야 하는 문제가 있는지 평가할 수 있습니다.
Azure Front Door, Azure Traffic Manager, Azure Application Gateway 및 Azure Load Balancer와 같은 Azure 부하 분산 서비스는 상태 프로브를 지원합니다. 상태 프로브는 애플리케이션에 상태 검사 요청을 보냅니다.
의미 체계 로깅으로 전환합니다. 애플리케이션의 이벤트 및 작업에 대한 구조적 정보를 포함합니다. 구조적 로깅을 사용하면 로그 데이터가 잘 정의된 스키마를 사용하여 일관된 형식으로 기록됩니다. 이 스키마를 사용하면 이후 단계에서 자동화, 검색 및 분석을 더 쉽게 빌드할 수 있습니다. 문제를 신속하게 식별하고 해결하는 데 도움이 되는 타임스탬프 및 오류 코드와 같은 특정 필드를 포함합니다.
분산 추적을 구현합니다. 요청이 시스템의 여러 구성 요소를 통해 흐르는 경우 경계를 넘어 추적 데이터를 캡처하는 것이 중요합니다. 이 데이터는 애플리케이션 동작에 대한 인사이트를 얻고 성능 병목 상태, 오류 및 대기 시간 문제를 식별하는 데 유용합니다. Azure Monitor는 Application Insights를 사용하여 OpenTelemetry 기반 데이터 수집을 지원합니다.
데이터
쿼리 기간, 실패한 쿼리 및 기타 관련 메트릭을 추적합니다. 장기 실행 쿼리는 리소스 제약 조건과 스키마 디자인을 조정해야 할 수도 있음을 나타낼 수 있습니다.
이 단계에서는 데이터베이스가 일정 시간 동안 작동합니다. 특히 예기치 않게 빠르게 증가하는 테이블에서 데이터 증가율에 주의하세요. 이 정보는 향후 스토리지 요구 사항을 계획하고 성능 문제를 조기에 해결하는 데 중요합니다.
데이터베이스 관리 시스템에서 제공하는 도구 및 대시보드를 사용하여 데이터베이스 복제 상태를 모니터링합니다. 예를 들어 Azure Cosmos DB를 사용하는 경우 Azure Cosmos DB 인사이트를 사용합니다. Azure SQL Database 또는 Azure SQL Managed Instance의 경우 데이터베이스 감시자를 사용하여 데이터베이스에 대한 진단 세부 정보를 가져오는 것이 좋습니다.
데이터베이스가 증가함에 따라 스키마 문제가 더 명백해져서 성능에 영향을 줄 수 있습니다. 쿼리 효율성을 최적화하려면 이러한 변경 내용이 안정성에 영향을 줄 수 있으므로 인덱스를 추가하거나 스키마를 수정하는 것이 좋습니다.
운영
수준 1은 이전 계층에 중점을 둡니다. 수준 2에서는 모니터링 시스템을 중심으로 작업을 빌드하기 시작합니다.
인사이트를 얻을 수 있을 만큼 로그를 길게 유지합니다. 안정성 관점에서 오류 패턴을 감지하고 문제를 해결하고 근본 원인 분석을 수행할 수 있는 충분한 데이터를 수집할 수 있도록 보존 기간을 구성합니다.
백업 및 복구 프로세스를 모니터링합니다. 백업이 계획대로 위치에 성공적으로 저장되고 워크로드 데이터가 적절한 기간 내에 복구되는지 확인합니다. 이러한 프로세스를 모니터링하는 것은 이후 수준에서 RPO(복구 지점 목표) 메트릭에 대한 기준을 설정하는 데 중요합니다.
✓ 오류 완화 플레이북 확장
수준 1은 예상되는 플랫폼 오류에 중점을 둡니다. 수준 2에서는 사용자 고유의 워크로드 내의 구성 요소 및 작업에 대한 오류 지점을 해결합니다. 코드가 플랫폼에서 실행되면 플랫폼과 애플리케이션 간의 상호 작용 지점이 증가합니다. 코드의 버그, 실패한 배포 및 사용자 오류로 인한 오류를 예상합니다. 자체 보존 또는 복구 전술을 사용하여 이러한 문제를 완화합니다.
버그 및 배포 문제를 포함하도록 오류 완화 플레이북을 확장합니다. 다음 표는 수준 1의 템플릿을 기반으로 합니다.
| 문제 |
위험 |
출처 |
심각도 |
가능성 |
완화 방법 |
| 코드는 메시지 배달을 한 번 이상 처리하지 않습니다. |
버스에서 메시지를 중복 처리하면 데이터가 손상됩니다. |
신청 |
높음 |
가능성 높음 |
버스 분할을 활용하고, 프로세스에 멱등성을 구축하도록 다시 설계합니다.
- 경쟁 소비자 모델에서 벗어나 성능이 균형을 이루도록 합니다. |
| 일일 스토리지 백업 스크립트가 실행되지 않습니다. |
데이터가 24시간보다 오래되었기 때문에 RPO가 위반되었습니다. |
자동화된 프로세스 |
높음 |
가능성이 없음 |
백업 프로세스에 대한 경고를 설정합니다. |
| 새 릴리스 후 일반 사용자 및 사용량이 급증합니다. |
애플리케이션 성능이 저하되고 사용자 요청 시간이 초과됩니다. |
신청 |
높음 |
가능성이 없음 |
일정 기반 스케일 아웃 작업을 구성합니다. |
| 동시성 버그가 코드에 있습니다. |
예측할 수 없는 동작 및 가능한 데이터 손상. |
신청 |
높음 |
가능성 높음 |
안전한 형태의 동시성을 사용하고 동시성 컨트롤의 수동 처리를 방지합니다. |
| 배포 중에 예기치 않은 오류가 발생하면 환경이 일관되지 않은 상태로 남습니다. |
애플리케이션 중단. |
배포 파이프라인 |
미디엄 |
가능성 높음 |
청록색 배포, 카나리아 배포 또는 기타 접근 방식을 사용하여 변경 내용을 점진적으로 롤아웃합니다. |
가능한 모든 실패를 고려하려 하면 이 연습이 너무 벅찰 수 있습니다. 더 쉽게 만들려면 중요한 사용자 흐름의 일부인 구성 요소에 집중합니다. 이 살아있는 문서는 워크로드가 성숙함에 따라 계속 증가하고 있습니다.
✓ 기본 복구 계획 개발
오류 완화 플레이북은 기본 복구 계획을 만들기 위한 기초입니다. 완화 전략에는 코드 검토 중에 문제를 감지하는 디자인 패턴 구현, 플랫폼 구성 조정, 라이브 사이트 인시던트 관리, 자동화된 테스트 및 교육 담당자가 포함될 수 있습니다.
시스템의 일부가 제대로 작동하지 않을 때 임시 수정을 포함하는 정상적인 성능 저하 전략으로 시작합니다. 비작업 파트를 사용하지 않도록 설정하고 사용자 환경을 조정하여 실패에도 불구하고 사용자에게 계속 서비스를 제공하는 것이 목표입니다. 예를 들어 데이터베이스가 다운된 경우 애플리케이션은 영향을 받는 기능을 사용하지 않도록 설정하고 HTTP 상태 코드를 사용하여 서비스를 일시적으로 사용할 수 없음을 클라이언트에 알릴 수 있습니다.
우아한 성능 저하가 실현되려면, 시스템 구성 요소를 격리하여 영향을 받는 부분만 문제가 발생하게 하고, 나머지 구성 요소는 계속 작동하도록 합니다. Bulkhead 패턴을 사용하여 오류 격리를 구현합니다.
이 기회를 활용하여 복구가 느려질 수 있는 디자인 선택을 재검토합니다. 예를 들어 AZURE App Service의 애플리케이션에 직접 DNS(Domain Name System) 레코드를 가리키면 DNS 전파로 인해 복구 중에 지연이 발생할 수 있습니다. 복구 단계 중에 보다 쉽게 재구성할 수 있는 수신 지점으로 Azure Front Door와 같은 전용 서비스를 사용합니다.
이 기본 계획이 보다 성숙한 수준에서 전체 재해 복구 계획으로 발전할 것으로 기대합니다.
✓ 테스트 계획 만들기
위험 완화 플레이북에서 식별된 중단 및 문제를 시뮬레이션하여 테스트 계획을 만듭니다. 이러한 완화를 간단한 테스트 사례로 보완하여 예상대로 작동하고 실현 가능한지 확인합니다. 이러한 기능이 올바르게 작동하는지 확인하고 성능 저하 테스트를 수행하여 특정 구성 요소가 실패할 때 시스템이 어떻게 작동하는지 확인합니다. 테스트가 실패하거나 통과하도록 하여 결과를 단순하게 유지합니다.
모의 프레임워크와 같은 테스트 도구를 사용하여 HTTP 요청에 오류를 삽입하여 재시도 정책을 보다 명시적으로 테스트하는 데 도움이 됩니다. Azure Chaos Studio는 구성 요소 중단 및 기타 문제를 시뮬레이션하기 위한 포괄적인 테스트 제품군을 제공하므로 탐색할 수 있는 유용한 서비스입니다. 해당 기능에 익숙해지면 Chaos Studio를 점진적으로 채택할 수 있습니다.
✓ 크기 조정 작업이 안정성에 미치는 영향 평가
부하 급증을 처리하려면 중요한 구성 요소를 효율적으로 확장하거나 확장할 수 있어야 합니다. Azure에서 제공하는 자동 크기 조정 기능을 활용합니다. 이러한 기능은 미리 정의된 구성에 따라 서비스의 용량 제한을 조정합니다. 이 조정을 통해 필요에 따라 서비스를 확장 또는 축소할 수 있습니다.
잠재적인 병목 상태를 식별하고 발생할 수 있는 위험을 이해합니다. 예를 들어 처리량이 높으면 흐름이 중단되지 않아야 합니다.
부하 패턴을 이해합니다. 정적 사용 패턴은 병목 상태를 덜 중요하게 만들 수 있지만 사용량 및 소비 역학의 변경은 위험을 악화시킬 수 있습니다.
비고
모놀리식 데이터베이스 및 레거시 애플리케이션과 같이 확장할 수 없는 구성 요소가 있을 수 있습니다. 필요한 경우 다시 설계할 수 있도록 부하 곡선을 사전에 모니터링합니다.
성능 및 안정성 요구 사항에 따라 적절한 크기 조정 제한을 결정합니다. 성능 문제의 경우 점진적으로 스케일 업하는 것이 가장 일반적입니다. 그러나 중요한 흐름에 대한 안정성 문제에는 중단을 방지하기 위해 더 빠른 크기 조정이 필요할 수 있습니다. 두 경우 모두 무한 크기 조정을 피합니다.
위험: 성능 관련 문제를 처리할 때 크기 조정은 유용한 완화 전략이 될 수 있습니다. 그러나 크기 조정은 일시적인 수정이며 솔루션이 아닙니다. 메모리 누수 또는 런어웨이 프로세스와 같은 기본 문제를 조사하고 해결합니다. 그렇지 않으면 다른 팁 포인트에서 동일한 완화를 다시 적용하고 필요하지 않은 리소스에 대한 비용을 지불할 위험이 있습니다. 근본 원인을 해결하면 장기적인 안정성과 비용 효율성을 보장할 수 있습니다.
복구 절차에 대한 팀의 책임을 유지하기 위한 안정성 목표 및 목표를 설정합니다.
초기 수준에서 팀은 쉬운 승리와 기본 기능에 집중합니다. Azure 안정성 기능에 주로 의존하면서 강력한 기반을 구축하기 위한 간단한 문제를 해결하는 작은 개선 사항으로 시작합니다. 팀이 성장함에 따라 자체 자산 및 프로세스와 관련된 더 많은 기술적 과제를 처리합니다.
수준 3에서 팀은 복구 계획을 위해 비즈니스 인사이트 및 기술 기술을 통합해야 합니다. 고급 모니터링을 사용하여 목표를 설정하고 복구 프로세스를 계획합니다. 이 접근 방식을 사용하면 SRE(사이트 안정성 엔지니어)가 안정성 목표를 신속하게 충족할 수 있습니다.
주요 전략
안정성 목표는 워크로드 팀에 대한 책임을 설정하는 데 도움이 됩니다. 비즈니스 이해 관계자와 공동으로 대화하여 복구 시간과 비용을 논의하고 비즈니스 목표에 부합하는 타협안을 만드는 것이 중요합니다. 이해 관계자를 모아 워크샵으로 이 토론을 진행합니다. 워크샵 안건에 대한 다음 사항을 고려합니다.
목표 뒤에 있는 메트릭을 설명합니다. 먼저 서비스 수준 목표, RTO(복구 시간 목표) 및 RPO(복구 지점 목표)와 같은 목표를 정의하는 데 사용되는 주요 메트릭을 설명합니다. 이러한 메트릭이 비즈니스 목표와 어떻게 일치하는지 보여 줍니다. 중요한 사용자 흐름에 집중합니다. 예를 들어 전자 상거래 애플리케이션에서 전자 메일 기본 설정을 업데이트하기 위한 RTO는 쇼핑 카트를 체크 아웃하는 사용자보다 덜 중요합니다.
절충안을 전달합니다. 이해 관계자는 종종 달성 할 수있는 것보다 더 많은 것을 기대합니다. 범위 확장이 예산, 운영 요구 사항 및 성능에 미치는 영향을 설명합니다.
목표 목표를 제안합니다. 아키텍처 환경 및 워크로드 디자인에 따라 RPO 및 RTO가 4시간으로 설정된 99.9% 가동 시간과 같은 대상을 권장합니다. 이해 관계자가 피드백을 제공하고 조정을 할 수 있도록 토론을 용이하게 합니다. 비즈니스 및 기술 이해 관계자가 비현실적인 기대를 방지하도록 합니다. 공동 작업형 사고방식을 사용하여 토론에 접근합니다.
합의 또는 결정에 도달합니다. 합의를 목표로 하지만 가능하지 않은 경우 의사 결정자가 목표를 확정하여 진전을 보장하도록 합니다.
✓ 상태 모델을 사용하여 사전에 모니터링
수준 1에서 모니터링 데이터는 플랫폼 서비스 및 애플리케이션을 포함한 워크로드 구성 요소에서 수집됩니다. 기본 분석 및 경고는 기준 성능을 설정하고 변칙을 식별하도록 설정됩니다. 수준 2에서 포커스는 애플리케이션 코드와 같은 워크로드 구성 요소에서 관찰성 데이터를 가져오는 것으로 이동합니다.
수준 3은 중요한 흐름에 비즈니스 컨텍스트를 추가하고 상태 모델링을 통해 정상, 비정상 및 성능 저하 상태를 정의하여 모니터링을 향상시킵니다. 허용 가능한 사용자 경험 타협점을 결정하려면 이해관계자 동의가 필요하며, 상태 기준 정의에 대한 입력으로 사용해야 합니다.
상태 모델링에는 모니터링 도구에 대한 운영 완성도 및 전문 지식이 필요합니다. 팀은 원시 데이터, 성능 수준 및 로그를 검토하여 흐름의 상태를 정의하는 사용자 지정 메트릭 및 임계값을 만듭니다. 이러한 값이 시스템의 전반적인 상태와 어떻게 관련되는지 이해해야 합니다. 명확한 정의 및 임계값을 이해 관계자에게 전달합니다.
SRE가 비정상 또는 저하된 흐름에 집중하여 문제를 신속하게 파악할 수 있도록 대시보드에서 상태 모델을 시각화합니다.
상태 모델은 애플리케이션의 상태 및 중요 흐름을 정의합니다. 녹색은 모든 중요한 흐름이 예상대로 작동하고 있음을 나타냅니다. 빨간색은 실패를 나타냅니다. 그리고 노란색은 문제에 대한 추세를 보여줍니다. 상태 모델 버전을 반복하면 안정성과 정확도가 보장되지만 대규모 애플리케이션에 상당한 노력이 필요합니다.
상태 변경은 경고로 구성해야 합니다. 그러나 경고를 의도적으로 유지하려면 구성 요소의 중요도를 고려해야 합니다.
자세한 내용은 Well-Architected Framework: 상태 모델링을 참조하세요.
✓ 실행 가능한 경고 설정
응답 효율성을 향상하려면 경고를 명확하게 정의하고 빠른 작업을 위한 충분한 정보를 제공합니다. 자세한 경고 이름 및 설명은 문제 해결 중에 시간과 노력을 절약하는 데 도움이 될 수 있습니다. 심각도 수준에 특히 주의하여 심각도, 이름 및 설명을 신중하게 구성합니다. 모든 이벤트가 비상사태는 아닙니다. 심각도 수준을 신중하게 평가하고 각 수준에 대한 기준을 설정합니다(예: CPU가 80%에서 90%까지 급증하는 경우, 이를 응급 상황으로 판단할 수 있는지 여부). 경고가 효과적으로 정의되도록 적절한 임계값을 설정합니다.
효과적인 경고 관리를 통해 경고가 적절한 사용자에게 적시에 알릴 수 있습니다. 빈번하고 파괴적인 경고는 조정이 필요함을 나타내며 무시되면 비생산적일 수 있습니다. 잘못된 경보를 필터링하기 위해 적절한 임계값을 설정하여 불필요한 알림을 줄입니다. 자동화가 운영 절차를 트리거할 수 있는 기회를 식별합니다.
경고 문제를 효율적으로 해결하는 데 필요한 정보가 포함된 단일 방문 페이지를 만듭니다. 이 방법은 Azure Portal에 로그인하고 메트릭을 검색하는 것과 비교하여 시간을 절약합니다. Azure Monitor 기본 제공 기능이 요구 사항을 완전히 충족하지 못하는 경우 사용자 지정 대시보드를 개발하는 것이 좋습니다.
✓ 오류 모드 분석 수행
이전 수준에서는 개별 구성 요소에 대한 간단한 오류 완화 플레이북을 만들었습니다. 이 수준에서는 해당 플레이북을 FMA(공식 실패 모드 분석) 연습으로 발전합니다. 이 연습의 목적은 잠재적인 오류 모드를 사전에 식별하는 것입니다.
FMA를 사용하려면 워크로드 내에서 잠재적인 실패 지점을 식별하고 자체 복구 또는 DR(재해 복구)과 같은 완화 작업을 계획해야 합니다. 시작하려면 증가된 오류 비율을 모니터링하고 중요한 흐름에 미치는 영향을 검색합니다. 과거의 경험과 테스트 데이터를 사용하여 잠재적인 오류를 식별하고 폭발 반경을 평가합니다. 지역 전체 중단과 같은 주요 문제의 우선 순위를 지정합니다.
작업을 예방 또는 반응성으로 분류하는 것이 중요합니다. 예방 조치는 중단을 일으키기 전에 위험을 식별하여 가능성이나 심각도를 줄입니다. 사후 작업은 성능 저하 상태 또는 중단을 완화하기 위한 문제를 해결합니다.
전자 상거래 예제 애플리케이션에서 워크로드 팀은 FMA를 수행하여 주요 이벤트에 대비하려고 합니다. 주요 사용자 흐름 중 하나는 카트에 항목을 추가하는 것입니다. 흐름의 일부인 구성 요소는 프런트 엔드, CartAPI, ProductCatalogAPI, UserProfileAPI, PricingAPI, Azure Cosmos DB 및 Azure Event Hubs입니다.
| 문제 |
위험 |
잠재적인 원본 |
심각도 |
가능성 |
활동 |
| 수신된 주문 수는 시간당 100개 미만으로 떨어지며 사용자 세션 활동이 감소하지 않습니다. |
고객은 애플리케이션을 사용할 수 있더라도 주문을 할 수 없습니다. |
CartAPI, PaymentsAPI |
높음 |
가능성이 없음 |
사후 작업: - 상태 모델 또는 모니터링 데이터를 검토하여 문제를 식별합니다. - 애플리케이션을 테스트하여 해당 기능의 유효성을 검사합니다. - 구성 요소 중단이 발생하면 장애 조치(failover)를 수행하여 다른 인프라 집합으로 전환합니다.
예방 작업: - 가상 주문을 배치하여 흐름이 작동하는지 확인합니다. - 엔드 투 엔드 흐름이 모니터링되도록 관찰 가능성을 향상시킵니다. |
| Azure Cosmos DB에 주문을 저장할 때 예기치 않은 부하 증가로 인해 시간 초과가 발생합니다. |
고객이 주문을 할 수 있는 경우 주문을 하거나 불만족스러운 성능을 받을 수 없습니다. |
Azure Cosmos DB (애저 코스모스 DB) |
높음 |
가능성이 없음 |
사후 작업: - 애플리케이션 원격 분석을 기반으로 부하를 확인합니다. - Azure Cosmos DB 요청 단위를 일시적으로 확장합니다.
예방 작업: - 자동 크기 조정을 구성합니다. - 예상 부하를 다시 검토하고 크기 조정 규칙을 다시 계산합니다. - 일부 활동을 백그라운드 프로세스로 이동하여 이 흐름에서 데이터베이스 부하를 줄입니다. |
| 권장 사항 서비스는 완전히 오프라인 상태가 됩니다. |
권장 사항 서비스를 호출하는 예외로 인해 쇼핑 카트 페이지가 로드되지 않습니다. |
신청 |
미디엄 |
가능성이 없음 |
사후 작업: - 권장 사항 기능을 사용하지 않도록 설정하거나 쇼핑 카트 페이지에 하드 코딩된 권장 사항 데이터를 표시하는 정상적인 성능 저하 전략을 구현합니다. 서비스를 평가하는 동안 예외가 발생할 때 이 방법을 적용합니다. |
| 장바구니 페이지에서 가격 책정 API에 액세스할 때 부하가 많이 발생하는 경우 일시적인 시간 제한이 발생합니다. |
장바구니 페이지에는 카트 서비스에 액세스하지 못해 간헐적으로 오류가 발생합니다. |
신청 |
미디엄 |
가능성이 높음(부하가 많은 경우) |
사후 작업: - 캐시 만료 타임스탬프와 함께 쇼핑 카트 데이터 저장소에서 캐시 가격 책정 값을 구현합니다. - 가격 책정 데이터 캐시가 만료된 경우에만 가격 책정 API에 액세스합니다. |
FMA는 복잡하고 시간이 오래 걸릴 수 있으므로 시간이 지남에 따라 점진적으로 분석을 빌드합니다. 이 프로세스는 반복적이며 이후 단계에서 계속 진화합니다.
자세한 내용은 FMA를 수행하기 위한 RE:03 권장 사항을 참조하세요.
✓ DR 계획 준비
수준 2에서는 시스템 기능을 복원하는 기술 컨트롤에 초점을 맞춘 복구 계획을 만들었습니다. 그러나 재해는 치명적인 손실 또는 실패로 인해 더 광범위한 접근 방식이 필요합니다. DR 계획은 프로세스 기반입니다. 통신, 자세한 복구 단계를 다루며 스크립트와 같은 기술 아티팩트가 포함될 수 있습니다.
먼저 지역 중단, Azure 전체 오류, 인프라 중단, 데이터베이스 손상 및 랜섬웨어 공격과 같이 계획할 재해 유형을 식별합니다. 그런 다음, 각 시나리오에 대한 복구 전략을 개발하고 작업을 복원하기 위한 메커니즘이 마련되었는지 확인합니다. 비즈니스 요구 사항, RTO 및 RPO는 DR 계획을 안내해야 합니다. RTO 및 RPO가 낮을수록 명시적 자동화된 프로세스가 필요하지만, RTO 및 RPO가 높을수록 복구 방법과 수동 분석이 더 간단합니다.
DR에는 주로 다음 작업이 포함됩니다.
책임 있는 당사자에게 알립니다. 누가 언제 참여해야 하는가에 대한 명확성을 갖는 것이 중요합니다. 팀에서 올바른 프로세스를 사용하고, 올바른 권한을 가지며, 복구에서 해당 역할을 이해해야 합니다. CEO가 시장에 보고하거나 규제 요구 사항을 처리하는 것과 같은 일부 책임은 조기에 확인되어야 합니다.
이상적으로는 별도의 복구 및 통신 역할이 있어야 하며 각 역할에 다른 사람을 할당해야 합니다. 처음에는 문제를 발견한 IT 운영 담당자가 두 역할을 모두 처리할 수 있습니다. 그러나 상황이 악화됨에 따라 고위 직원은 기술 복구를 처리하고 비즈니스 담당자는 통신을 관리할 수 있습니다.
비즈니스 의사 결정을 내립니다. 재해 발생 시 스트레스 수준이 높을 수 있으므로 명확한 의사 결정이 필수적입니다. 잘 구성된 DR 계획을 사용하려면 기술 팀과 비즈니스 이해 관계자 간에 지속적인 논의를 통해 예비 의사 결정 옵션을 정의해야 합니다. 예를 들어 워크로드 리소스가 다른 지역의 백업을 사용하여 한 Azure 지역에서 실행되어야 하는지 또는 장애 조치(failover) 중에 새 리소스를 만들거나 백업에서 복원하기 위해 IaC 자산을 미리 준비해야 하는지 여부를 고려합니다.
DR 계획에 따라 수행된 작업은 파괴적이거나 상당한 부작용이 있을 수 있습니다. 옵션을 이해하고, 장단점을 측정하고, 적용할 적절한 시간을 결정하는 것이 중요합니다. 예를 들어 주 지역이 허용되는 시간 프레임 내에 작동해야 하는 경우 다른 지역에 대한 복구가 필요한지 여부를 평가합니다.
시스템 작업을 복원합니다. 재해가 발생하는 동안에는 원인을 식별하는 것이 아니라 작업을 복원하는 데 중점을 두어야 합니다. 기술 복구, 특히 지역 장애 조치(failover)의 경우 활성-활성, 활성-수동, 웜 대기 또는 콜드 대기와 같은 접근 방식을 미리 결정합니다.
선택한 접근 방식에 따라 특정 복구 단계를 준비합니다. 작업을 복원하는 단계의 구체적인 목록으로 시작합니다. 프로세스가 완성되면 DR 계획을 최소한의 수동 상호 작용으로 스크립트로 정의하는 것을 목표로 합니다. 쉽게 액세스할 수 있도록 버전 제어를 사용하고 스크립트를 안전하게 저장합니다. 이 방법은 더 많은 선행 노력이 필요하지만 실제 인시던트 중 스트레스를 최소화합니다.
자세한 내용은 DR에 대한 활성-수동 배포를 참조하세요.
인시던트 후 분석을 수행합니다. 인시던트 원인을 파악하고 나중에 이를 방지할 방법을 찾습니다. 복구 프로세스를 개선하기 위해 변경합니다. 이 연습에서는 새로운 전략을 발견할 수도 있습니다. 예를 들어 시스템이 보조 환경으로 전환된 경우 기본 환경이 여전히 필요한지 여부와 장애 복구 프로세스가 필요한지 확인합니다.
DR 계획은 워크로드의 변화에 맞게 조정되는 살아있는 문서입니다. 새 구성 요소 및 위험이 발생함에 따라 DR 계획을 업데이트합니다. DR 운영자로부터 현실적인 정보를 수집하여 훈련 또는 실제 재해에서 얻은 인사이트를 기반으로 계획을 세부적으로 조정합니다.
기술 및 운영 변경으로 인한 위험을 제어하고 인시던트 관리의 우선 순위를 지정합니다.
이전 수준에서 워크로드 팀은 기능을 빌드하고 시스템을 운영하는 데 중점을 둡니다. 수준 4에서는 프로덕션 환경에서 시스템을 안정적으로 유지하는 데 초점을 맞춥니다. 인시던트 관리는 시스템 불안정을 방지하기 위해 도입된 변경 내용을 철저히 테스트하고 안전하게 배포하는 것만큼이나 중요합니다.
이 프로세스를 수행하려면 안정성 인시던트 관리를 위해 전담 팀에 투자하는 등 운영 제어를 개선해야 합니다. 또한 이전 수준에서 강화된 중요한 구성 요소를 넘어 시스템 안정성을 향상시키기 위해 기술 제어가 필요합니다. 시스템이 프로덕션 환경에서 계속 실행됨에 따라, 데이터 증가로 인해 분할과 같은 재설계가 필요하여 안정적인 접근 및 유지 관리를 보장해야 할 수 있습니다.
주요 전략
✓ 신뢰할 수 있는 변경 관리
소프트웨어 업데이트, 구성 조정 또는 프로세스 수정과 같은 변경 중에 가장 큰 안정성 위험이 발생합니다. 이러한 이벤트는 안정성 관점에서 매우 중요합니다. 목표는 문제, 중단, 가동 중지 시간 또는 데이터 손실 가능성을 최소화하는 것입니다. 각 유형의 변경에는 고유한 위험을 효과적으로 관리하기 위한 특정 활동이 필요합니다.
수준 4에서 안정성은 변경 내용을 관리할 때 안정적인 환경을 유지하기 위해 운영 우수성에 설명된 안전한 배포 관행과 교차합니다. 신뢰할 수 있는 변경 관리는 워크로드 안정성을 달성하기 위한 요구 사항입니다. 다음 주요 측면을 고려합니다.
플랫폼 업데이트에 반응합니다. Azure 서비스에는 서비스를 업데이트하는 다양한 메커니즘이 있습니다.
유지 관리 프로세스를 숙지하고 사용하는 각 서비스의 정책을 업데이트합니다. 서비스가 자동 또는 수동 업그레이드를 지원하는지 여부와 수동 업데이트에 대한 시간 프레임을 이해합니다.
업데이트를 계획한 서비스의 경우 영향이 적은 시간에 예약하여 이러한 업데이트를 효과적으로 관리합니다. 자동 업데이트를 피하고 위험을 평가할 때까지 지연합니다. 일부 서비스를 사용하면 타이밍을 제어할 수 있지만 다른 서비스는 유예 기간을 제공합니다. 예를 들어 AKS(Azure Kubernetes Service)를 사용하면 업데이트가 자동으로 수행되기까지 90일 동안 옵트인할 수 있습니다. 회귀를 방지하기 위해 프로덕션 설정을 미러링하는 비프로덕션 클러스터에서 업데이트를 테스트합니다.
업데이트를 점진적으로 적용합니다. 테스트에 업데이트가 안전하다고 표시되더라도 모든 인스턴스에 동시에 적용하는 것은 위험할 수 있습니다. 대신 한 번에 몇 개의 인스턴스를 업데이트하고 각 집합 간에 기다립니다.
활동 로그 또는 기타 서비스별 채널에서 사용할 수 있는 업데이트에 대한 알림을 정기적으로 확인합니다.
업데이트가 적용된 후 갑자기 또는 점진적인 변경을 모니터링합니다. 이상적으로는 상태 모델이 이러한 변경 내용을 알려야 합니다.
자동화를 사용한 철저한 테스트. 변경 내용을 롤아웃할 때 빌드 및 배포 파이프라인에 더 많은 테스트를 통합합니다. 수동 프로세스를 파이프라인의 자동화된 부분으로 변환할 기회를 찾습니다.
다양한 단계에서 다양한 유형의 테스트를 조합하여 포괄적인 테스트를 수행하여 변경 내용이 예상대로 작동하고 애플리케이션의 다른 부분에 영향을 주지 않는지 확인합니다. 예를 들어 긍정 테스트는 시스템이 예상대로 작동하는지 확인할 수 있습니다. 오류가 없고 트래픽이 올바르게 흐르는지 확인해야 합니다.
업데이트를 계획할 때 테스트 게이트 및 적용할 테스트 유형을 식별합니다. 대부분의 테스트는 배포 전 단계에서 수행되어야 하지만 스모크 테스트는 업데이트할 때 각 환경에서도 수행해야 합니다.
안전한 배포 사례를 따릅니다. 유효성 검사 기간 및 안전한 배포 사례를 포함하는 배포 토폴로지 사용 카나리아 및 청록색 배포와 같은 안전한 배포 패턴을 구현하여 유연성과 안정성을 향상시킵니다.
예를 들어 카나리아 배포에서는 소수의 사용자 하위 집합이 먼저 새 버전을 받습니다. 이 프로세스를 통해 전체 사용자 기반에 배포하기 전에 모니터링 및 유효성 검사를 수행할 수 있습니다. 기능 플래그 및 다크 출시와 같은 기술은 모든 사용자에게 변경 내용을 릴리스하기 전에 프로덕션에서 테스트를 용이하게 합니다.
DR 계획을 업데이트합니다. DR 계획을 정기적으로 업데이트하여 관련성과 효율성을 유지합니다. 오래된 지침을 피하십시오. 이 방법을 사용하면 계획이 프로덕션에 배포되고 사용자가 의존하는 시스템의 현재 상태를 반영합니다. 훈련 및 실제 인시던트에서 배운 교훈을 통합합니다.
자세한 내용은 운영 우수성 수준 4를 참조하세요.
✓ 인시던트를 처리하기 위해 전담 팀에 투자
처음에는 인시던트 중에 개발 팀이 관련될 수 있습니다. 수준 4에서는 인시던트 관리를 위해 SRE(사이트 안정성 엔지니어링)에 투자합니다. SRE는 프로덕션 문제를 전문으로 하며 효율성, 변경 관리, 모니터링, 비상 대응 및 용량 관리 전문가입니다. 능숙한 SRE 팀은 엔지니어링 팀에 대한 종속성을 크게 줄일 수 있습니다.
인시던트 독립적으로 처리하는 데 필요한 도구, 정보 및 지식을 SRE에 제공합니다. 이 준비는 엔지니어링 팀에 대한 종속성을 줄입니다. 일반적인 패턴을 빠르게 인식하고 완화 프로세스를 시작하려면 이전 수준에서 개발된 플레이북 및 워크로드 상태 모델에서 SRE를 학습해야 합니다.
엔지니어링 팀은 매번 개별적으로 해결하는 대신 되풀이되는 문제를 숙고하고 장기 전략을 개발할 시간이 있어야 합니다.
✓ 자동 복구 프로세스 자동화
이전 수준에서 자체 복구 전략은 중복성 및 디자인 패턴을 사용하여 설계되었습니다. 이제 팀에서 실제 사용 경험이 있으므로 자동화를 통합하여 일반적인 실패 패턴을 완화하고 엔지니어링 팀에 대한 종속성을 줄일 수 있습니다.
균형: 자동화에는 시간이 걸리고 설정하는 데 비용이 많이 발생할 수 있습니다. 자주 발생하거나 중단이 발생할 가능성이 있는 작업과 같이 가장 영향력 있는 작업을 먼저 자동화하는 데 집중합니다.
트리거를 기반으로 작업을 구성하고 시간에 따른 응답을 자동화하여 SRE에 대한 자동화된 플레이북을 빌드합니다. 한 가지 방법은 완화 단계를 구현하는 스크립트를 사용하여 플레이북을 향상시키는 것입니다. Azure Monitor 작업 그룹 사용과 같은 Azure 네이티브 옵션을 탐색하여 다양한 작업을 자동으로 시작하는 트리거를 설정합니다.
✓ 백그라운드 작업에 탄력성 확장
대부분의 워크로드에는 사용자 흐름을 직접 지원하지 않지만 애플리케이션의 전체 워크플로에서 중요한 역할을 하는 구성 요소가 포함됩니다. 예를 들어 전자 상거래 시스템에서 사용자가 주문을 할 때 시스템은 큐에 메시지를 추가합니다. 이 작업은 이메일 확인, 신용 카드 요금 종료 및 디스패치 준비를 위한 웨어하우스 알림과 같은 여러 백그라운드 작업을 트리거합니다. 이러한 작업은 웹 사이트에서 사용자 요청을 제공하는 함수와 별도로 작동하여 부하를 줄이고 안정성을 향상시킵니다. 또한 시스템은 데이터 정리, 정기적인 유지 관리 및 백업을 위해 백그라운드 작업을 사용합니다.
기본 사용자 흐름을 평가하고 개선한 후 백그라운드 작업을 고려합니다. 이미 있는 기술 및 인프라를 사용하고 백그라운드 작업에 대한 향상된 기능을 추가합니다.
체크포인트를 적용합니다. 체크포인팅은 특정 지점에서 프로세스나 작업의 상태를 저장하는 기법입니다. 검사점은 네트워크 오류 또는 시스템 충돌과 같은 예기치 않은 문제로 인해 중단될 수 있는 장기 실행 작업 또는 프로세스에 특히 유용합니다. 프로세스가 다시 시작되면 마지막으로 저장된 검사점에서 선택할 수 있으므로 중단의 영향을 최소화할 수 있습니다.
프로세스를 동일 연산 반복에도 변하지 않도록 유지합니다. 백그라운드 프로세스에서 idempotency를 확인하여 작업이 실패하는 경우 다른 인스턴스가 작업을 선택하고 문제 없이 처리를 계속할 수 있도록 합니다.
일관성을 보장합니다. 처리 중에 백그라운드 작업이 중지되는 경우 시스템이 일관되지 않은 상태로 들어가지 않도록 합니다. 체크포인팅 및 작업 수준 idempotency는 백그라운드 작업에서 일관성을 높이기 위한 기술입니다. 각 작업을 원자성 트랜잭션으로 실행합니다. 여러 데이터 저장소 또는 서비스에 걸쳐 있는 작업의 경우, 작업 수준의 이드포턴시(idempotency) 또는 보상 트랜잭션을 사용하여 작업이 완료되도록 확인합니다.
백그라운드 작업을 모니터링 시스템 및 테스트 사례에 통합합니다. 오류를 검색하고 기능 및 비기능적 결과를 초래할 수 있는 눈에 띄지 않는 중단을 방지합니다. 모니터링 시스템은 이러한 구성 요소에서 데이터를 캡처하고, 중단에 대한 경고를 설정하고, 트리거를 사용하여 프로세스를 자동으로 다시 시도하거나 다시 시작해야 합니다. 이러한 자산을 워크로드의 일부로 처리하고 중요한 구성 요소에 대해 수행하는 것과 동일한 방식으로 자동화된 테스트를 수행합니다.
Azure는 Azure Functions 및 Azure App Service WebJobs와 같은 백그라운드 작업에 대한 여러 서비스 및 기능을 제공합니다. 안정성에 초점을 맞춘 흐름을 구현할 때 모범 사례 및 제한을 검토합니다.
워크로드 아키텍처가 발전함에 따라 복원력을 유지하므로 시스템에서 새롭고 예기치 않은 위험을 견딜 수 있습니다.
수준 5에서는 솔루션의 안정성을 개선하는 데 중점을 두고 기술 제어를 구현하지 않습니다. 인프라, 애플리케이션 및 운영은 중단에 대한 복원력과 대상 복구 시간 내에 복구할 수 있을 만큼 안정적이어야 합니다.
데이터 및 향후 비즈니스 목표를 사용하여 비즈니스를 더 발전시켜야 하는 경우 아키텍처 변경이 필요할 수 있음을 인정합니다. 워크로드가 진화하고 새로운 기능이 추가됨에 따라 해당 기능과 관련된 중단을 최소화하는 동시에 기존 기능에 대한 중단을 더욱 줄이기 위해 노력합니다.
주요 전략
✓ 안정성 인사이트를 사용하여 아키텍처 발전 안내
이 수준에서 비즈니스 이해 관계자와 공동으로 결정을 내립니다. 다음 사항을 고려합니다.
시스템이 일정 기간 내에 안정성 임계값을 초과하는 횟수와 허용되는지 여부를 나타내는 메트릭을 분석합니다. 예를 들어 1년 동안 5개의 주요 중단이 발생하면 시스템 설계 및 운영 관행에 대한 재평가가 트리거될 수 있습니다.
시스템의 비즈니스 중요도를 평가합니다. 예를 들어, 중요 업무용 워크플로를 지원하는 서비스는 비용이나 복잡성이 증가하더라도 중단 없는 배포와 즉시 장애 조치를 위해 다시 설계해야 할 수 있습니다. 반대로, 사용 감소 서비스는 보다 완화된 서비스 수준 목표의 이점을 얻을 수 있습니다.
다른 핵심 요소의 변경 내용이 안정성에 미치는 영향을 평가합니다. 예를 들어 보안 조치가 강화되면 추가 보안 홉에 대한 안정성 완화가 필요할 수 있으며 이로 인해 잠재적인 실패 지점이 발생할 수 있습니다.
안정성 유지 관리의 운영 비용을 평가합니다. 이러한 비용이 예산 제약 조건을 초과하는 경우 아키텍처 변경을 고려하여 지출을 최적화하고 제어합니다.
이해 관계자, 엔지니어 및 제품 관리자가 정보에 입각한 의사 결정을 내릴 수 있도록 추가 인사이트와 함께 이전 데이터 요소를 시각화하는 것이 좋습니다. 이 방법은 안정성에 대한 완전한 그림을 제공합니다.
✓ 프로덕션에서 제어된 테스트 실행
이 수준에서는 워크로드에 가장 높은 복원력 보장이 필요한 경우에만 프로덕션 환경에서 제어된 실험을 고려합니다. 이러한 테스트 사례를 카오스 엔지니어링이라고 합니다. 테스트는 시스템이 정상적으로 복구되고 불리한 조건에서 계속 작동할 수 있음을 확인합니다.
다음 예제 사용 사례를 고려합니다.
종속성 흐름 분석: 일반적인 사용 사례는 마이크로 서비스로 설계된 애플리케이션을 테스트하는 것입니다. 무작위 마이크로서비스 인스턴스를 꺼서 오류가 더 이상 사용자 경험을 방해하거나 연속적으로 발생하지 않도록 할 수 있습니다. 특정 구성 요소를 사용하지 않도록 설정하여 다운스트림 시스템이 반응하는 방식을 분석하여 시스템 흐름에 대한 이 접근 방식을 확장할 수 있습니다. 목표는 긴밀한 결합 또는 숨겨진 종속성을 식별하고 시스템 중복 계획 수행 방법을 테스트하는 것입니다.
점진적 기능 저하 테스트: 시스템이 오류가 발생할 때 어떻게 기능을 줄이고 실행되는지를 평가합니다. 예를 들어 권장 사항 엔진이 실패하는 경우 중요하지 않은 기능을 숨길 수 있습니다.
타사 오류 시뮬레이션: 외부 API에 대한 호출을 사용하지 않도록 설정하거나 제한하여 시스템이 작동하는 방식과 대체 또는 재시도가 올바르게 구현되었는지 확인합니다.
카오스 엔지니어링은 복원력을 테스트하기 위한 금본위제입니다. 그러나 성숙한 시스템 및 워크로드 팀에 이 관행을 권장합니다. 폭발 반경을 제한하고 사용자 영향을 방지하기 위해 보호 장치가 마련되어 있는지 확인합니다.
게임 이벤트를 실행하여 준비합니다. 가상 트랜잭션과 함께 위험 수준이 낮은 설정을 사용하여 실제 조건을 시뮬레이션하는 비프로덕션 환경에서 시작합니다. 이 방법은 프로세스 간격, 사용자 오류 경로 및 아키텍처 결함을 식별하는 데 도움이 됩니다.
비프로덕션 테스트가 중요한 인사이트 생성을 중지하는 경우 확신이 있다면 프로덕션으로 전환해야 할 때입니다. 전환하기 전에 모든 문제를 나열하고, 복원력을 평가하고, 문제를 해결해야 합니다.
실험 범위를 제한합니다. 예를 들어 하나의 인스턴스만 종료할 수 있습니다. 테스트의 용도를 명확하게 정의합니다. 테스트하는 내용과 그 이유를 이해합니다.
이러한 테스트는 미리 정의된 제한 및 오류 예산 내에서 작동하여 서비스 수준 계약을 준수해야 합니다. 이러한 실험에 적합한 기간을 선택합니다. 일반적으로 작업 시간 동안 수행하면 팀이 완전히 인력을 확보하고 발생할 수 있는 모든 인시던트에 대응할 수 있는 충분한 리소스를 확보할 수 있습니다.
✓ 재해 복구 훈련 수행
Chaos 엔지니어링은 기술 컨트롤의 복원력을 테스트합니다. DR(재해 복구) 드릴은 프로세스 제어의 복원력을 평가합니다. DR 훈련의 목표는 시스템이 주요 오류 또는 재해로부터 복구할 때 절차, 조정 및 인적 작업의 효율성을 확인하는 것입니다.
규정 워크로드의 경우 규정 준수 요구 사항은 노력 기록을 보장하기 위해 DR 훈련의 빈도를 결정할 수 있습니다. 다른 워크로드의 경우 이러한 훈련을 정기적으로 수행하는 것이 좋습니다. 6개월 간격은 워크로드 변경 내용을 캡처하고 그에 따라 DR 프로시저를 업데이트할 수 있는 좋은 기회를 제공합니다.
DR 훈련은 일상적인 연습 이상이어야 합니다. 제대로 수행되면 DR 훈련은 새로운 팀 구성원을 교육하고 도구, 통신 및 기타 드릴 관련 작업의 격차를 식별하는 데 도움이 됩니다. 또한 간과될 수 있는 새로운 관점을 강조 표시할 수도 있습니다.
각각 위험 및 실용성이 다양한 DR 훈련을 수행하기 위한 다음 주요 방법을 고려합니다.
완전히 시뮬레이션된: 이러한 연습은 완전히 화이트보드 기반이며 시스템에 영향을 주지 않고 절차 연습을 포함합니다. 학습 및 초기 유효성 검사에 적합합니다. 그러나 실제 인시던트에 대한 인사이트를 제공하지는 않습니다.
비프로덕션 환경에서의 실제 훈련: 이러한 훈련을 통해 비즈니스 위험 없이 자동화, 스크립트 및 프로세스의 유효성을 검사할 수 있습니다.
프로덕션의 실제 연습: 이러한 훈련은 가장 높은 수준의 신뢰와 현실감을 제공합니다. 이전 두 가지 방법을 테스트한 후에만 이러한 훈련을 수행합니다. 위험을 최소화하려면 철저한 계획 및 롤백 전략이 필수적입니다. 중단을 일으킬 가능성이 있는 경우 진행하지 마세요.
DR 드릴 유형에 관계없이 워크로드 복구 시나리오를 명확하게 정의합니다. 실제 인시던트인 것처럼 훈련을 수행합니다. 이 방법을 사용하면 팀이 잘 이해된 검사 목록을 따를 수 있습니다. 결과를 문서화하고 분류하여 지속적인 개선을 추진합니다. DR 준비에는 다음 프로세스가 포함될 수 있습니다.
인시던트 관리 시스템을 이해하고 팀이 에스컬레이션 경로에 대해 학습되었는지 확인합니다.
기본 시스템이 영향을 받는 경우의 대안을 포함하여 공동 작업 및 상태 업데이트에 대한 통신 도구를 나열합니다.
워크로드에 대한 관련 테스트 시나리오에 대한 기술 자료를 제공합니다.
불일치를 추적하여 구현 중에 발생한 문제를 캡처합니다.
상충점: 이러한 훈련은 일반적으로 중단되지는 않지만 시간이 소요됩니다. 효율성을 최대화하려면 주요 측면에 집중하고 불필요한 작업을 방지합니다. 백로그에서 이 연습에 시간을 꼭 할당하세요.
DR 계획을 만들거나 DR 훈련을 수행할 때, 특히 처음 몇 번의 훈련을 위해 전문화된 전문 지식을 포함하는 것이 좋습니다. 다중 지역 디자인, 장애 조치(failover) 및 장애 복구(failback) 전략, 서비스 또는 도구에 대한 입력은 매우 중요할 수 있습니다. 조직에 Cloud Center of Excellence 팀이 있는 경우 계획 프로세스에 포함해야 합니다.
✓ 필요한 경우 데이터 모델 및 세그먼트 평가
데이터는 동적이며 지속적으로 진화하고 있습니다. 아키텍처의 다른 구성 요소와 달리 일반적으로 사용자가 시스템과 상호 작용할 때 데이터가 증가합니다. 시간이 지남에 따라 데이터 패턴을 모니터링하고 아키텍처의 다른 부분에 미치는 영향을 평가하는 것이 중요합니다. 이 수준에서는 데이터 관리를 간소화하고 성능을 향상시켜 전반적인 안정성을 향상시키는 기술을 고려합니다. 분할은 이러한 결과를 달성하기 위한 핵심 전략입니다.
액세스 패턴에 따라 데이터를 나누고 별도로 저장하는 핫 콜드 분할과 같은 기술을 살펴봅니다. 액세스 빈도 또는 관련성과 같은 조건을 사용하여 분할할 내용을 결정합니다.
핫 콜드 분할은 샤딩과 결합될 수 있습니다. 샤딩은 큰 데이터베이스를 샤드라는 더 작은 단위로 나누는 과정입니다. 각 분할된 데이터베이스는 데이터의 일부를 보유하며 함께 전체 데이터 세트를 구성합니다. 이 방법을 사용하면 독립적인 데이터 관리를 사용할 수 있습니다.
절충: 샤드 균형 조절을 위해서는 운영 프로세스가 필요하며, 이는 배포를 평가하고 확인해야 합니다. 이 방법은 하나의 파티션이 과도하게 사용되는 핫 파티션을 방지하는 데 도움이 됩니다. 그러나 균형을 유지하기 위해 지속적인 노력과 리소스가 필요합니다.
분할 기술을 선택하는 경우 다음과 같은 안정성 이점을 고려합니다.
향상된 성능: 요청을 여러 파티션에 분산하면 개별 저장소의 부하를 줄일 수 있습니다. 효과적으로 구현되는 경우 분할을 사용하면 시스템에서 하루에 수백만 개의 쓰기 요청을 처리할 수 있습니다. 이 전략은 성능을 향상시키고 대기 시간을 최소화합니다.
분할은 수평적 크기 조정을 간소화할 수 있습니다. 예를 들어 분할은 사용자 또는 고객을 대략 같은 크기의 버킷으로 나눌 수 있습니다.
향상된 데이터 관리: 핫 콜드 분할을 사용하면 각 스토리지 계층에 다양한 수준의 데이터 관리를 적용할 수 있습니다. 예를 들어 보관 데이터를 별도의 저장소로 이동하면 작업 및 백업의 속도 저하를 방지할 수 있습니다. 마찬가지로 모든 로그 데이터를 관계형 데이터베이스에 저장해야 하는 것은 아닙니다. 활성 워크로드 데이터가 관계형으로 유지되는 동안 다른 데이터 저장소에 저장할 수 있습니다.
맞춤형 안정성 정책: 각 파티션이 적절한 수준의 복원력을 가지며 단일 저장소가 병목 상태가 되지 않도록 하기 위해 다양한 안정성 정책을 적용할 수 있습니다. 핫 파티션은 영역 중복 및 지역 중복을 포함하여 완전히 중복될 수 있지만 콜드 파티션은 백업을 사용합니다. 안정성이 추가된 이점은 일부 오류 유형의 폭발 반경을 줄일 수 있다는 것입니다. 예를 들어 오류가 한 분할된 데이터베이스에 영향을 주면 다른 분할된 데이터베이스에는 영향을 미치지 않을 수 있습니다.
트레이드오프: 서로 다른 데이터 파티션 간의 강력한 상호 종속성 때문에 파티션을 유지하거나 수정하기 어려울 수 있습니다. 이러한 변경 내용은 특히 단일 데이터 저장소와 비교할 때 데이터 일관성 및 무결성을 확인하는 기능에 영향을 줄 수 있습니다. 파티션 수가 증가함에 따라 데이터 무결성을 유지하기 위한 강력한 프로세스의 필요성이 더욱 중요해집니다. 이러한 측정값이 없으면 안정성이 손상될 수 있습니다.