Redis로 SignalR 규모 확장

경고

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

이 항목에서 사용되는 소프트웨어 버전

이 항목의 이전 버전

이전 버전의 SignalR에 대한 자세한 내용은 SignalR 이전 버전을 참조하세요.

질문 및 의견

이 자습서를 얼마나 좋아했는지와 페이지 아래쪽의 메모에서 개선할 수 있는 사항에 대한 피드백을 남겨주세요. 자습서와 직접 관련이 없는 질문이 있는 경우 ASP.NET SignalR 포럼 또는 StackOverflow.com 게시할 수 있습니다.

이 자습서에서는 Redis 를 사용하여 별도의 두 IIS 인스턴스에 배포된 SignalR 애플리케이션에 메시지를 배포합니다.

Redis는 메모리 내 키-값 저장소입니다. 또한 게시/구독 모델을 사용하는 메시징 시스템도 지원합니다. SignalR Redis 백플레인은 pub/sub 기능을 사용하여 메시지를 다른 서버로 전달합니다.

Redis Server에서 V M으로 이동한 다음 컴퓨터로 가는 화살표를 보여 주는 다이어그램 게시 레이블이 지정된 화살표 하나가 V M에서 Redis Server로 이동합니다.

이 자습서에서는 다음 세 개의 서버를 사용합니다.

  • Windows를 실행하는 두 서버로, SignalR 애플리케이션을 배포하는 데 사용합니다.
  • Redis를 실행하는 데 사용할 Linux를 실행하는 서버 1개. 이 자습서의 스크린샷에서는 Ubuntu 12.04 TLS를 사용했습니다.

사용할 물리적 서버가 3개 없는 경우 Hyper-V에서 VM을 만들 수 있습니다. 또 다른 옵션은 Azure에서 VM을 만드는 것입니다.

이 자습서에서는 공식 Redis 구현을 사용하지만 MSOpenTech 의 Windows Redis 포트 도 있습니다. 설정과 구성은 다르지만 그렇지 않으면 단계가 동일합니다.

참고

Redis를 사용한 SignalR 스케일 아웃은 Redis 클러스터를 지원하지 않습니다.

개요

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

  1. Redis를 설치하고 Redis 서버를 시작합니다.

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

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

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

    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Any connection or hub wire up and configuration should go here
            GlobalHost.DependencyResolver.UseStackExchangeRedis("server", port, "password", "AppName");
            app.MapSignalR();
        }
    }
    

Hyper-V의 Ubuntu

Windows Hyper-V를 사용하면 Windows Server에서 Ubuntu VM을 쉽게 만들 수 있습니다.

에서 Ubuntu ISO를 http://www.ubuntu.com다운로드합니다.

Hyper-V에서 새 VM을 추가합니다. 가상 하드 디스크 연결 단계에서 가상 하드 디스크 만들기를 선택합니다.

새 Virtual Machine 마법사 대화 상자를 보여 주는 스크린샷. 가상 하드 디스크 연결 및 가상 하드 디스크 만들기가 선택됩니다.

설치 옵션 단계에서 이미지 파일(.iso)을 선택하고 찾아보기를 클릭한 다음 Ubuntu 설치 ISO로 이동합니다.

설치 옵션 페이지의 새 가상 머신 마법사를 보여 주는 스크린샷. 부팅 C D D V D ROM에서 O S를 설치하고 이미지 파일 점 i s o가 선택되어 있습니다.

Redis 설치

Redis를 다운로드하고 빌드하려면 다음 단계를 수행 http://redis.io/download 합니다.

wget http://redis.googlecode.com/files/redis-2.6.12.tar.gz
tar xzf redis-2.6.12.tar.gz
cd redis-2.6.12
make

그러면 디렉터리에 Redis 이진 src 파일이 빌드됩니다.

기본적으로 Redis에는 암호가 필요하지 않습니다. 암호를 설정하려면 소스 코드의 redis.conf 루트 디렉터리에 있는 파일을 편집합니다. (편집하기 전에 파일의 백업 복사본을 만드세요!) 다음 지시문을 다음 지시문에 추가합니다 redis.conf.

requirepass YourStrongPassword1234

이제 Redis 서버를 시작합니다.

src/redis-server redis.conf

Redis 서버의 기본 페이지를 보여 주는 스크린샷

Redis가 수신 대기하는 기본 포트인 포트 6379를 엽니다. (구성 파일에서 포트 번호를 변경할 수 있습니다.)

SignalR 애플리케이션 만들기

