Azure Service Bus로 SignalR 규모 확장

작성자 : Patrick Fletcher

경고

이 설명서는 최신 버전의 SignalR용이 아닙니다. ASP.NET Core SignalR을 살펴보세요.

이 자습서에서는 Service Bus 백플레인을 사용하여 각 역할 instance 메시지를 배포하여 SignalR 애플리케이션을 Windows Azure 웹 역할에 배포합니다. (Azure App Service 웹앱에서 Service Bus 백플레인을 사용할 수도 있습니다.)

토픽에서 웹 역할로 컴퓨터로의 화살표를 보여 주는 다이어그램 게시 레이블이 지정된 화살표는 웹 역할에서 시작하여 토픽으로 이동합니다.

필수 조건:

서비스 버스 백플레인은 Windows Server용 Service Bus 버전 1.1과도 호환됩니다. 그러나 Windows Server용 Service Bus 버전 1.0과 호환되지 않습니다.

가격 책정

Service Bus 백플레인은 topics 사용하여 메시지를 보냅니다. 최신 가격 정보는 Service Bus를 참조하세요. 이 글을 쓰는 시점에 매월 1,000,000달러 미만의 메시지를 보낼 수 있습니다. 백플레인은 SignalR Hub 메서드의 각 호출에 대한 서비스 버스 메시지를 보냅니다. 연결, 연결 끊기, 그룹 가입 또는 탈퇴 등에 대한 몇 가지 제어 메시지도 있습니다. 대부분의 애플리케이션에서 메시지 트래픽의 대부분은 허브 메서드 호출이 됩니다.

개요

자세한 자습서를 시작하기 전에 수행할 작업을 간단히 설명합니다.

  1. Windows Azure Portal 사용하여 새 Service Bus 네임스페이스를 만듭니다.

  2. 애플리케이션에 다음 NuGet 패키지를 추가합니다.

  3. SignalR 애플리케이션을 만듭니다.

  4. Startup.cs에 다음 코드를 추가하여 백플레인을 구성합니다.

    public void Configuration(IAppBuilder app)
    {
        string connectionString = "Service Bus connection string";
        GlobalHost.DependencyResolver.UseServiceBus(connectionString, "YourAppName");
    
        app.MapSignalR();
        // ...
    }
    

이 코드는 TopicCountMaxQueueLength에 대한 기본값으로 백플레인을 구성합니다. 이러한 값을 변경하는 방법에 대한 자세한 내용은 SignalR Performance: Scaleout 메트릭을 참조하세요.

각 애플리케이션에 대해 "YourAppName"에 대해 다른 값을 선택합니다. 여러 애플리케이션에서 동일한 값을 사용하지 마세요.

Azure 서비스 만들기

클라우드 서비스를 만들고 배포하는 방법에 설명된 대로 클라우드 서비스를 만듭니다. "방법: 빠른 만들기를 사용하여 클라우드 서비스 만들기" 섹션의 단계를 따릅니다. 이 자습서에서는 인증서를 업로드할 필요가 없습니다.

Cloud Service가 빨간색으로 동그라미를 그리는 옵션의 스크린샷

Service Bus 토픽/구독을 사용하는 방법에 설명된 대로 새 Service Bus 네임스페이스를 만듭니다. "서비스 네임스페이스 만들기" 섹션의 단계를 따릅니다.

아래 옵션이 있는 새 네임스페이스 추가라는 제목의 창 스크린샷

참고

클라우드 서비스 및 Service Bus 네임스페이스에 대해 동일한 지역을 선택해야 합니다.

Visual Studio 프로젝트 만들기

Visual Studio를 시작합니다. 파일 메뉴에서 새 프로젝트를 클릭합니다.

새 프로젝트 대화 상자에서 Visual C#을 확장합니다. 설치된 템플릿에서 클라우드를 선택한 다음, Windows Azure Cloud Service를 선택합니다. 기본 .NET Framework 4.5를 유지합니다. 애플리케이션 이름을 ChatService로 지정하고 확인을 클릭합니다.

새 프로젝트 대화 상자를 보여 주는 스크린샷 Office Share Point 폴더에서 클라우드가 선택됩니다. 채팅 서비스는 이름 필드에 있습니다.

새 Windows Azure Cloud Service 대화 상자에서 ASP.NET 웹 역할을 선택합니다. 오른쪽 화살표 단추(>)를 클릭하여 솔루션에 역할을 추가합니다.

새 역할 위로 마우스를 가져가면 연필 아이콘이 표시됩니다. 역할의 이름을 바꾸려면 이 아이콘을 클릭합니다. 역할 이름을 "SignalRChat"으로 지정하고 확인을 클릭합니다.

새 Windows Azure Cloud Service 대화 상자를 보여 주는 스크린샷 신호 R 채팅은 SP dot NET 웹 역할 위에 입력됩니다.

새 ASP.NET 프로젝트 대화 상자에서 MVC를 선택하고 확인을 클릭합니다.

새 ASP dot NET 프로젝트 대화 상자를 보여 주는 스크린샷 M V C는 선택한 템플릿입니다.

