it-swarm-eu.dev

Skutečné světové zkušenosti s škálováním a laděním výkonu

Web, na kterém pracuji, má údajně brzy po spuštění obrovskou míru úspěšnosti . Klient hovoří o možnosti přibližně 2500 zásahů za sekundu za den.

Při ignorování skutečnosti, že tato míra úspěšnosti je pravděpodobně divoký optimismus klientů, a kromě získání největších možných serverů, jaký je nejlepší způsob, jak Drupal) nakonfigurovat tak, aby podporoval vysokou míru úspěšnosti.

Četl jsem Scaling the drupal.org Infrastructure , Blog o výkonu Drupal , Osvědčené postupy pro škálování Drupal a mnoho dalších stránek, ale co jsem Hledám skutečnou zkušenost s tím, co funguje, co ne, a co lze očekávat.

54
Richard Harrison

Markdorisonova odpověď je v podstatě akceptovanou metodou útoku na tento problém. Vezmu si to trochu dále.

Když máte Pressflow pro D6 nebo Drupal pro D7, Memcached a Varnish všichni pracují pěkně spolu, budete si muset upravit svůj kód - VCL soubor. Jsou k dispozici bezplatné soubory, které vytvářejí výchozí body, ale vždy s nimi musíte hrát.

Chcete-li, aby Varnish pracoval optimálně, ujistěte se, že jej spouštíte spíše s -s ​​malloc xG než s výchozím souborem -s/cesta/k/souboru. S programem Varnish také máte možnost malovat mezipaměti statických položek tak dlouho, jak jen můžete.

Pokud máte více než jeden webový server, odeberte ETag ze záhlaví zaslaného společnosti Varnish ve VCL. Také odstraním Expires a jednoduše se spoléhám na věk a maximální věk v záhlaví, takže si prohlížeče vraťte zpět na web.

Verze 1.5 (od 3. března 2011) je stále nejrychlejší verzí Memcached modulu z Drupal.org. Obvykle jej nasazuji pomocí jediného zásobníku na server, aby se snížil provoz tcp pro připojení k více zásobníkům ve velkém měřítku)

Nakonfigurujte mezipaměť v části Výkon na externí a nastavte maximální věk, který odešle správné záhlaví do mezipaměti proxy, jako je například Lak.

Pokud nemůžete přimět určité stránky ke správnému ukládání do mezipaměti v programu Varnish, podívejte se na blogové příspěvky na webu, které podrobně popisují, jak požadavky prohlédnout. Zde je příklad příspěvku, který jsem napsal před chvílí: Co zastavuje Varnish a Drupal Pressflow z ukládání do mezipaměti zobrazení anonymních uživatelů

Pro MySQL byste měli vybrat InnoDB (nebo jedno z dalších jmen od jiných poskytovatelů, jako je XtraDB) a přesunout do něj všechny tabulky. Pak si prohlédněte tento blogový příspěvek, kde najdete základní rady pro ladění http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/

Zásadní význam má velký fond vyrovnávacích pamětí. Při testování zatížení webu zapněte protokol pomalých dotazů. Pravděpodobně budete chtít nejprve zachytit dotazy, které trvají déle než 50 ms, a pak je vyladit a opakovaně zkrátit dobu zaznamenávání pomalého záznamu, dokud nebudete mít většinu dotazů spuštěných pomocí indexů a provedete poměrně rychle.

Další základy zahrnují APC in pro PHP. Pokud se rozhodnete pro rychlý CGI, spíše než mod_php, trávíte nějaký čas pokusem o to, aby APC cache sdílel napříč instancemi php konfigurací dobrého wrapper skriptu. Také se ujistěte, že mezipaměť APC je v souboru mapovaném na paměť, aby se vytlačil každý poslední bit z PHP.

47

Doporučuji začít s Pressflow (pokud používáte Drupal 6), Memcache , Varnish a nějakým formulářem sítě pro distribuci obsahu (CDN), jako je Akamai. Konečným výsledkem by mělo být, že co nejméně z těchto uživatelů skutečně zasáhne váš původní server.

