Azure SignalR Service 안정성

Azure SignalR Service 웹 및 모바일 애플리케이션에서 실시간 양방향 통신을 가능하게 하는 완전 관리형 서비스입니다. 기본 전송 메커니즘을 추상화합니다. WebSocket을 사용할 수 있는 경우 서비스에서 사용합니다. 그렇지 않으면 Server-Sent Events 또는 긴 폴링으로 전환됩니다. 이 추상화는 클라이언트 및 서버 코드가 특정 전송 프로토콜에 연결되지 않고 실시간으로 통신할 수 있음을 의미합니다.

Azure를 사용하는 경우 안정성은 공유 책임입니다. Microsoft는 복원력 및 복구를 지원하는 다양한 기능을 제공합니다. 이러한 기능이 사용하는 모든 서비스 내에서 작동하는 방식을 이해하고 비즈니스 목표 및 가동 시간 목표를 충족하는 데 필요한 기능을 선택할 책임이 있습니다.

이 문서에서는 일시적인 오류, 가용성 영역 중단, 지역 중단 및 서비스 유지 관리를 포함하여 다양한 잠재적 중단 및 문제에 Azure SignalR Service 복원력을 제공하는 방법을 설명합니다. 또한 Azure SignalR Service SLA(서비스 수준 계약)에 대한 주요 정보도 강조 표시합니다.

안정성을 위한 프로덕션 배포 권장 사항

프로덕션 워크로드의 경우 다음을 수행하는 것이 좋습니다.

  • 프리미엄 계층을 사용합니다. 프리미엄 계층은 지원되는 지역의 가용성 영역 오류에 복원력이 있으며 지역 복제를 구성할 수 있습니다.
  • 연결이 끊어질 때 자동으로 안전하게 다시 연결되도록 클라이언트 애플리케이션 및 앱 서버를 디자인합니다. 영역 페일오버, 지역 페일오버 및 일시적인 오류는 모두 활성 연결을 끊습니다.
  • 지역 복제를 사용하도록 설정하여 지역 전체의 오류로부터 보호합니다. 장애 조치(failover) 이벤트 중에 예상되는 전체 트래픽 부하를 처리하기에 충분한 단위로 각 복제본의 크기를 조정합니다.

안정성 아키텍처 개요

이 섹션에서는 안정성 관점에서 가장 관련성이 높은 서비스가 작동하는 방식의 몇 가지 중요한 측면을 설명합니다. 이 섹션에서는 배포하고 사용하는 일부 리소스 및 기능을 포함하는 논리 아키텍처를 소개합니다. 또한 서비스의 작동 방식에 대한 세부 정보를 제공하는 물리적 아키텍처에 대해서도 설명합니다.

논리 아키텍처

만드는 리소스는 SignalR Service 리소스입니다. 최대 동시 연결 수를 포함하여 리소스의 용량을 나타내는 여러 단위로 리소스를 구성합니다. 자세한 내용은 Azure SignalR Service 참조하세요.

Azure SignalR Service 두 개의 서비스 모드 지원합니다. 기본 모드에서 앱 서버는 Azure SignalR Service 리소스에 연결하고 허브 논리를 포함합니다. 서버리스 모드에서는 서비스가 Azure Functions 통합되고 Functions는 이벤트 기반 메시지 처리기 역할을 하므로 앱 서버를 직접 관리하지 않습니다. 자세한 내용은 Azure SignalR Service의 서비스 모드를 참조하세요.

SignalR Service 리소스에는 contoso.service.signalr.net 유사한 전역적으로 고유한 엔드포인트가 있습니다. 클라이언트는 이 엔드포인트에 대한 연결을 설정합니다. 애플리케이션 서버는 동일한 엔드포인트에 연결하여 메시지를 보내고 클라이언트에서 이벤트를 받습니다.

물리적 아키텍처

Azure SignalR Service 컴퓨팅 리소스 집합에서 연결 상태 및 메시지 라우팅을 관리합니다. Microsoft 기본 인프라를 관리합니다. 서비스에서 사용하는 개별 VM 또는 기타 인프라 구성 요소는 직접 보거나 상호 작용하지 않습니다.

일시적인 오류에 대한 복원력