프로젝트 마법사는 두 개의 프로젝트를 만듭니다.

  • ChatService: 이 프로젝트는 Windows Azure 애플리케이션입니다. Azure 역할 및 기타 구성 옵션을 정의합니다.
  • SignalRChat: 이 프로젝트는 ASP.NET MVC 5 프로젝트입니다.

SignalR 채팅 애플리케이션 만들기

채팅 애플리케이션을 만들려면 SignalR 및 MVC 5를 사용하여 시작 자습서의 단계를 수행합니다.

NuGet을 사용하여 필요한 라이브러리를 설치합니다. 도구 메뉴에서 NuGet 패키지 관리자를 선택한 다음 패키지 관리자 콘솔을 선택합니다. 패키지 관리자 콘솔 창에서 다음 명령을 입력합니다.

Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR
Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR.ServiceBus

-ProjectName 옵션을 사용하여 Windows Azure 프로젝트가 아닌 ASP.NET MVC 프로젝트에 패키지를 설치합니다.

백플레인 구성

애플리케이션의 Startup.cs 파일에 다음 코드를 추가합니다.

public void Configuration(IAppBuilder app)
{
    // Any connection or hub wire up and configuration should go here
    string connectionString = "";
    GlobalHost.DependencyResolver.UseServiceBus(connectionString, "Chat");  

    app.MapSignalR();
}

이제 Service Bus 연결 문자열을 가져와야 합니다. Azure Portal 만든 Service Bus 네임스페이스를 선택하고 액세스 키 아이콘을 클릭합니다.

만들기라는 더하기 기호, 액세스 키라는 레이블이 지정된 키 및 삭제라는 레이블이 지정된 휴지통을 보여 주는 스크린샷

연결 문자열을 클립보드에 복사한 다음 connectionString 변수에 붙여넣습니다.

네임스페이스에 대한 액세스 키 연결 대화 상자를 보여 주는 스크린샷

string connectionString = "Endpoint=sb://xxxx.servicebus.windows.net/;
SharedSecretIssuer=owner;SharedSecretValue=XXXXXXXX";

Azure에 배포

솔루션 탐색기 ChatService 프로젝트 내에서 Roles 폴더를 확장합니다.

역할이라는 열린 폴더를 보여 주는 스크린샷 신호 R 채팅이 선택되었습니다.

SignalRChat 역할을 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다. 구성 탭을 선택합니다. 인스턴스에서 2를 선택합니다. VM 크기를 Extra Small로 설정할 수도 있습니다.

인스턴스를 보여 주는 스크린샷 인스턴스 수는 2로 설정되고 V M 크기는 추가 작은 크기로 설정됩니다.

변경 내용을 저장합니다.

솔루션 탐색기 ChatService 프로젝트를 마우스 오른쪽 단추로 클릭합니다. 게시를 선택합니다.

솔루션 탐색기 보여 주는 스크린샷 게시는 채팅 서비스 상황에 맞는 메뉴에서 선택됩니다.

처음으로 Windows Azure에 게시하는 경우 자격 증명을 다운로드해야 합니다. 게시 마법사에서 "로그인하여 자격 증명 다운로드"를 클릭합니다. 그러면 Windows Azure Portal 로그인하고 게시 설정 파일을 다운로드하라는 메시지가 표시됩니다.

Windows Azure 애플리케이션 게시 대화 상자를 보여 주는 스크린샷 로그인하여 자격 증명을 다운로드하는 것은 빨간색으로 동그라미로 표시됩니다.

가져오기를 클릭하고 다운로드한 게시 설정 파일을 선택합니다.

다음을 클릭합니다. 설정 게시 대화 상자의 클라우드 서비스에서 이전에 만든 클라우드 서비스를 선택합니다.

Windows Azure 게시 설정 페이지를 보여 주는 스크린샷

게시를 클릭합니다. 애플리케이션을 배포하고 VM을 시작하는 데 몇 분 정도 걸릴 수 있습니다.

이제 채팅 애플리케이션을 실행할 때 역할 인스턴스는 Service Bus 토픽을 사용하여 Azure Service Bus 통해 통신합니다. 토픽은 여러 구독자를 허용하는 메시지 큐입니다.

백플레인은 토픽 및 구독을 자동으로 만듭니다. 구독 및 메시지 활동을 보려면 Azure Portal 열고 Service Bus 네임스페이스를 선택하고 "항목"을 클릭합니다.

topics 선택된 탐색 메뉴의 스크린샷

메시지 작업이 dashboard 표시되는 데 몇 분 정도 걸립니다.

타임라인 구독 및 메시지 활동의 그래프를 보여 주는 스크린샷

SignalR은 토픽 수명을 관리합니다. 애플리케이션이 배포되는 한 토픽에서 수동으로 topics 삭제하거나 설정을 변경하지 마세요.

문제 해결

System.InvalidOperationException "유일하게 지원되는 IsolationLevel은 'IsolationLevel.Serializable'입니다."

이 오류는 작업의 트랜잭션 수준이 가 아닌 Serializable다른 값으로 설정된 경우에 발생할 수 있습니다. 다른 트랜잭션 수준으로 수행되는 작업이 없는지 확인합니다.