Redis로 SignalR 규모 확장(SignalR 1.x)
경고
이 설명서는 최신 버전의 SignalR용이 아닙니다. ASP.NET Core SignalR을 살펴보세요.
이 자습서에서는 Redis 를 사용하여 두 개의 개별 IIS 인스턴스에 배포된 SignalR 애플리케이션에 메시지를 배포합니다.
Redis는 메모리 내 키-값 저장소입니다. 또한 게시/구독 모델을 사용하는 메시징 시스템을 지원합니다. SignalR Redis 백플레인은 pub/sub 기능을 사용하여 메시지를 다른 서버로 전달합니다.
이 자습서에서는 다음 세 개의 서버를 사용합니다.
- SignalR 애플리케이션을 배포하는 데 사용할 Windows를 실행하는 두 서버입니다.
- Linux를 실행하는 하나의 서버로, Redis를 실행하는 데 사용합니다. 이 자습서의 스크린샷에서는 Ubuntu 12.04 TLS를 사용했습니다.
사용할 물리적 서버가 3개 없는 경우 Hyper-V에서 VM을 만들 수 있습니다. 또 다른 옵션은 Azure에서 VM을 만드는 것입니다.
이 자습서에서는 공식 Redis 구현을 사용하지만 MSOpenTech 의 Windows Redis 포트 도 있습니다. 설정 및 구성은 다르지만 그렇지 않으면 단계가 동일합니다.
참고
Redis를 사용한 SignalR 스케일 아웃은 Redis 클러스터를 지원하지 않습니다.
개요
자세한 자습서를 시작하기 전에 수행할 작업을 간단히 설명합니다.
Redis를 설치하고 Redis 서버를 시작합니다.
애플리케이션에 다음 NuGet 패키지를 추가합니다.
SignalR 애플리케이션을 만듭니다.
Global.asax에 다음 코드를 추가하여 백플레인을 구성합니다.
protected void Application_Start() { GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName"); RouteTable.Routes.MapHubs(); // ... }
Hyper-V의 Ubuntu
Windows Hyper-V를 사용하여 Windows Server에서 Ubuntu VM을 쉽게 만들 수 있습니다.
에서 Ubuntu ISO를 http://www.ubuntu.com다운로드합니다.
Hyper-V에서 새 VM을 추가합니다. 가상 하드 디스크 연결 단계에서 가상 하드 디스크 만들기를 선택합니다.
설치 옵션 단계에서 이미지 파일(.iso)을 선택하고 찾아보기를 클릭한 다음 Ubuntu 설치 ISO로 이동합니다.
Redis 설치
의 단계에 http://redis.io/download 따라 Redis를 다운로드하고 빌드합니다.
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가 수신 대기하는 기본 포트인 포트 6379를 엽니다. (구성 파일에서 포트 번호를 변경할 수 있습니다.)
SignalR 애플리케이션 만들기
다음 자습서 중 하나를 수행하여 SignalR 애플리케이션을 만듭니다.
다음으로, Redis를 사용하여 스케일 아웃을 지원하도록 채팅 애플리케이션을 수정합니다. 먼저 SignalR.Redis NuGet 패키지를 프로젝트에 추가합니다. Visual Studio의 도구 메뉴에서 NuGet 패키지 관리자를 선택한 다음 패키지 관리자 콘솔을 선택합니다. 패키지 관리자 콘솔 창에서 다음 명령을 입력합니다.
Install-Package Microsoft.AspNet.SignalR.Redis
다음으로 Global.asax 파일을 엽니다. Application_Start 메서드에 다음 코드를 추가합니다.
protected void Application_Start()
{
GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName");
RouteTable.Routes.MapHubs();
}
- "server"는 Redis를 실행하는 서버의 이름입니다.
- 포트 는 포트 번호입니다.
- "password"는 redis.conf 파일에 정의한 암호입니다.
- "AppName"은 모든 문자열입니다. SignalR은 이 이름으로 Redis pub/sub 채널을 만듭니다.
예:
GlobalHost.DependencyResolver.UseRedis("redis-server.cloudapp.net", 6379,
"MyStrongPassword1234", "ChatApp");
애플리케이션 배포 및 실행
SignalR 애플리케이션을 배포할 Windows Server 인스턴스를 준비합니다.
IIS 역할을 추가합니다. WebSocket 프로토콜을 포함하여 "애플리케이션 개발" 기능을 포함합니다.
또한 관리 서비스("관리 도구" 아래에 나열됨)를 포함합니다.
웹 배포 3.0을 설치합니다. IIS 관리자를 실행하면 Microsoft 웹 플랫폼 설치하라는 메시지가 표시되거나 설치 관리자를 다운로드할 수 있습니다. 플랫폼 설치 관리자에서 웹 배포를 검색하고 웹 배포 3.0을 설치합니다.
웹 관리 서비스가 실행 중인지 확인합니다. 그렇지 않은 경우 서비스를 시작합니다. (Windows 서비스 목록에 웹 관리 서비스가 표시되지 않는 경우 IIS 역할을 추가할 때 관리 서비스를 설치했는지 확인합니다.)
기본적으로 웹 관리 서비스는 TCP 포트 8172에서 수신 대기합니다. Windows 방화벽에서 포트 8172에서 TCP 트래픽을 허용하는 새 인바운드 규칙을 만듭니다. 자세한 내용은 방화벽 규칙 구성을 참조하세요. (Azure에서 VM을 호스팅하는 경우 Azure Portal 직접 이 작업을 수행할 수 있습니다. 가상 머신에 엔드포인트를 설정하는 방법을 참조하세요.)
이제 개발 컴퓨터에서 서버로 Visual Studio 프로젝트를 배포할 준비가 되었습니다. 솔루션 탐색기 솔루션을 마우스 오른쪽 단추로 클릭하고 게시를 클릭합니다.
웹 배포에 대한 자세한 설명서는 Visual Studio용 웹 배포 콘텐츠 맵 및 ASP.NET 참조하세요.
두 서버에 애플리케이션을 배포하는 경우 별도의 브라우저 창에서 각 instance 열고 각각 다른 서버에서 SignalR 메시지를 받는지 확인할 수 있습니다. (물론 프로덕션 환경에서는 두 서버가 부하 분산 장치 뒤에 배치됩니다.)
Redis로 전송되는 메시지를 보고 싶은 경우 Redis와 함께 설치되는 redis-cli 클라이언트를 사용할 수 있습니다.
redis-cli -a password
SUBSCRIBE ChatApp