일시적인 오류는 구성 요소에서 짧고 간헐적인 오류입니다. 클라우드와 같은 분산 환경에서 자주 발생하며 작업의 일반적인 부분입니다. 일시적인 오류는 짧은 시간 후에 스스로 수정됩니다. 애플리케이션은 일반적으로 영향을 받는 요청을 다시 시도하여 일시적인 오류를 처리할 수 있는 것이 중요합니다.

모든 클라우드 호스팅 애플리케이션은 클라우드 호스팅 API, 데이터베이스 및 기타 구성 요소와 통신할 때 Azure 임시 오류 처리 지침을 따라야 합니다. 자세한 내용은 임시 오류 처리를 위한 권장 사항을 참조하세요.

Azure SignalR Service 클라이언트, 앱 서버 및 서비스 간에 수명이 긴 연결을 사용합니다. 네트워크 불안정성, 부하 분산 장치 재구성 또는 브라우저 탭 일시 중단과 같은 일시적인 오류로 인해 이러한 연결을 삭제할 수 있습니다. 연결 끊기를 처리하고 자동으로 다시 연결하도록 클라이언트 애플리케이션 및 앱 서버를 디자인합니다.

Azure SignalR Service SDK에는 서버 연결에 대한 서비스의 기본 제공 재연결 처리가 포함되어 있습니다. 클라이언트 쪽 다시 연결은 사용하는 클라이언트 라이브러리에 따라 달라집니다. ASP.NET Core SignalR 클라이언트는 상태 저장 다시 연결을 지원하므로 클라이언트가 동일한 연결 ID를 사용하여 신속하게 다시 연결하는 경우 상태를 잃지 않고 이전 연결을 다시 시작할 수 있습니다. 예를 들어 다시 연결로 인해 새 연결 ID가 발생하는 경우(예: 더 긴 중단 후) 서비스는 클라이언트를 새 연결로 처리합니다. 이 경우 클라이언트는 이전에 있던 모든 그룹에 다시 가입하고 세션 상태를 복원해야 합니다.

클라이언트 연결 끊김 및 다시 연결을 처리하도록 애플리케이션을 디자인하는 방법에 대한 자세한 지침은 Azure SignalR Service 참조하세요.

가용성 영역 오류에 대한 복원력

가용성 영역은 Azure 지역 내에서 물리적으로 별도의 데이터 센터 그룹입니다. 한 영역이 실패하면 서비스가 나머지 영역 중 하나로 전환될 수 있습니다.

Azure SignalR Service 프리미엄 계층에서 영역 중복 배포를 지원합니다. 가용성 영역을 지원하는 지역에서 프리미엄 계층 리소스를 만들거나 업그레이드하는 경우 Azure SignalR Service 해당 컴퓨팅 용량을 해당 지역의 모든 가용성 영역에 자동으로 분산합니다. 가용성 영역이 실패하면 Azure SignalR Service 나머지 정상 영역의 인스턴스로 새 연결을 라우팅합니다.

 여러 가용성 영역에 분산된 영역 중복 Azure SignalR 서비스를 보여 주는 다이어그램입니다.

요구 사항

  • 지역 지원: 영역 중복성은 다음 두 조건이 모두 적용되는 대부분의 지역에서 지원됩니다.

    • Azure SignalR Service 사용할 수 있습니다. 서비스를 사용할 수 있는 지역 목록은 지역별 제품 가용성을 참조하세요.
    • 이 지역은 가용성 영역을 지원합니다. 가용성 영역이 있는 지역 목록은 Azure 지역 목록 참조하세요.

    그러나 일본 서부는 현재 Azure SignalR Service 영역 중복을 지원하지 않습니다.

  • 계층: 영역 중복성은 프리미엄 계층에서 사용할 수 있습니다.

Cost

영역 중복은 비용을 추가하지 않으며 표준 프리미엄 계층 요금을 지불합니다. 자세한 내용은 Azure SignalR Service 가격 책정 참조하세요.

가용성 영역 지원 구성