다음 자습서 중 하나를 수행하여 SignalR 애플리케이션을 만듭니다.

다음으로 Redis를 사용하여 스케일 아웃을 지원하도록 채팅 애플리케이션을 수정합니다. 먼저 프로젝트에 NuGet 패키지를 추가 Microsoft.AspNet.SignalR.StackExchangeRedis 합니다. Visual Studio의 도구 메뉴에서 NuGet 패키지 관리자를 선택한 다음, 패키지 관리자 콘솔을 선택합니다. 패키지 관리자 콘솔 창에서 다음 명령을 입력합니다.

Install-Package Microsoft.AspNet.SignalR.StackExchangeRedis

다음으로 Startup.cs 파일을 엽니다. Configuration 메서드에 다음 코드를 추가합니다.

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        // Any connection or hub wire up and configuration should go here
        GlobalHost.DependencyResolver.UseStackExchangeRedis("server", port, "password", "AppName");
        app.MapSignalR();
    }
}
  • "server"는 Redis를 실행하는 서버의 이름입니다.
  • 포트 는 포트 번호입니다.
  • "password"는 redis.conf 파일에 정의한 암호입니다.
  • "AppName"은 모든 문자열입니다. SignalR은 이 이름으로 Redis pub/sub 채널을 만듭니다.

예를 들면 다음과 같습니다.

GlobalHost.DependencyResolver.UseStackExchangeRedis("redis-server.cloudapp.net", 6379,
    "MyStrongPassword1234", "ChatApp");

애플리케이션 배포 및 실행

SignalR 애플리케이션을 배포할 Windows Server 인스턴스를 준비합니다.

IIS 역할을 추가합니다. WebSocket 프로토콜을 비롯한 "애플리케이션 개발" 기능을 포함합니다.

역할 및 기능 추가 마법사를 보여 주는 스크린샷 서버 역할 및 WebSocket 프로토콜이 선택됩니다.

또한 관리 서비스("관리 도구" 아래에 나열됨)를 포함합니다.

역할 및 기능 추가 마법사를 보여 주는 스크린샷 관리 서비스가 선택되어 있습니다.

웹 배포 3.0을 설치합니다. IIS 관리자를 실행하면 Microsoft 웹 플랫폼 설치하라는 메시지가 표시되거나 설치 관리자를 다운로드할 수 있습니다. 플랫폼 설치 관리자에서 웹 배포 검색 및 웹 배포 3.0 설치

웹 플랫폼 설치 관리자 4개 지점 5 대화 상자를 보여 주는 스크린샷 웹 배포 3점 0이 선택되었습니다.

웹 관리 서비스가 실행 중인지 확인합니다. 그렇지 않은 경우 서비스를 시작합니다. (Windows 서비스 목록에 웹 관리 서비스가 표시되지 않는 경우 IIS 역할을 추가할 때 관리 서비스를 설치했는지 확인합니다.)

기본적으로 웹 관리 서비스는 TCP 포트 8172에서 수신 대기합니다. Windows 방화벽에서 포트 8172에서 TCP 트래픽을 허용하는 새 인바운드 규칙을 만듭니다. 자세한 내용은 방화벽 규칙 구성을 참조하세요. (Azure에서 VM을 호스팅하는 경우 Azure Portal 직접 이 작업을 수행할 수 있습니다. 가상 머신에 엔드포인트를 설정하는 방법을 참조하세요.)

이제 개발 컴퓨터에서 서버로 Visual Studio 프로젝트를 배포할 준비가 되었습니다. 솔루션 탐색기 솔루션을 마우스 오른쪽 단추로 클릭하고 게시를 클릭합니다.

웹 배포에 대한 자세한 설명서는 Visual Studio 및 ASP.NET 대한 웹 배포 콘텐츠 맵을 참조하세요.

두 서버에 애플리케이션을 배포하는 경우 별도의 브라우저 창에서 각 인스턴스를 열고 각각 다른 서버에서 SignalR 메시지를 수신하는지 확인할 수 있습니다. (물론 프로덕션 환경에서는 두 서버가 부하 분산 장치 뒤에 배치됩니다.)

두 서버에 배포된 애플리케이션을 보여 주는 두 개의 브라우저 창 열기 스크린샷

Redis로 전송되는 메시지를 보고 싶은 경우 Redis와 함께 설치되는 redis-cli 클라이언트를 사용할 수 있습니다.

redis-cli -a password
SUBSCRIBE ChatApp

Redis 창의 번호 매기기 목록을 보여 주는 스크린샷