Pokud máte části stránky, které nemůžete ukládat do mezipaměti pro neanonymní uživatele (věci specifické pro tohoto uživatele, „Welcome userX“ atd.), Můžete prozkoumat možnosti naplnění těchto částí stránky, jako jsou asynchronní zpětná volání nebo Edge strana zahrnuje.

Pokud máte menší skupinu interních uživatelů (například skupinu editorů), kteří musí mít možnost zobrazit uncached verzi webu, doporučuji vystavit uncached verzi vašeho webu na jiné URL (chráněné za VPN) nebo ekvivalentní, pokud je to možné).

23
markdorison

2500 přístupů za sekundu za den - pokud se výrazem „zásah“ myslí „doručená stránka“, pak je to 216 milionů stránek denně. Řeknu vám to: nemáte 216 milionů stránek denně. Miluji tyto klienty ...

To znamená, že nezpracovaná provozní data nic neříká. Přestože rady v tomto vlákně zní o Varnish/CDN, pokud máte pouze anonymní provoz, ale pokud jste se přihlásili, čelíte výzvě. Ale než strávíte bezohledné množství času a úsilí k vyřešení problému, ujistěte se, že máte mít problém. 2500 zásahů za sekundu, bing dostane méně, než si to uvědomujete, že?

16
user49
  • Strana serveru

    • Nainstalujte Varnish pro ukládání stránek do mezipaměti pro anonymní uživatele.
    • Nainstalujte systém trvalé mezipaměti (Memcached, APC, Memcache).
    • K poskytování statických souborů (JavaScript, CSS, obrázky) použijte CDN, jako je Akamai.
  • strana kódu

    • Použijte Pressflow, umožňuje společnosti Varnish zobrazovat stránku v mezipaměti pro anonymní uživatele.
    • Vyčistěte stůl hlídacího psa Drupalu. Pokaždé, když je zaznamenána chyba hlídacího psa, spotřebovává prostředky CPU na webovém serveru a databázovém serveru. Výrazně také zvyšuje dobu načítání.
    • Implementujte strategie statická a trvalá mezipaměť , dokud se protokol pomalého dotazu neobjeví čistý.
    • Vyhněte se PHP chybám, které se vyskytují v vnořených smyčkách foreach za každou cenu).
    • Odinstalujte nepoužívané moduly.
    • Zapněte ukládání do mezipaměti pro Drupal základní bloky a pohledy).
  • Databáze

    • Ujistěte se, že jsou tabulky správně indexovány pro rychlejší vyhledávání.
    • Neukládejte nepotřebné záznamy, ke 100 uzlové databázi bude vždy přistupováno rychleji než 3 miliony uzlových databází.
7
amateur barista

Také bych poslouchal tento podcast Lullabot o způsobu, jakým zřídili web Grammys.com pro dopravní explozi během týdne. Bylo to docela poučné vysvětlení.

http://www.lullabot.com/podcasts/podcast-92-grammycom

6
Randy Burgess

U webových stránek s vysokým provozem byste měli používat více serverů a vyvažovač zatížení nebo použít jednoduše CDN. Je také velmi důležité co nejvíce ukládat do mezipaměti, aby se minimalizovalo zatížení webových serverů.

Použití sítě pro doručování obsahu ( CDN ) pomáhá rozložit zdroje na několik domén (sharding domén), což snižuje zatížení webového serveru.

Použití CDN pomáhá s distribuovaným ukládáním do mezipaměti a vzdálenou akcelerací, také pomáhá zmírňovat útoky DDoS , kvůli více koncovým bodům. Pomáhá to se zabezpečením, protože obsah v mezipaměti je těžší využít.

Příklad poskytovatelů: rychle , Rackspace , Akamai , Azure, CloudFlare, Amazon, MaxCDN, Verizon.

