WebSocket adalah protokol komunikasi yang mendukung komunikasi full-duplex melalui satu koneksi TCP. Protokol ini dirancang untuk menetapkan komunikasi dua arah antara klien dan server melalui koneksi persisten. WebSocket memiliki overhead lebih rendah dan mendukung latensi jaringan lebih kecil karena koneksi tidak sering dibuat atau ditutup. Dibandingkan dengan protokol HTTP tradisional berbasis permintaan-respons, WebSocket menawarkan efisiensi lebih tinggi untuk interaksi real-time. WebSocket cocok untuk skenario yang memerlukan komunikasi real-time. Classic Load Balancer (CLB) mendukung WebSocket secara default.
Pengenalan WebSocket
Mengapa WebSocket?
Dengan perkembangan teknologi Internet yang cepat, aplikasi web menjadi semakin beragam. Beberapa skenario, seperti obrolan siaran langsung dan komentar langsung, memerlukan dorongan real-time dari sisi server. Dalam solusi tradisional, algoritma round-robin digunakan untuk memulai permintaan HTTP dari browser klien ke server pada interval tetap, seperti 1 detik. Server kemudian mengembalikan data terbaru ke klien. Namun, solusi ini memiliki kelemahan. Klien harus sering memulai permintaan, yang berisi header HTTP besar namun informasi berguna yang lebih sedikit. Permintaan tersebut tidak hanya meningkatkan beban pada server tetapi juga menyebabkan pemborosan bandwidth yang signifikan.
Untuk mengatasi masalah ini, HTML5 mengadopsi protokol WebSocket, yang menetapkan komunikasi yang lebih efisien antara klien dan server. WebSocket mendukung komunikasi full-duplex yang memungkinkan komunikasi dua arah simultan antara klien dan server. Ini memungkinkan server untuk secara proaktif mendorong data terbaru ke klien tanpa perlu polling dari sisi klien. Dengan permintaan yang tidak perlu lebih sedikit, komunikasi dua arah secara signifikan meningkatkan efisiensi pertukaran data dan mengurangi konsumsi sumber daya server serta bandwidth, sambil memberikan interaksi real-time yang lebih lancar bagi pengguna.
Karakteristik WebSocket
Sebelum koneksi WebSocket dapat ditetapkan, klien dan server harus menyelesaikan handshake tiga arah TCP dan permintaan HTTP khusus yang juga disebut handshake untuk meningkatkan koneksi HTTP menjadi koneksi WebSocket. Selama peningkatan, klien dan server berkomunikasi melalui WebSocket bukan HTTP. Komunikasi dua arah dapat ditetapkan melalui koneksi WebSocket yang sama.
Setelah koneksi WebSocket ditetapkan, ia tetap terbuka untuk memungkinkan komunikasi dua arah. WebSocket tidak memerlukan koneksi baru atau menunggu respons untuk setiap putaran pertukaran data. Koneksi persisten, latensi rendah yang ditetapkan melalui WebSocket secara signifikan meningkatkan efisiensi pertukaran data.
WebSocket bertukar data antara klien dan server sebagai frame data. Pesan WebSocket memerlukan header yang lebih kecil dan dapat dipertukarkan sebagai teks atau data biner. Jenis komunikasi ini mengurangi overhead pada koneksi persisten dan meningkatkan efisiensi pertukaran data. Ini memerlukan lebih sedikit sumber daya server dan bandwidth sambil memberikan interaksi real-time berperforma tinggi.
Untuk informasi lebih lanjut tentang WebSocket, lihat Protokol WebSocket.
Skema penggunaan
WebSocket cocok untuk skenario yang memerlukan komunikasi dua arah instan atau real-time, seperti aplikasi AI, ruang obrolan online, sistem notifikasi real-time, game online multipemain, dan dorongan pesan real-time.
Contoh
Sebuah perusahaan menerapkan aplikasi obrolan online di Alibaba Cloud. Pengguna dapat mengunjungi nama domain untuk mengakses server backend, di mana pengguna dapat berinteraksi satu sama lain. Aplikasi ini memerlukan komunikasi instan untuk mendukung pertukaran data dua arah real-time dengan latensi rendah dan efisiensi tinggi antar pengguna.
Konkurensi tinggi dan manajemen koneksi persisten menjadi tantangan. Seiring dengan meningkatnya jumlah pengguna, model HTTP tradisional tidak lagi dapat mendukung komunikasi real-time simultan untuk sejumlah besar pengguna. Setiap putaran pertukaran data memerlukan koneksi baru. Model ini sangat meningkatkan beban pada server dan menurunkan performa server.
Dalam skenario ini, perusahaan dapat menggunakan CLB bersama dengan WebSocket untuk mengelola koneksi persisten dan mempertahankan konkurensi tinggi. Perusahaan dapat menerapkan aplikasi WebSocket di beberapa server backend, menggunakan Redis untuk menyinkronkan pesan. Solusi ini memastikan ketersediaan layanan tinggi dan memungkinkan dorongan pesan yang andal, efisien, dan real-time untuk ruang obrolan online.
Catatan penggunaan
Listener HTTP CLB mendukung WebSocket secara default. Selain itu, CLB mendukung pembaruan bergulir. Perubahan konfigurasi tidak mempengaruhi koneksi persisten yang ada.
Saat menggunakan CLB, perhatikan hal-hal berikut:
Jika Anda ingin menetapkan koneksi antara CLB dan server backend melalui versi HTTP tertentu, seperti HTTP/1.1, kami sarankan Anda menggunakan server web yang mendukung versi HTTP sebagai server backend.
Periode timeout default listener HTTP adalah 60 detik. Jika CLB tidak bertukar data dengan server backend selama 60 detik, koneksi akan ditutup.
Anda dapat mengubah nilai parameter Connection Request Timeout pada listener HTTP untuk menetapkan periode timeout ke nilai yang diinginkan.
Untuk mempertahankan koneksi, Anda harus menggunakan mekanisme keepalive untuk bertukar paket antara ALB dan server backend setiap 60 detik.
Prasyarat
Instance CLB telah dibuat. Untuk informasi lebih lanjut, lihat Buat instance CLB.
Tiga instance Elastic Compute Service (ECS) telah dibuat. Dalam contoh ini, instance ECS diberi nama ECS01, ECS02, dan ECS03.
Aplikasi WebSocket diterapkan pada ECS01 dan ECS02. Redis diterapkan pada ECS03.
Dalam contoh ini, semua instance ECS menggunakan sistem operasi CentOS 7.9.
Kami sarankan Anda menambahkan ECS01, ECS02, dan ECS03 ke grup keamanan yang sama. Jika Anda menambahkan instance ECS ke grup keamanan yang berbeda, Anda harus mengizinkan akses ke port komunikasi dari satu sama lain.
Nama domain telah didaftarkan dan nomor Penyedia Konten Internet (ICP) telah diperoleh untuk nama domain tersebut. Untuk informasi lebih lanjut, lihat Daftarkan nama domain generik dan Proses pendaftaran ICP.
Prosedur
Langkah 1: Terapkan aplikasi
Terapkan Redis pada ECS03 dan aplikasi WebSocket pada ECS01 dan ECS02.
Contoh berikut menunjukkan cara menerapkan ruang obrolan online uji. Dalam contoh ini, instance ECS menggunakan sistem operasi CentOS 7.9. Contoh ini hanya untuk referensi. Sesuaikan konfigurasi untuk program dan aplikasi Anda.
Terapkan Redis pada ECS03
Masuk ke ECS03.
Jalankan perintah berikut pada ECS03 untuk menerapkan dan mengonfigurasi Redis:
# Instal Extra Packages for Enterprise Linux (EPEL) sudo yum install epel-release -y # Instal Redis sudo yum install redis -y # Mulai dan aktifkan Redis sudo systemctl start redis sudo systemctl enable redis # Periksa dan modifikasi file konfigurasi Redis untuk mengizinkan koneksi jarak jauh sudo sed -i 's/^bind 127.0.0.1$/bind 0.0.0.0/' /etc/redis.conf sudo sed -i 's/^protected-mode yes/protected-mode no/' /etc/redis.conf # Mulai ulang Redis untuk menerapkan modifikasi konfigurasi sudo systemctl restart redis # Periksa apakah Redis sedang berjalan sudo systemctl status redisJika perintah tidak melaporkan kesalahan dan keluaran menunjukkan bahwa Redis dalam keadaan active (running), Redis telah diterapkan dan konfigurasinya berlaku, seperti yang ditunjukkan pada gambar berikut.