영역 중복은 프리미엄 계층을 선택하는 것 외에는 구성이 필요하지 않습니다. 이 두 경우 모두 자동으로 사용하도록 설정됩니다.

  • 새로운 영역 중복 방지 SignalR 서비스 리소스를 만듭니다. 리소스를 만들 때 프리미엄 계층 SKU를 선택합니다. 자세한 내용은 Quickstart: SignalR Service 사용하여 채팅방 만들기와 같은 빠른 시작을 참조하세요.

  • 기존 리소스를 프리미엄 계층으로 업그레이드합니다. 기존 리소스를 프리미엄 계층 SKU로 업그레이드하면 영역 중복성이 자동으로 활성화됩니다. 표준에서 프리미엄으로 업그레이드해도 서비스 가동 중지 시간이 발생하지 않습니다. 자세한 내용은 Azure SignalR Service 계층 변경 참조하세요.

모든 영역이 정상인 경우의 동작

이 섹션에서는 영역 중복성을 위해 Azure SignalR Service 리소스를 구성하고 모든 가용성 영역이 작동할 때 예상되는 사항에 대해 설명합니다.

  • Cross-zone operation: Azure SignalR Service 연결 및 작업이 가용성 영역에 분산되는 방식을 자동으로 관리합니다. 여러 영역의 인프라는 활성-활성 모델의 트래픽을 처리합니다. 이 동작을 활용하기 위해 아무것도 구성할 필요가 없습니다. 서비스는 영역 간에 메시지를 자동으로 라우팅하므로 한 영역의 클라이언트가 보낸 메시지는 다른 영역에 연결된 클라이언트에 전달됩니다.

  • Cross-zone 데이터 복제: Azure SignalR Service 고객 데이터를 유지하지 않으므로 영역 간에 복제할 데이터가 없습니다. 연결 상태는 임시 상태이며 각 활성 연결과 연결됩니다.

영역 오류 중 동작

이 섹션에서는 영역 중복을 위해 Azure SignalR Service 리소스를 구성하고 가용성 영역 중 하나에서 중단이 발생할 때 예상되는 사항에 대해 설명합니다.

  • 검색 및 응답: Azure SignalR Service 플랫폼은 가용성 영역에서 오류를 감지합니다. 영역 장애 조치(failover)를 시작하기 위해 아무 작업도 수행할 필요가 없습니다.
  • Notification: Microsoft는 영역이 비활성화된 경우 자동으로 알리지 않습니다. 그러나 Azure Resource Health 사용하여 개별 리소스의 상태를 모니터링하고 Resource Health 경고 설정하여 문제를 알릴 수 있습니다. 또한 Azure Service Health를 사용하여 영역 오류를 포함하여 서비스의 전반적인 상태를 파악할 수 있으며, 문제를 알리도록 Service Health 경고를 설정할 수 있습니다.
  • 활성 요청: 영역이 실패하는 동안 영향을 받는 영역의 노드에 대한 활성 연결이 삭제됩니다. 클라이언트가 짧은 시간 후에 다시 연결하는 것과 같이 일시적인 오류를 적절하게 처리하는 경우 일반적으로 상당한 영향을 받지 않습니다.

  • Expected data loss: Azure SignalR Service는 메시지를 유지하지 않으므로 영역 오류가 Azure SignalR service 내에서 데이터 손실을 초래하지 않습니다. 영역 중단 이벤트 동안 활성 연결이 끊어지기 때문에 전송 중인 모든 데이터가 손실될 수 있습니다.

  • 예상 가동 중지 시간: 삭제된 활성 연결의 다시 연결은 일반적으로 몇 초 정도 걸립니다. 다시 연결 논리를 구현하는 클라이언트는 중단을 최소화합니다.

  • Redistribution: Azure SignalR Service 영역의 손실을 감지하고 정상 영역에 걸쳐 트래픽을 자동으로 재배포합니다. 아무 작업도 수행할 필요가 없습니다.

영역 복구

가용성 영역이 복구되면 Azure SignalR Service 자동으로 활성 서비스 토폴로지로 다시 통합됩니다. 영역 복구를 위해 아무 작업도 수행할 필요가 없습니다.

영역이 복구되면 새 연결이 복구된 영역의 인프라로 전달될 수 있습니다. 기존 연결은 복구된 영역으로 이동하거나 다시 분산되지 않지만, 시간이 지남에 따라 기존 연결이 끊어지고 다시 연결되면 점차 재분배 됩니다. 영역 간 연결 불균형은 워크로드에 영향을 주지 않습니다.

