Scaleout SignalR dengan Redis

Peringatan

Dokumentasi ini bukan untuk versi terbaru SignalR. Lihatlah ASP.NET Core SignalR.

Versi perangkat lunak yang digunakan dalam topik ini

Versi sebelumnya dari topik ini

Untuk informasi tentang versi SignalR yang lebih lama, lihat Versi Lama SignalR.

Pertanyaan dan komentar

Silakan tinggalkan umpan balik tentang bagaimana Anda menyukai tutorial ini dan apa yang dapat kami tingkatkan di komentar di bagian bawah halaman. Jika Anda memiliki pertanyaan yang tidak terkait langsung dengan tutorial, Anda dapat mempostingnya ke forum ASP.NET SignalR atau StackOverflow.com.

Dalam tutorial ini, Anda akan menggunakan Redis untuk mendistribusikan pesan di seluruh aplikasi SignalR yang disebarkan pada dua instans IIS terpisah.

Redis adalah penyimpanan kunci-nilai dalam memori. Ini juga mendukung sistem olahpesan dengan model terbitkan/berlangganan. Backplane SignalR Redis menggunakan fitur pub/sub untuk meneruskan pesan ke server lain.

Diagram yang memperlihatkan panah dari Redis Server ke V M lalu ke komputer. Satu panah berlabel Terbitkan berubah dari V M ke Redis Server.

Untuk tutorial ini, Anda akan menggunakan tiga server:

  • Dua server yang menjalankan Windows, yang akan Anda gunakan untuk menyebarkan aplikasi SignalR.
  • Satu server yang menjalankan Linux, yang akan Anda gunakan untuk menjalankan Redis. Untuk cuplikan layar dalam tutorial ini, saya menggunakan Ubuntu 12.04 TLS.

Jika Anda tidak memiliki tiga server fisik untuk digunakan, Anda dapat membuat VM di Hyper-V. Opsi lain adalah membuat VM di Azure.

Meskipun tutorial ini menggunakan implementasi Redis resmi, ada juga port Windows Redis dari MSOpenTech. Penyiapan dan konfigurasi berbeda, tetapi jika tidak, langkah-langkahnya sama.

Catatan

Peluasan skala SignalR dengan Redis tidak mendukung kluster Redis.

Gambaran Umum

Sebelum kita sampai ke tutorial terperinci, berikut adalah gambaran umum singkat tentang apa yang akan Anda lakukan.

  1. Instal Redis dan mulai server Redis.

  2. Tambahkan paket NuGet ini ke aplikasi Anda:

  3. Membuat aplikasi SignalR.

  4. Tambahkan kode berikut ke Startup.cs untuk mengonfigurasi backplane:

    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();
        }
    }
    

Ubuntu di Hyper-V

Dengan menggunakan Windows Hyper-V, Anda dapat dengan mudah membuat VM Ubuntu di Windows Server.

Unduh ISO Ubuntu dari http://www.ubuntu.com.

Di Hyper-V, tambahkan VM baru. Di langkah Sambungkan Hard Disk Virtual , pilih Buat hard disk virtual.

Cuplikan layar yang memperlihatkan kotak dialog Wizard Komputer Virtual Baru. Sambungkan Hard Disk Virtual dan Buat hard disk virtual dipilih.

Di langkah Opsi Penginstalan , pilih File gambar (.iso), klik Telusuri, dan telusuri ke ISO penginstalan Ubuntu.

Cuplikan layar yang memperlihatkan Wizard Komputer Virtual Baru pada halaman Opsi Penginstalan. Instal O S dari boot C D D V D ROM dan File gambar dot i s o dipilih.

Instal Redis

Ikuti langkah-langkah di http://redis.io/download untuk mengunduh dan membangun 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

Ini membangun biner Redis di src direktori.

Secara default, Redis tidak memerlukan kata sandi. Untuk mengatur kata sandi, edit redis.conf file , yang terletak di direktori akar kode sumber. (Buat salinan cadangan file sebelum Anda mengeditnya!) Tambahkan direktif berikut ke redis.conf:

requirepass YourStrongPassword1234

Sekarang mulai server Redis:

src/redis-server redis.conf