Zde je několik dalších návrhů:

  • U CDN použijte domény bez kuchařství pro ukládání statických komponent do mezipaměti (jako sstatic.net ). Protože někteří proxy servery mohou odmítnout mezipaměť komponenty, které jsou vyžadovány pomocí cookies.
  • Po vyčištění mezipaměti zahřejte mezipaměti (pomocí wget, Cache Warmer , Drush ECL )).
  • Použijte sledování výkonu (např. New Relic nebo Yottaa , které mají integraci pro Drupal).
  • Použijte monitorovací nástroj pro svůj web (např. Nagios).
  • Nainstalujte Varnish a Varnish HTTP Accelerator Integration module , pak nakonfigurujte .
  • Varnish + Authcache: Zaškrtněte toto Příklad VCL pro Authcache Konfigurační soubor laku.
  • Zvažte Libra nebo NGINX před Lakem. Viz: Proč je Libra úžasná před Lakem .
  • NGINX může fungovat jako reverzní proxy a vyrovnávač zatížení, takže může nahradit Libru a Lak.
  • Zvažte komerční verzi Varnish nebo NGINX, abyste mohli využívat funkce, které nejsou dostupné ve „open source“ komunitní verzi.
  • Zvažte nahrazení Varnish a Pound hardwarovým loadbalancer/cachingem (např. BIG-IP F5 ).
  • Použijte nástroje jako ab, JMeter pro TTFB , zátěžové a zátěžové testování ve vaší webové aplikaci.

Vaše webová architektura z pohledu uživatele tedy může vypadat takto:

  1. Uživatel (ukládání do mezipaměti místního prohlížeče).
  2. NGINX nebo Libra + lak (vyrovnávač zatížení, reverzní proxy jako akcelerátor HTTP).
  3. Apache (webový server).
  4. PHP-FPM (PHP FastCGI Process Manager).
  5. MariaDB (databáze).

Pro Drupal návrh na optimalizaci) zkontrolujte: Jak vylepšíte Drupal výkon?

4
kenorb

I když je velmi obtížné předpovídat vzorce, máte-li spravedlivou představu o úrovni provozu. Načtěte test svého řešení. Existuje celá řada různých možností a mnoho nebude možné předvídat, dokud nebudete mít živý provoz, ale pokud načtete test co nejvíce, budete mít alespoň určitou míru jistoty, že vaše nastavení zvládne provoz.

Veškeré ladění na světě nepomůže, pokud jej nejprve nezkoušíte.

Toto byla prezentace na DC SF o tom, jak to ekonom provedl. http://sf2010.drupal.org/conference/sessions/performance-testing-economist-online-) using-grinder

4
Jeremy French

Povolit dvě rozšíření:

  • Zend OPcache
  • wincache

Váš výkon bude fungovat lépe.

Pokud hledáte twig Zend OPcache a Wincache v Microsoft Azure, nejprve vytvořte název složky ‘ini’ pod ‘D:\home\site\ '. Také vytvořte 2 soubory, ‘.user.ini' a 'settings.ini '

Přidejte do každého souboru následující konfiguraci:

. user.ini

[PHP]
post_max_size = 32M
memory_limit = 512M
zend.enable_gc = On
upload_max_filesize = 32M
opcache.enable=1

setting.ini

wincache.ocenabled = 1
wincache.ocachesize = 255

Do webové aplikace přidejte také nastavení aplikace pomocí klávesy PHP_INI_SCAN_DIR a hodnota d:\home\site\ini

Po změně PHP_INI_SYSTEM restartujte webovou aplikaci. Pokud se chcete dozvědět více o konfiguraci twiggingu, zkontrolujte dokumentace společnosti Microsoft .

Po výše uvedeném nastavení se můj web Drupal (Drupal 8.3)) načte do 3 sekund.

1
npcoder

Můžete také prozkoumat přerozdělení zátěže na více serverů s pomocí řešení založeného na DNS nebo vyvažování zátěže softwaru/hardwaru. To by také pečelo v toleranci chyb.

0
James Stallings