영역 오류 테스트

Azure SignalR Service는 영역 중복 프리미엄 계층 리소스의 트래픽 라우팅, 장애 조치(failover), 및 영역 복구를 자동으로 관리합니다. 아무것도 시작할 필요가 없습니다. 영역 중복은 완전히 관리되므로 가용성 영역 오류 프로세스의 유효성을 검사할 필요가 없습니다.

지역 전체 오류에 대한 복원력

Azure SignalR Service 단일 지역 서비스입니다. 지역을 사용할 수 없게 되면 SignalR Service 리소스도 사용할 수 없습니다.

지역 전체 오류로부터 애플리케이션을 보호하려면 프리미엄 계층에서 사용할 수 있는 지역 복제를 사용할 수 있습니다. 또는 여러 지역에 여러 SignalR Service 리소스를 배포하여 사용자 지정 다중 리전 솔루션을 빌드할 수 있습니다.

Geo-replication

지역에서 복제를 사용하면 다른 Azure 지역에서 SignalR Service 리소스의 replicas을 추가할 수 있습니다. Azure Traffic Manager DNS 기반 라우팅을 사용하여 각 클라이언트를 가장 가까운 정상 지역 복제본으로 전달합니다. 지역이 실패하면 Traffic Manager는 상태 검사를 통해 오류를 감지하고 클라이언트를 해당 복제본으로 전송하는 것을 중지합니다. 새 클라이언트 연결은 가장 가까운 정상 복제본으로 자동으로 라우팅됩니다.

 두 지역에서 지역 복제에 대해 구성된 Azure SignalR Service 보여 주는 다이어그램입니다.

Azure SignalR Service 리소스를 만든 지역을 기본 지역이라고 하며, 해당 복제본은 기본 복제본입니다. 주 리소스의 control 평면은 Azure SignalR Service 리소스의 구성을 관리합니다.

요구 사항

  • Region support: Azure SignalR Service 사용할 수 있는 모든 지역에 복제본을 추가할 수 있습니다.
  • 계층: 지역 복제를 사용하려면 프리미엄 계층을 사용해야 합니다.
  • Replica limit: 각 기본 SignalR Service 리소스는 최대 8개의 복제본을 지원합니다.

고려 사항

  • 구성 상속: 복제본은 주 리소스에서 대부분의 구성 설정을 상속합니다. 특정 설정은 각 복제본에서 별도로 구성해야 합니다. 상속되지 않는 설정의 전체 목록은 Azure SignalR Service의 Geo-replication을 참조하세요.

  • 구성 변경 내용: 주 지역의 기본 컨트롤 플레인은 SignalR Service 리소스에 대한 구성 변경 내용을 처리합니다. 기본 컨트롤 플레인을 사용할 수 없는 경우 기존 복제본이 중단 없이 데이터 트래픽을 계속 처리하지만 리소스 구성을 업데이트할 수 없습니다.

Cost

각 복제본은 자체 단위 수 및 아웃바운드 메시지 볼륨에 따라 별도로 청구됩니다. 메시지가 복제본 간에 전송되고 다른 지역의 클라이언트 또는 서버로 배달되는 경우 지역 간 송신 요금이 적용됩니다. 자세한 내용은 Azure SignalR Service 가격 책정 참조하세요.

지리적 복제 구성

SignalR Service 리소스에 복제본을 추가하거나 제거하려면 Azure SignalR Service Geo-replication을 참조하세요.

용량 계획 및 관리

각 복제본은 트래픽을 독립적으로 처리합니다. 지역 장애 조치(failover) 중에 실패한 지역의 클라이언트가 가장 가까운 정상 복제본에 다시 연결됩니다. 남은 복제본이 이 추가 부하를 흡수할 수 있는 충분한 용량을 갖도록 하려면 일반적으로 사용되는 부분뿐만 아니라 워크로드의 전체 예상 트래픽을 처리할 수 있는 단위로 각 복제본을 구성합니다.

