Włączyć KeepAlive czy nie?

9

Jaki jest konsensus w sprawie KeepAlive w witrynie Magento o dużym natężeniu ruchu? Wydaje się, że większość ludzi zaleca, aby go włączyć, ale potem Magento stwierdza, że ​​należy to pominąć w maksymalizacji wydajności i skalowalności dzięki Magento Enterprise Edition.

„Gdy serwer sieciowy jest obciążony, utrzymywanie trwałych połączeń staje się niekorzystne, dlatego dyrektywa KeepAlive powinna być zawsze wyłączona”

Myśli?

Jeremy Miller
źródło

Odpowiedzi:

4

Świetne pytanie!

Tradycyjnie KeepAlive było dobrą rzeczą, ponieważ znacznie zmniejsza obciążenie TCP całego ładowania strony, gdzie wiele żądań (takich jak wszystkie obrazy, css, js) jest obsługiwanych z jednego serwera. Jeśli strona ma 85 zasobów, oznacza to 85 dodatkowych potrójnych uzgodnień TCP, a opóźnienie się sumuje. Wiele lat temu przy wolniejszych połączeniach internetowych było to o wiele ważniejsze niż obecnie, choć nadal jest dość istotne dla przeglądarek mobilnych lub połączeń wolno / o wysokim opóźnieniu.

Wspomniany tutaj wpływ dotyczy jednak czasu, przez jaki połączenia TCP są utrzymywane otwarte, oraz tego, czy może to szybko wyczerpać procesy potomne Apache. Większość domyślnych ustawień, które widziałem to:

KeepAliveTimeOut 15
MaxClients 256

Oznacza to, że gdybym miał 256 różnych przeglądarek żądających treści w ciągu tych samych 15 sekund, wówczas 257. klient musiałby czekać na zerwanie połączeń. Nie dobrze - wcale nie jest to szczególnie duży ruch, więc wyjaśnia tę radę. Może to również doprowadzić do zwiększenia liczby klientów MaxClients, co może pochłonąć dużo pamięci. Kiedy korzystam z KeepAlives, zazwyczaj ustawiam KeepAliveTimeout na 2 lub 3 sekundy; to czas bezczynności między żądaniami, a nie cały czas dla wszystkich żądań.

Jeśli korzystasz z KeepAlive, istnieje zachowanie równowagi między KeepAliveTimeout, MaxClients i zasobami serwera. Aby temu zaradzić, „usługa httpd / apache2 fullstatus” pokaże liczbę połączeń używanych przez KeepAlives w danym momencie - oznaczone dużą literą „K”.

Jednak w przypadku Magento nie sądzę, że potrzebujesz KeepAlives.

To, co powinieneś zrobić, jeśli masz witrynę Enterprise o dużym natężeniu ruchu, używa CDN do zawartości statycznej.

Jeśli sprzedajesz w wielu krajach, korzystanie z sieci CDN nie tylko przyspieszy ogólne ładowanie stron dla klientów (co jest dobre), ale znacznie zmniejszy przepustowość przychodzącą na twój serwer. Ustawienia w System> Config> Web> [Un] secure sprawiają, że integracja dowolnego CDN dla multimediów, skórki i JavaScript jest naprawdę banalna. Będzie to większość rzeczywistych żądań HTTP, a jako bonus można użyć różnych rekordów DNS do równoległego pobierania plików między nazwami hostów. Jeśli robisz to dobrze, żądania te prawie nie dotkną twojego serwera, więc nie ma już żadnej rzeczywistej potrzebydla KeepAlive. W takim przypadku powinieneś wyłączyć KA; nie chcemy utrzymywać połączenia na żywo, gdy wiemy, że reszta treści jest udostępniana z innego miejsca. Jeśli potrzebujesz niezależnej rekomendacji CDN: CloudFlare jest fantastyczny, a nawet dostajesz SSL wrzucony z bezpłatnym pakietem.

Podczas korzystania z CDN jak ten lub jeśli używasz innego rodzaju odwrotnego proxy (takiego jak Varnish), twoje HTTP KeepAlives Apache jest w zasadzie nieistotne.

Podsumowując, zgadzam się, że prawdopodobnie powinieneś wyłączyć KeepAlive, aby uniknąć nasycania procesów Apache pod obciążeniem, ale zdecydowanie użyj CDN lub innego odwrotnego proxy dla zasobów, aby utrzymać ładowanie strony tak szybko, jak to możliwe.

Will Parsons
źródło
1
Keepalives są nadal aktualne podczas pobierania źródła z CDN. Włączania / wyłączania nie należy lekceważyć i należy je dokładnie przetestować. Opowiadałbym się za zmniejszaniem liczby żądań, zmniejszaniem zasobów, a nawet rozważaniem CDN - źle skonfigurowane, mogą z łatwością spowolnić sklepy niż szybciej.
Ben Lessani - Sonassi
Jak ustawić ten lokalny system utrzymywania aktywności dla serwera XAMPP?
bhavin thummar