Terapkan aplikasi WebSocket pada ECS01
Masuk ke ECS01.
Jalankan perintah
sudo pip3 install flask flask-socketio flask-cors redisuntuk menginstal library dependensi.Jalankan perintah
vi ECS01_ws.pydan tekan tombolIuntuk masuk ke mode edit.Salin dan tempel kode berikut:
Tekan tombol
Escdan masukkan:wquntuk menyimpan konfigurasi.Jalankan perintah
sudo python3 ECS01_ws.pyuntuk menjalankan skrip.Keluaran berikut menunjukkan bahwa aplikasi WebSocket telah diaktifkan dan menggunakan port 5000:
Server initialized for threading. * Serving Flask app 'ECS01_ws' (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on all addresses. WARNING: This is a development server. Do not use it in a production deployment. * Running on http://192.168.*.*:5000/ (Press CTRL+C to quit)Jika Anda gagal mengaktifkan aplikasi WebSocket, periksa apakah port yang ditentukan digunakan oleh aplikasi lain atau ada kesalahan dalam perintah atau kode.
Terapkan aplikasi WebSocket pada ECS02
Masuk ke ECS02.
Jalankan perintah
sudo pip3 install flask flask-socketio flask-cors redisuntuk menginstal library dependensi.Jalankan perintah
vi ECS02_ws.pydan tekan tombolIuntuk masuk ke mode edit.Salin dan tempel kode berikut:
Tekan tombol
Escdan masukkan:wquntuk menyimpan konfigurasi.Jalankan perintah
sudo python3 ECS02_ws.puntuk menjalankan skrip.Keluaran berikut menunjukkan bahwa aplikasi WebSocket telah diaktifkan dan menggunakan port 5000:
Server initialized for threading. * Serving Flask app 'ECS02_ws' (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on all addresses. WARNING: This is a development server. Do not use it in a production deployment. * Running on http://192.168.*.*:5000/ (Press CTRL+C to quit)Jika Anda gagal mengaktifkan aplikasi WebSocket, periksa apakah port yang ditentukan digunakan oleh aplikasi lain atau ada kesalahan dalam perintah atau kode.
Langkah 2: Konfigurasikan grup server
Masuk ke konsol CLB.
Di bilah navigasi atas, pilih wilayah tempat instance CLB diterapkan.
Di panel navigasi sisi kiri, klik Instances. Di halaman Instances, klik ID instance CLB yang ingin Anda kelola.
Di tab vServer Groups, klik Create vServer Group. Di halaman Create vServer Group, konfigurasikan parameter. Tabel berikut menjelaskan beberapa parameter utama. Parameter lainnya menggunakan nilai default. Setelah Anda menyelesaikan konfigurasi, klik <Create.
Parameter
Deskripsi
vServer Group Name
Masukkan nama Grup vServer RS1.
Di tab vServer Groups, temukan grup vServer dan klik Modify di kolom Actions.
Di halaman Modify vServer Group, klik Add. Di panel Servers, pilih ECS01 dan ECS02 dan atur port ke port yang digunakan oleh aplikasi WebSocket. Dalam contoh ini, aplikasi WebSocket menggunakan port 5000.

Di halaman Modify vServer Group, pilih server backend yang Anda tambahkan dan klik Save.
Langkah 3: Tambahkan listener HTTP
Masuk ke konsol CLB.
Di bilah navigasi atas, pilih wilayah tempat instance CLB diterapkan.
Di panel navigasi sisi kiri, klik Instances.
Di halaman Instances, temukan instance CLB dan klik Configure Listener di kolom Actions.
Di langkah Protocol & Listener, konfigurasikan parameter. Tabel berikut menjelaskan beberapa parameter. Konfigurasikan parameter lainnya berdasarkan kebutuhan bisnis Anda. Setelah Anda mengonfigurasi parameter, klik Next.
Parameter
Deskripsi
Select Listener Protocol
Pilih HTTP.
Listener Port
Dalam contoh ini, port 5000 digunakan.
Di langkah Backend Servers, konfigurasikan parameter. Tabel berikut menjelaskan beberapa parameter. Konfigurasikan parameter lainnya berdasarkan kebutuhan bisnis Anda. Setelah Anda mengonfigurasi parameter, klik Next.
Parameter
Deskripsi
Server Group
Pilih grup server yang ingin Anda gunakan.
Di langkah Pemeriksaan Kesehatan, klik Next. Anda dapat menggunakan nilai parameter default atau menentukan nilai berdasarkan kebutuhan bisnis Anda.
Di langkah Confirm, periksa apakah parameter dikonfigurasi dengan benar dan klik Submit.
Langkah 4: Tambahkan rekaman DNS
Untuk domain yang tidak terdaftar di Alibaba Cloud, Anda harus terlebih dahulu menambahkan nama domain ke Alibaba Cloud DNS sebelum Anda dapat membuat rekaman DNS.
Jika instance CLB Anda bersifat internal-facing, Anda harus terlebih dahulu mengaitkan alamat IP elastis (EIP) dengannya, lalu buat rekaman A untuk memetakan nama domain ke EIP untuk akses Internet.
Di panel navigasi sisi kiri, pilih .
Di halaman Instances, temukan instance CLB yang ingin Anda kelola dan salin Endpoint dari instance CLB tersebut.
Lakukan langkah-langkah berikut untuk membuat rekaman A:
Masuk ke konsol Alibaba Cloud DNS.
Di halaman Authoritative DNS Resolution, temukan nama domain yang ingin Anda kelola, dan klik DNS Settings di kolom Actions.
Di halaman DNS Settings, klik Add DNS Record.
Di panel Add DNS Record, konfigurasikan parameter berikut, gunakan nilai default untuk semua parameter lainnya atau atur berdasarkan kondisi aktual, dan klik OK.
Parameter
Deskripsi
Record Type
Pilih A dari daftar drop-down.
Hostname
Awalan nama domain Anda. Dalam contoh ini, www dimasukkan.
CatatanJika Anda menggunakan nama domain root, masukkan @.
Record Value
Masukkan alamat A yang sesuai dengan nama domain Anda. Dalam contoh ini, alamat IP instance CLB Anda digunakan.
Langkah 5: Verifikasi hasil
Siapkan dua komputer yang memiliki alamat IP berbeda dan mendukung akses Internet. Kirim pesan dari browser pada komputer-komputer tersebut untuk menguji apakah instance CLB dapat mendorong pesan WebSocket secara real-time.
Kunjungi
http://Nama domain:5000dari browser untuk mengakses ruang obrolan online.Gambar berikut menunjukkan bahwa ruang obrolan dapat diakses.

Jika Anda membuka alat pengembang di browser Anda, Anda dapat menemukan bahwa komunikasi WebSocket ditetapkan di tab Jaringan.

Masukkan nama pengguna dan klik Atur sebagai Nama Pengguna.
Masukkan pesan dan klik Kirim. Ulangi operasi ini di beberapa komputer.
Gambar berikut menunjukkan bahwa pesan dari komputer yang berbeda ditampilkan di browser.

Uji sebelumnya menunjukkan bahwa instance CLB dapat mendorong pesan WebSocket secara real-time sambil mempertahankan ketersediaan tinggi.
FAQ
Bagaimana cara menggunakan protokol WebSocket Secure?
WebSocket Secure adalah versi terenkripsi dari WebSocket.
Secara default, listener HTTPS mendukung WebSocket Secure. Untuk mengaktifkan WebSocket Secure, buat listener HTTPS.
Apakah saya dikenakan biaya untuk menggunakan WebSocket?
Anda tidak dikenakan biaya untuk menggunakan WebSocket atau WebSocket Secure.
Wilayah mana yang mendukung WebSocket?
WebSocket dan WebSocket Secure didukung di semua wilayah CLB.
Referensi
Untuk memfasilitasi pengujian, topik ini menggunakan contoh sederhana untuk menjelaskan cara menerapkan Redis di instance ECS. Namun, kesalahan server Redis dapat menyebabkan titik kegagalan tunggal (SPOF). Dalam lingkungan produksi Anda, kami sarankan Anda menggunakan Apa itu Tair (Redis OSS-compatible)? untuk meningkatkan ketersediaan tinggi aplikasi. Untuk informasi lebih lanjut, lihat Ikhtisar.