Berapa banyak sumber daya sistem yang akan disimpan untuk menjaga 1.000.000 websocket tetap terbuka? [Tutup]

122

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?

kk lou
sumber

Jawaban:

65

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:

kanaka
sumber
1
Rupanya 12 juta koneksi soket dimungkinkan pada satu JVM. Lihat bagaimana mereka melakukannya mrotaru.wordpress.com/2013/10/10/…
Jacques Koorts
@JacquesKoorts thx
BG BRUNO
159

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.

Alessandro Sendiri
sumber
7
Saya berasumsi ini adalah semacam rasa linux. Bisakah Anda berbagi info tambahan tentang bagaimana kernel disetel? max file descriptors / tcp ukuran jendela dll?
quixver
14
Itu vanilla Amazon Linux. Deskriptor file maks ditingkatkan. Buffer pengiriman TCP dikurangi menjadi 1600 byte (dilakukan secara default oleh Lightstreamer, meskipun dapat disetel secara manual). MSS adalah default.
Alessandro Alinone
Apakah perangkat lunak ini sepenuhnya gratis atau perlu biaya untuk menggunakannya?
Avtandil Kavrelishvili
@AvtandilKavrelishvili: Ada edisi gratis dan edisi berbayar.
Alessandro Alinone
Apakah akan lebih mudah di server jika alih-alih websockets saya menggunakan polling biasa?
mFeinstein