Bu alıntıyı ben yazdığım için cevap vereceğim :-)
Büyük sitelerde iki büyük sorun vardır: eşzamanlı bağlantılar ve gecikme. Eşzamanlı bağlantı, içeriği indirmek için yaş alan yavaş istemcilerden ve boşta bağlantı durumlarından kaynaklanır. Bu boşta bağlantı durumları, canlı tutma olarak bilinen ve gecikme ile daha da artan birden çok nesneyi getirmek için bağlantının yeniden kullanılmasından kaynaklanır. İstemci sunucuya çok yakın olduğunda, bağlantıyı yoğun bir şekilde kullanabilir ve neredeyse hiçbir zaman boşta kalmamasını sağlayabilir. Ancak dizi bittiğinde, hiç kimse kanalı hızlı bir şekilde kapatmak istemez ve bağlantı uzun süre açık ve kullanılmadan kalır. Birçok insanın çok düşük bir canlı tutma zaman aşımı kullanmayı önermesinin nedeni budur. Apache gibi bazı sunucularda, ayarlayabileceğiniz en düşük zaman aşımı bir saniyedir ve genellikle yüksek yükleri sürdürmek için çok fazladır: Önünüzde 20000 istemciniz varsa ve her saniyede ortalama bir nesne alıyorlarsa, bu 20000 bağlantıyı kalıcı olarak kurmuş olacaksınız. Apache gibi genel amaçlı bir sunucuda 20000 eşzamanlı bağlantı çok büyüktür, hangi modüllerin yüklü olduğuna bağlı olarak 32 ile 64 GB arasında RAM gerektirir ve RAM ekleyerek bile çok daha yükseğe çıkmayı umamazsınız. Pratikte, 20000 istemci için sunucuda 40000 ila 60000 eşzamanlı bağlantı görebilirsiniz çünkü tarayıcılar, getirecek çok sayıda nesneye sahiplerse 2 ila 3 bağlantı kurmaya çalışır. ve muhtemelen RAM ekleyerek çok daha yükseğe çıkmayı umamazsınız. Pratikte, 20000 istemci için sunucuda 40000 ila 60000 eşzamanlı bağlantı görebilirsiniz çünkü tarayıcılar, getirecek çok sayıda nesneye sahiplerse 2 ila 3 bağlantı kurmaya çalışır. ve muhtemelen RAM ekleyerek çok daha yükseğe çıkmayı umamazsınız. Pratikte, 20000 istemci için sunucuda 40000 ila 60000 eşzamanlı bağlantı görebilirsiniz çünkü tarayıcılar, getirecek çok sayıda nesneye sahiplerse 2 ila 3 bağlantı kurmaya çalışır.
Her nesneden sonra bağlantıyı kapatırsanız, eşzamanlı bağlantıların sayısı önemli ölçüde düşer. Aslında, nesneler arasındaki süreye göre bir nesneyi indirmek için ortalama süreye karşılık gelen bir faktör kadar düşecektir. Bir nesneyi (minyatür bir fotoğraf, bir düğme vb.) İndirmek için 50 ms'ye ihtiyacınız varsa ve yukarıdaki gibi saniyede ortalama 1 nesne indirirseniz, istemci başına yalnızca 0,05 bağlantınız olur, bu yalnızca 1000'dir. 20000 istemci için eşzamanlı bağlantılar.
Şimdi yeni bağlantılar kurma zamanı sayılacak. Uzak istemciler hoş olmayan bir gecikme yaşayacaktır. Geçmişte, tarayıcılar canlı tutma devre dışı bırakıldığında büyük miktarda eşzamanlı bağlantı kullanıyordu. MSIE'de 4 ve Netscape'te 8 rakamlarını hatırlıyorum. Bu, gerçekten nesne başına ortalama gecikmeyi bu kadar bölerdi. Artık canlı tutma her yerde mevcut olduğuna göre, artık bu yüksek sayıları görmüyoruz çünkü bunu yapmak uzak sunuculardaki yükü daha da artırıyor ve tarayıcılar İnternet altyapısını korumaya özen gösteriyor.
Bu, günümüz tarayıcılarında, canlı tutma hizmetlerini canlı tutma hizmetleri kadar duyarlı hale getirmenin daha zor olduğu anlamına gelir. Ayrıca, bazı tarayıcılar (örneğin: Opera) ardışık düzeni kullanmayı denemek için buluşsal yöntemler kullanır. Ardışık düzen, canlı tutma özelliğini kullanmanın etkili bir yoludur, çünkü bir yanıt beklemeden birden çok istek göndererek gecikmeyi neredeyse ortadan kaldırır. 100 küçük fotoğraf içeren bir sayfada denedim ve ilk erişim, canlı tutma olmadan yaklaşık iki kat daha hızlı, ancak sonraki erişim yaklaşık 8 kat daha hızlı, çünkü yanıtlar o kadar küçük ki yalnızca gecikme önemlidir (yalnızca "304" yanıtları).
İdeal olarak, tarayıcılarda, getirilen nesneler arasındaki bağlantıları canlı tutmaları ve sayfa tamamlandığında hemen bırakmaları için bazı ayarlara sahip olmamız gerektiğini söyleyebilirim. Ama maalesef bunu görmüyoruz.
Bu nedenle, ön tarafa Apache gibi genel amaçlı sunucular kurması gereken ve büyük miktarda istemciyi desteklemesi gereken bazı siteler, genellikle canlı tutma özelliğini devre dışı bırakmak zorundadır. Ve tarayıcıları bağlantı sayısını artırmaya zorlamak için, indirmelerin paralelleştirilebilmesi için birden çok alan adı kullanırlar. Bu özellikle yoğun SSL kullanan sitelerde sorunludur, çünkü ek bir gidiş dönüş olduğu için bağlantı kurulumu daha da yüksektir.
Günümüzde daha sık gözlemlenen şey, bu tür sitelerin on ila yüzbinlerce eşzamanlı bağlantıyla ilgili hiçbir problemi olmayan haproxy veya nginx gibi hafif ön uçlar kurmayı tercih etmeleri, istemci tarafında canlı tutmayı etkinleştirmeleri ve bunu devre dışı bırakmalarıdır. Apaçi tarafı. Bu tarafta, bir bağlantı kurmanın maliyeti CPU açısından neredeyse sıfırdır ve zaman açısından hiç fark edilmez. Bu şekilde bu, her iki dünyanın da en iyisini sağlar: İstemci tarafında çok düşük zaman aşımları ile canlı tutma nedeniyle düşük gecikme ve sunucu tarafında düşük bağlantı sayısı. Herkes mutlu :-)
Bazı ticari ürünler, ön yük dengeleyici ile sunucu arasındaki bağlantıları yeniden kullanarak ve tüm istemci bağlantılarını bunlar üzerinden çoklayarak bunu daha da iyileştirir. Sunucular LB'ye yakın olduğunda, kazanç önceki çözümden çok daha yüksek değildir, ancak birden çok kullanıcı arasında beklenmedik bir bağlantı paylaşımı nedeniyle kullanıcılar arasında oturum geçişi riski olmadığından emin olmak için genellikle uygulamada uyarlamalar gerektirir. . Teoride bu asla olmamalı. Gerçek çok farklı :-)