1.000.000 web soketini açık tutmak için kaç sistem kaynağı tutulacak? [kapalı]


Yanıtlar:


65

Güncellenen Cevap

Kısa cevap : evet, ama pahalı.

Uzun cevap :

Bu soru, WebSockets'e özgü değildir, çünkü WebSocket'ler temelde HTTP benzeri bir el sıkışma ve mesajlar için minimum çerçeveye sahip uzun ömürlü TCP soketleridir.

Gerçek soru şudur: tek bir sunucu aynı anda 1.000.000 soket bağlantısını kaldırabilir mi ve bu hangi sunucu kaynaklarını tüketir? Cevap birkaç faktör nedeniyle karmaşıktır, ancak uygun boyutta bir sistem (çok sayıda CPU, RAM ve hızlı ağ) ve ayarlanmış bir sunucu sistemi ve optimize edilmiş sunucu yazılımı için aynı anda 1.000.000 aktif soket bağlantısı mümkündür.

Bağlantıların sayısı birincil sorun değildir (bu çoğunlukla yalnızca çekirdek ayarlama ve yeterli bellek sorunudur), bu bağlantıların her birine veri göndermek / almaktır. Gelen bağlantılar uzun bir süreye yayılmışsa ve çoğunlukla boşta kalıyorlarsa veya nadiren küçük statik veri yığınları gönderiyorlarsa, muhtemelen 1.000.000 eşzamanlı bağlantıdan bile çok daha fazlasını elde edebilirsiniz. Bununla birlikte, bu koşullar altında bile (çoğunlukla boşta olan yavaş bağlantılar), çok sayıda bağlantıyı idare etmek için yapılandırılmamış ve tasarlanmamış ağlar, sunucu sistemleri ve sunucu kitaplıkları ile yine de sorunlarla karşılaşacaksınız.

Alessandro Alinone'nin 500.000 bağlantı için yaklaşık kaynak kullanımı hakkındaki yanıtına bakın.

Sunucunuzu nasıl yapılandıracağınızı ve sunucu yazılımınızı çok sayıda bağlantıyı destekleyecek şekilde nasıl yazacağınızı okumak için bazı eski ama yine de uygulanabilir kaynaklar:


1
Görünüşe göre tek bir JVM'de 12 milyon soket bağlantısı mümkündür. Nasıl yaptıklarını görün mrotaru.wordpress.com/2013/10/10/…
Jacques Koorts

@JacquesKoorts thx
BG BRUNO

159

Günümüz sistemlerinde 1 milyon eşzamanlı TCP bağlantısının işlenmesi bir sorun değildir.

Bunu kendi testlerimize dayanarak onaylayabilirim (tam açıklama: Lightstreamer'da CTO'yum).

Bazı müşterilerimize, tek bir kutuda 1 milyon bağlantıya ulaşılabileceğini (ve mutlaka bir süper canavar makinesi değil) birkaç kez göstermemiz gerekti. Ancak 500 bin eşzamanlı bağlantıyı test ettiğimiz yapılandırmayı özetlememe izin verin, çünkü bu Amazon EC2'de gerçekleştirilen çok daha yeni bir testtir.

Lightstreamer Server'ı (diğer şeylerin yanı sıra bir WebSocket sunucusu olan) m2.4xlarge örneğine kurduk. Bu, 8 çekirdek ve 68,4 GiB bellek anlamına gelir.

Lightstreamer Sunucusuna 500.000 eşzamanlı bağlantı oluşturmak için 11 istemci makine başlattık. Test, sunucudan toplam giden aktarım hızı 90.000 güncelleme / sn olacak şekilde yapılandırıldı ve bu da 450 Mbit / sn'lik giden bant genişliğinde zirvelere neden oldu.

Sunucu hiçbir zaman 13 GiB'den fazla RAM kullanmadı ve CPU% 60 civarında stabildi.

En az 30 GiB RAM ile 1 milyon eşzamanlı soketi işleyebilirsiniz. İhtiyaç duyulan CPU, ihtiyacınız olan veri çıkışına bağlıdır.


7
Bunun bir linux tadı olduğunu varsayıyorum. Çekirdeğin nasıl ayarlandığı hakkında ek bilgi paylaşır mısınız? max dosya tanımlayıcıları / tcp pencere boyutları vb.
quixver

14
Vanilya Amazon Linux'du. Maksimum dosya tanımlayıcıları artırıldı. TCP gönderme arabelleği 1600 bayta düşürüldü (varsayılan olarak Lightstreamer tarafından yapılır, ancak manuel olarak ayarlanabilir). MSS varsayılandı.
Alessandro Alinone

Bu yazılım tamamen ücretsiz mi yoksa kullanmak için biraz ücrete mi ihtiyaç duyuyor?
Avtandil Kavrelishvili

@AvtandilKavrelishvili: Hem ücretsiz hem de ücretli sürümler var.
Alessandro Alinone

Web soketleri yerine normal yoklama kullansaydım sunucuda daha kolay olur muydu?
mFeinstein
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.