Websocket bagus, tetapi apakah itu mampu menangani 1.000.000 koneksi bersamaan?
Berapa banyak sumber daya sistem yang akan disimpan untuk menjaga 1.000.000 websocket tetap terbuka?
Jawaban yang Diperbarui
Jawaban singkatnya : ya, tapi mahal.
Jawaban panjang :
Pertanyaan ini tidak unik untuk WebSockets karena WebSockets pada dasarnya adalah soket TCP yang berumur panjang dengan jabat tangan seperti HTTP dan pembingkaian minimal untuk pesan.
Pertanyaan sebenarnya adalah: dapatkah satu server menangani 1.000.000 koneksi soket simultan dan sumber daya server apa yang akan dikonsumsi ini? Jawabannya rumit oleh beberapa faktor, tetapi 1.000.000 koneksi soket aktif simultan dimungkinkan untuk sistem berukuran tepat (banyak CPU, RAM, dan jaringan cepat) dan dengan sistem server yang disetel dan perangkat lunak server yang dioptimalkan.
Jumlah koneksi bukanlah masalah utama (itu sebagian besar hanya masalah penyetelan kernel dan memori yang cukup), ini adalah pemrosesan dan pengiriman / penerimaan data ke / dari masing-masing koneksi tersebut. Jika koneksi masuk tersebar dalam jangka waktu yang lama, dan mereka sebagian besar menganggur atau jarang mengirim potongan kecil data statis maka Anda mungkin bisa mendapatkan lebih dari 1.000.000 koneksi simultan. Namun, bahkan dalam kondisi tersebut (koneksi lambat yang sebagian besar tidak aktif) Anda masih akan mengalami masalah dengan jaringan, sistem server, dan pustaka server yang tidak dikonfigurasi dan dirancang untuk menangani koneksi dalam jumlah besar.
Lihat jawaban Alessandro Alinone tentang perkiraan penggunaan sumber daya untuk 500.000 koneksi.
Berikut adalah beberapa sumber yang lebih lama tetapi masih berlaku untuk membaca tentang bagaimana Anda akan mengkonfigurasi server Anda dan menulis perangkat lunak server Anda untuk mendukung koneksi dalam jumlah besar:
Pada sistem saat ini, menangani 1 juta koneksi TCP secara bersamaan tidak menjadi masalah.
Saya dapat menegaskannya berdasarkan pengujian kami sendiri (pengungkapan penuh: Saya adalah CTO di Lightstreamer).
Kami harus mendemonstrasikan beberapa kali, kepada beberapa pelanggan kami, bahwa 1 juta koneksi dapat dijangkau dalam satu kotak (dan belum tentu mesin super-monster). Namun izinkan saya merangkum konfigurasi tempat kami menguji koneksi serentak 500K, karena ini adalah pengujian yang jauh lebih baru yang dilakukan di Amazon EC2.
Kami menginstal Lightstreamer Server (yang merupakan server WebSocket, di antaranya) pada instance m2.4xlarge. Ini berarti 8 core dan memori 68,4 GiB.
Kami meluncurkan 11 mesin klien untuk membuat 500.000 koneksi bersamaan ke Server Lightstreamer. Pengujian dikonfigurasi sehingga total keluaran keluar dari server adalah 90.000 pembaruan / dtk, menghasilkan puncak bandwidth keluar 450 Mbit / dtk.
Server tidak pernah menggunakan lebih dari 13 GiB RAM dan CPU stabil sekitar 60%.
Dengan setidaknya 30 GiB RAM, Anda dapat menangani 1 juta soket bersamaan. CPU yang dibutuhkan bergantung pada throughput data yang Anda butuhkan.
sumber