규모 확장을 위한 디자인
수평적으로 애플리케이션 크기가 조정될 수 있도록 애플리케이션 디자인
클라우드의 주요 장점은 탄력적인 크기 조정으로, 필요한 만큼 용량을 사용하고 부하 증가에 따라 확장하고 추가 용량이 필요하지 않을 때 축소할 수 있다는 것입니다. 수요에 맞게 인스턴스를 추가하거나 제거하여 규모 확장이 가능하도록 애플리케이션을 디자인합니다.
확장성은 리소스 증가에 대한 처리량 증가의 비율로 측정됩니다. 이상적으로 잘 디자인된 시스템에서는 두 숫자가 모두 비례합니다. 두 배의 리소스 할당은 처리량이 두 배로 증가합니다. 확장성은 일반적으로 시스템 내에서 병목 상태 또는 동기화 지점이 도입되어 제한됩니다.
권장 사항
인스턴스 연결 유지 방지. 연결 유지 또는 세션 선호도는 동일한 클라이언트의 요청이 항상 동일한 서버로 라우트되는 경우입니다. 연결 유지는 애플리케이션의 스케일 아웃 기능을 제한합니다. 예를 들어 대용량 사용자의 트래픽은 인스턴스 간에 분산되지 않습니다. 연결 유지의 원인에는 메모리에 세션 상태 저장, 암호화에 컴퓨터 특정 키 사용 등이 포함됩니다. 모든 인스턴스가 요청을 처리할 수 있도록 합니다.
병목 상태를 확인합니다. 확장을 통해 모든 성능 문제를 해결할 수 있는 것은 아닙니다. 예를 들어 백 엔드 데이터베이스가 병목 상태인 경우 웹 서버를 더 추가해도 도움이 되지 않습니다. 문제 지점에 인스턴스를 더 추가하기 전에 시스템의 병목 상태를 먼저 식별하고 해결하세요. 일반적으로 시스템의 상태 저장 부분이 병목 상태의 주요 원인입니다.
확장성 요구 사항별로 워크로드 분해. 애플리케이션은 종종 크기 조정 요구 사항이 각기 다른 여러 워크로드로 구성되어 있습니다. 예를 들어 애플리케이션에 공용 사이트와 별도의 관리 사이트가 있을 수 있습니다. 공용 사이트의 트래픽은 갑자기 급증할 수 있는 반면 관리 사이트의 부하는 더 적고 예측 가능합니다.
비동기 통신 프로토콜로 통신하는 자율적이고 분리된 구성 요소를 설계합니다. 원칙적으로는 구성 요소에 고유한 독립 상태가 있어야 하며, 이벤트를 사용하여 변경 또는 활동을 외부 구성 요소로 전달해야 합니다. 이렇게 하면 오버로드된 구성 요소의 크기만 별도로 조정할 수 있습니다. 트래픽을 관리하고 우아하게 성능을 저하시키는 흐름 제어 메커니즘을 구현합니다. 소비자는 자체 사용량을 제어해야 합니다. 생산자는 중단을 포함해 자체 전송 속도를 제어해야 합니다. 메시지 큐는 추가 워크로드를 흡수하고, 소비자가 이를 통해 여가 시간에 작업을 드레이닝할 수 있는 좋은 옵션입니다.
불필요한 의사 전달, 조정 및 대기를 방지합니다.
자연스럽게 비동기 작업을 오프로드합니다. 이메일 보내기, 사용자에게 즉각적인 응답이 필요하지 않은 작업, 다른 시스템과의 통합과 같은 작업은 모두 비동기 메시징 패턴을 사용하기에 좋은 장소입니다.
리소스를 많이 사용하는 태스크 오프로드. 사용자 요청을 처리하는 프런트 엔드의 부하를 최소화하기 위해 가능한 경우 많은 CPU 또는 I/O 리소스가 필요한 태스크를 백그라운드 작업으로 이동해야 합니다.
라이브 사용량 메트릭에 따라 자동으로 크기를 조정하고 기본 제공 자동 크기 조정 기능을 사용합니다. 기본적으로 자동 크기 조정을 지원하는 Azure 컴퓨팅 서비스가 많습니다. 애플리케이션의 워크로드가 예측 가능하고 정기적인 경우 일정에 따라 확장합니다. 예를 들어 업무 시간 중에 확장합니다. 워크로드가 예측 불가능한 경우 CPU 또는 요청 큐 길이와 같은 성능 지표를 사용하여 자동 크기 조정을 트리거합니다. 애플리케이션 및 그 통신을 관찰하여 병목을 파악하고 보다 정확한 의사 결정을 도출합니다. 자동 크기 조정 모범 사례는 자동 크기 조정을 참조하세요.
중요 워크로드에 대해 적극적인 자동 크기 조정 고려. 중요 워크로드의 경우 수요를 미리 예측하려고 합니다. 부하가 높은 경우 새 인스턴스를 빠르게 추가하여 추가 트래픽을 처리한 다음 점차 다시 축소하는 것이 좋습니다.
규모 감축 디자인. 탄력적 크기 조정을 사용하는 경우 인스턴스가 제거되면 애플리케이션의 크기가 축소됩니다. 애플리케이션이 제거되는 인스턴스를 정상적으로 처리해야 합니다. 다음은 규모 감축을 처리하는 몇 가지 방법입니다.
- 종료 이벤트(사용 가능한 경우)를 수신 대기하고 정상적으로 종료합니다.
- 서비스의 클라이언트/소비자가 일시적인 결함 처리 및 다시 시도를 지원해야 합니다.
- 장기 실행 태스크의 경우 검사점 또는 파이프 및 필터 패턴을 사용하여 작업을 분할하는 것이 좋습니다.
- 처리 중에 인스턴스가 제거될 경우 다른 인스턴스가 작업을 선택할 수 있도록 큐에 작업 항목을 배치합니다.
중복성을 위한 크기 조정을 고려합니다. 스케일 아웃으로 애플리케이션의 안정성을 향상시킬 수 있습니다. 예를 들어, 영역 중복 서비스 사용과 같이 여러 가용성 영역에서 스케일 아웃하는 것이 좋습니다. 이 방식은 애플리케이션의 처리량을 향상시킬 뿐만 아니라 한 영역에서 중단이 발생하는 경우 회복 탄력성을 줄 수 있습니다.
시스템의 확장성을 모델링하고 최적화합니다. 암달의 법칙과 같은 접근 방식을 사용하여 시스템 모델을 사용할 수 있습니다. 경합 및 일관성과 같은 매개 변수를 기반으로 확장성을 정량화합니다. 경합은 공유 리소스에 대한 대기 또는 큐 대기로 인한 지연을 나타냅니다. 일관성은 데이터가 일관되기 위해 지연되는 것을 의미합니다. 예를 들어 경합이 높으면 병렬 처리될 수 있는 순차적 처리를 나타내고, 일관성이 높으면 프로세스 간에 과도한 종속성이 제안되므로 상호 작용을 최소화할 수 있습니다. 워크로드를 디자인하는 동안 시스템의 최대 유효 용량을 계산하여 수요보다 많은 공급을 제공하여 낭비를 유발하는 것을 방지할 수 있습니다.