또는 각 복제본에서 자동 크기 조정을 사용하도록 설정하여 더 높은 부하에 대응하여 단위를 자동으로 스케일 아웃할 수 있습니다. 보조 복제본을 사용할 수 없는 경우 자동 크기 조정이 계속 작동하지만 주 컨트롤 플레인을 사용할 수 없는 경우 자동 크기 조정이 작동하지 않습니다. 자동 크기 조정에 대한 자세한 내용은 Azure SignalR Service 참조하세요.

전략으로 과도하게 프로비전하는 방법에 대한 일반적인 지침은 오버프로비전하여 용량 관리를 참조하세요.

모든 지역이 정상인 경우의 동작

이 섹션에서는 지역 복제에 대한 Azure SignalR Service 구성하고 모든 복제본이 작동할 때 예상되는 작업에 대해 설명합니다.

  • Cross-region operation: Azure Traffic Manager 각 클라이언트를 가장 가까운 정상 지역 복제본으로 라우팅합니다. 다른 지리적 영역의 클라이언트는 다른 복제본에 연결할 수 있습니다. SignalR Service 모든 복제본에 연결된 클라이언트가 서로 통신할 수 있도록 복제본 간에 메시지를 동기화합니다.

  • 지역 간 데이터 복제: 복제본에 메시지를 보내면 서비스는 다른 위치에 연결된 클라이언트가 메시지를 받을 수 있도록 해당 메시지를 다른 복제본으로 동기적으로 전송합니다. 동기화 오버헤드는 대용량 그룹으로 브로드캐스트하거나 단일 연결을 메시징하는 것과 같은 가장 일반적인 메시징 패턴에 대해 최소화됩니다. 소규모 그룹(10명 미만)에게 메시징하면 동기화 오버헤드가 약간 더 높아질 수 있습니다.

    Azure SignalR Service는 메시지를 저장하지 않습니다. 활성 전송만 레플리카 간에 동기화됩니다.

지역 오류 중 동작

이 섹션에서는 지역 복제에 대한 Azure SignalR Service 구성하고 복제본 지역 중 하나에서 중단이 발생할 때 예상되는 작업에 대해 설명합니다.

  • 검색 및 응답: SignalR Service 지역에서 오류를 검색하고 사용자가 구성하는 다른 지역 중 하나의 복제본으로 들어오는 트래픽의 경로를 자동으로 다시 지정합니다.
  • 알림: Microsoft는 지역이 다운된 경우 자동으로 알리지 않습니다. 그러나 Azure Service Health 를 사용하여 지역 오류를 포함하여 서비스의 전반적인 상태를 파악할 수 있으며, 문제를 알리도록 Service Health 경고를 설정할 수 있습니다.
  • 활성 요청: 실패한 지역의 복제본에 대한 활성 연결이 삭제됩니다. 복제본 장애 조치 후 클라이언트는 다시 연결해야 합니다.

  • 예상되는 데이터 손실: Azure SignalR Service는 메시지를 저장하지 않습니다. 실패 시 실패한 지역의 클라이언트로 전송 중인 메시지가 손실될 수 있습니다. 서비스에서 고객 데이터를 저장하지 않으므로 지속적인 데이터 손실이 예상되지 않습니다.

  • 예상 중단 시간: Azure Traffic Manager는 각 복제본에 대해 상태 검사를 수행합니다. 지역 중단으로 인해 복제본이 상태 검사에 실패하면 Traffic Manager는 DNS 확인 결과에서 해당 복제본의 엔드포인트를 제거합니다. 엔드포인트를 제거한 후 클라이언트가 업데이트된 DNS 레코드를 보기 전에 90초의 DNS TTL이 경과해야 합니다. 전체적으로 전환에는 일반적으로 몇 분 정도 걸립니다. 다시 연결 논리를 구현하는 잘 설계된 클라이언트는 정상 복제본에 다시 연결한 후 정상 작업을 다시 시작할 수 있습니다.

    기본 컨트롤 플레인을 사용할 수 없는 경우 SignalR Service 리소스 또는 해당 복제본의 구성을 변경할 수 없습니다. 그러나 연결은 정상 복제본에서 계속 작동합니다.

  • Redistribution: Azure Traffic Manager 들어오는 요청을 정상 복제본으로 전달합니다. 그러나 Azure Traffic Manager 복제본 장애 조치(failover)를 감지하고 업데이트된 DNS 항목이 클라이언트에 전파되기 전에 클라이언트가 다시 연결을 시도하는 경우 클라이언트의 다시 연결 시도가 계속 사용할 수 없는 지역을 대상으로 하고 실패할 수 있습니다.

    DNS 업데이트가 전파되면 다시 연결하는 클라이언트가 가장 가까운 정상 복제본으로 자동으로 라우팅됩니다.