Cuplikan layar yang memperlihatkan halaman utama server Redis.

Buka port 6379, yang merupakan port default yang didengarkan Redis. (Anda dapat mengubah nomor port dalam file konfigurasi.)

Membuat Aplikasi SignalR

Buat aplikasi SignalR dengan mengikuti salah satu tutorial berikut:

Selanjutnya, kita akan memodifikasi aplikasi obrolan untuk mendukung scaleout dengan Redis. Pertama, tambahkan Microsoft.AspNet.SignalR.StackExchangeRedis paket NuGet ke proyek Anda. Di Visual Studio, dari menu Alat , pilih Manajer Paket NuGet, lalu pilih Konsol Manajer Paket. Di jendela Konsol Manajer Paket, masukkan perintah berikut:

Install-Package Microsoft.AspNet.SignalR.StackExchangeRedis

Selanjutnya, buka file Startup.cs. Tambahkan kode berikut ke metode Konfigurasi :

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" adalah nama server yang menjalankan Redis.
  • port adalah nomor port
  • "kata sandi" adalah kata sandi yang Anda tentukan dalam file redis.conf.
  • "AppName" adalah string apa pun. SignalR membuat saluran pub/sub Redis dengan nama ini.

Contohnya:

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

Menyebarkan dan Menjalankan Aplikasi

Siapkan instans Windows Server Anda untuk menyebarkan aplikasi SignalR.

Tambahkan peran IIS. Sertakan fitur "Pengembangan Aplikasi", termasuk Protokol WebSocket.

Cuplikan layar yang memperlihatkan Wizard Tambahkan Peran dan Fitur. Peran Server dan Protokol WebSocket dipilih.

Sertakan juga Layanan Manajemen (tercantum di bawah "Alat Manajemen").

Cuplikan layar yang memperlihatkan Wizard Tambahkan Peran dan Fitur. Layanan Manajemen dipilih.

Instal Web Deploy 3.0. Saat Anda menjalankan IIS Manager, IIS Manager akan meminta Anda untuk menginstal Microsoft Web Platform, atau Anda dapat mengunduh alat penginstal. Di Penginstal Platform, cari Web Deploy dan instal Web Deploy 3.0

Cuplikan layar yang memperlihatkan kotak dialog Alat Penginstal Platform Web 4 poin 5. Web Deploy 3 poin 0 dipilih.

Periksa apakah Layanan Manajemen Web sedang berjalan. Jika tidak, mulai layanan. (Jika Anda tidak melihat Layanan Manajemen Web dalam daftar layanan Windows, pastikan Anda menginstal Layanan Manajemen saat menambahkan peran IIS.)

Secara default, Layanan Manajemen Web mendengarkan port TCP 8172. Di Windows Firewall, buat aturan masuk baru untuk mengizinkan lalu lintas TCP pada port 8172. Untuk informasi selengkapnya, lihat Mengonfigurasi Aturan Firewall. (Jika Anda menghosting VM di Azure, Anda dapat melakukan ini langsung di portal Azure. Lihat Cara Menyiapkan Titik Akhir ke Komputer Virtual.)

Sekarang Anda siap untuk menyebarkan proyek Visual Studio dari komputer pengembangan Anda ke server. Di Penjelajah Solusi, klik kanan solusi dan klik Terbitkan.

Untuk dokumentasi selengkapnya tentang penyebaran web, lihat Peta Konten Penyebaran Web untuk Visual Studio dan ASP.NET.

Jika Anda menyebarkan aplikasi ke dua server, Anda dapat membuka setiap instans di jendela browser terpisah dan melihat bahwa mereka masing-masing menerima pesan SignalR dari yang lain. (Tentu saja, di lingkungan produksi, kedua server akan duduk di belakang load balancer.)

Cuplikan layar dua jendela browser terbuka memperlihatkan aplikasi yang disebarkan ke dua server.

Jika Anda ingin melihat pesan yang dikirim ke Redis, Anda dapat menggunakan klien redis-cli , yang diinstal dengan Redis.

redis-cli -a password
SUBSCRIBE ChatApp

Cuplikan layar yang memperlihatkan daftar bernomor di jendela Redis.