지역 복구

실패한 지역이 복구되면 Traffic Manager 상태 검사는 복원된 복제본을 검색하고 DNS 확인에 해당 엔드포인트를 다시 포함합니다. 현재 다른 복제본에 연결된 클라이언트는 영향을 받지 않으며 연결이 끊어질 때까지 연결 상태를 유지합니다. 가장 가까운 정상 복제본인 경우 복구된 지역의 복제본으로 새 연결이 다시 라우팅됩니다.

지역 오류 테스트

지역 장애 조치(failover)를 시뮬레이션하고 클라이언트 애플리케이션의 다시 연결 동작을 테스트하려면 복제본의 엔드포인트를 사용하지 않도록 설정할 수 있습니다. 이 작업을 수행하면 Traffic Manager가 해당 복제본에 대한 트래픽 라우팅을 중지하므로 클라이언트가 연결하는 복제본을 사용할 수 없게 될 때 클라이언트가 어떻게 동작하는지 관찰할 수 있습니다. 자세한 단계는 복제본 엔드포인트 사용 안 함 또는 사용을 참조하세요.

복원력을 위한 사용자 지정 다중 지역 솔루션

지역 간 복원력이 필요하지만 지역에서 복제를 사용하지 않는 경우 여러 지역에서 별도의 SignalR Service 리소스를 배포 및 관리하고 애플리케이션 서버에서 고유한 장애 조치(failover) 논리를 구현할 수 있습니다. 이 접근 방식은 지역 복제보다 더 복잡하며, 클라이언트 간 연결에 대한 무중단 장애 조치를 지원하지 않습니다. 자세한 아키텍처 개요, 장애 조치 패턴 및 테스트 지침은 Azure SignalR Service 참조하세요.

백업 및 복원

Azure SignalR Service는 비상태 메시징 서비스입니다. 고객 메시지를 유지하지 않으며 백업 또는 복원 기능이 없습니다.

리소스 구성을 보호하려면 인프라를 코드(예: Bicep 또는 ARM 템플릿)로 사용하여 SignalR Service 리소스를 정의하고 해당 정의를 소스 제어에 저장합니다. 리소스를 다시 만들어야 하는 경우 저장된 구성에서 다시 배포합니다.

서비스 유지 관리에 대한 복원력

Microsoft는 정기적으로 서비스 업데이트를 적용하고 다른 유지 관리를 수행합니다. Azure 플랫폼은 이러한 활동을 자동으로 처리하여 유지 관리가 원활하고 투명하도록 합니다. Azure Service Health 계획된 유지 관리를 통해 조언을 받지 않는 한 유지 관리 이벤트 중에 가동 중지 시간이 예상되지 않습니다.

계획된 유지 관리 중에 Azure SignalR Service 정상적인 종료 전략을 사용하여 연결된 클라이언트에 미치는 영향을 줄입니다. 설정된 기간 동안 연결이 점차 끊어지면 클라이언트가 한 번에 연결하지 않고 점진적으로 다시 연결할 수 있습니다. 자세한 내용은 서비스 유지 관리 중 연결 끊기를 참조하세요.

연결이 끊어지면 유지 관리 이벤트가 클라이언트에 표시됩니다. 클라이언트 애플리케이션이 사용자 표시 중단 없이 유지 관리 관련 연결 끊김에서 복구할 수 있도록 다시 연결 논리를 구현하는지 확인합니다.

서비스 수준 약정

Azure 서비스에 대한 SLA(서비스 수준 계약)는 각 서비스의 예상 가용성과 솔루션이 가용성 기대치를 달성하기 위해 충족해야 하는 조건을 설명합니다. 자세한 내용은 온라인 서비스 SLA를 참조하세요.