Black Friday - TECHNICKÝ sprievodca prežitím - 1. časť - Lak
Tento článok je súčasťou série 3 článkov, ktoré majú internetovým obchodom pomôcť prekonať Čierny piatok.
- toto je prvá časť
- V časti 2 sme hovorili o sieťach CDN
- V budúcom článku si povieme o „paralelizácii“, teda o použití viacerých serverov súčasne.
Čierny piatok je už v Rumunsku veľkou udalosťou. Hovoríme to nielen my v priemysle, je to vidieť na celej tlači. Ak majú ľudia v marketingu a predaji dôvod na radosť, určite sú to ľudia z technických oddelení stresaИ> i udalosti. Boli sme.
Tento rok servery Avanticart bežali takmer dokonale 1, bez výpadkov a veľmi dobrých časov odozvy (zvyčajne menej ako 500 milisekúnd). NIE Nevynašiel som nič nové. Proste som veľa čítal, experimentoval a dával dokopy rôzne technológie.
Rovnako, ako nám pomohlo to, čo napísali ostatní, aj my chceme niečo vrátiť. Veríme, že iba zdieľaním toho, čo sme sa dozvedeli, sa môžeme všetci posunúť vpred. Prostredníctvom tohto článku chceme pomôcť vývojárom a komunite eCommerce v Rumunsku prekonať nadchádzajúce Čierne piatky.
Dobre, nechajte príbeh a povedzte mi, čo ste urobili
Stručne povedané, k hladkému priebehu vecí viedli 3 veci:
- Lak - silná keška
- CDN pre obrázky a css/javascript
- Zdieľanie požiadaviek na viacerých serveroch
Ak ste majiteľom obchodu na začiatku cesty, nestresujte svojho programátora všetkým vyššie uvedeným. Nie všetky 3 sú prístupné v akomkoľvek obchode. Bod 2 je asi dosť.
Dobre, zoberme si každú zvlášť. Začnime s Lakom, pretože to je pravdepodobne ten, kto „zachránil“ situáciu v Avanticarte. V prípade CDN a používania ďalších serverov sa čoskoro vrátime s článkami.
Lak
Na rozdiel od „normálneho“ blogu alebo webu je oveľa ťažšie ukladať do vyrovnávacej pamäte online obchod. Prečo? Dva hlavné dôvody:
- pretože nemôžete uložiť do košíka svoj nákupný košík. Odkazujeme na tento kúsok stránky:
- pretože zásoby musia pracovať v reálnom čase
Pravdepodobne vaša platforma už má predvolene zahrnutý modul medzipamäte (vyrovnávacia pamäť môže byť vykonaná na niekoľkých úrovniach), ale zaručujeme, že Lak nič neprekoná. Tu je tip: vyhľadajte lakový doplnok pre svoju platformu. Aj keď to stojí (samotný plugin + implementácia), uvidíte, že to stojí za to. Nie je to iba Čierny piatok. Prečo nechcete, aby doba odozvy 100 ms po celý rok?
Prečo je lak taký hlasný?
Lak funguje ako webový server a je prvým bodom interakcie s návštevníkom. V podstate lakujte pred Apache/Nginx alebo akýmkoľvek webovým serverom, ktorý používate, a ukladá všetko, čo chytí. Veľmi málo aplikácií tak nakoniec spotrebuje zdroje (databázové pripojenia atď.).
Po inštalácii Varnish beží na porte 6081. Štandardne ho musíte zmeniť na port 80, inak stratíte všetku zábavu. Ak to chcete urobiť, musíte upraviť súbor/etc/default/varnish. Používame Debian, pre CentOS alebo iné distribúcie sa konfigurácia môže líšiť.
V súbore vyššie nájdete riadok ako:
Tu musíte zmeniť z -a: 6081 na -a: 80. Bolo by tiež užitočné nastaviť TTL pomocou parametra -t. Preto sa tento riadok stáva niečím ako:
Dobre, teraz, keď sme zmenili port vo Varnish, budeme musieť zmeniť port aj na webovom serveri. Používame Apache, takže upravujeme súbor /etc/apache2/ports.conf. Riadok Listen 80 meníme na Listen 8080. Teoreticky to stačí, ale záleží to na tom, ako si nastavíte Virtual Hosts. Reštartujme Apache a potom Vanish.
Zatiaľ to bolo jednoduché, ale ešte to nie je pripravené. Lak beží, ale s najväčšou pravdepodobnosťou nič neuchováva. Ako viete, či chcete alebo nechcete ukladať do medzipamäte? Obnovte stránku 2-3 krát. Potom vyhľadajte nástroje Firebug/Developer.

Hlavička Age s najväčšou pravdepodobnosťou ukazuje nulu. Znamenie, že neexistuje vyrovnávacia pamäť.
Problémy so stravou?
Niečo dôležité vedieť: Lak má problém s koláčmi. Ak odosiela súbory cookie, stránku nebude ukladať do medzipamäte. Rovnako nebude do pamäte cache, ak server pošle hlavičku Cache-Control s hodnotou bez pamäte cache. Pozrime sa, ako tieto problémy vyriešime.
Program Avanticart je napísaný v jazyku PHP, podobne ako väčšina riešení elektronického obchodu s otvoreným zdrojom (alebo proprietárnych) dostupných na trhu. Ak je váš obchod napísaný v inom jazyku, sme si istí, že podobné riešenia nájdete.
V predvolenom nastavení pošle PHP pri spustení relácie hlavičku Cache-Control. V nástrojoch Firebug/Developer môžete vidieť niečo ako:
Ak sa ho chcete zbaviť, stačí zavolať session_cache_limiter (''); Pred session_start (); . Pri pridávaní tohto kódu buďte opatrní. Ak používate platformu otvoreného zdroja, budete mať problémy s budúcou aktualizáciou, ak zmeníte zdrojový kód priamo. Môžete napísať doplnok alebo nájsť nastavenie.
Teraz, keď je tento problém vyriešený, pozrime sa, ako to vyriešime pomocou súborov cookie. Na stránke Rýchlo som našiel zaujímavé podrobnosti. V zásade sa robí rad trikov, ako cookies vymazať a vrátiť ich späť vo forme hlavičky. Súbor /etc/varnish/default.vcl je potrebné upraviť, aby sa zobrazilo niečo ako:
Myslíme si, že komentárov v kóde je dosť, ale všimnime si, že hľadáme session cookie s názvom APP_SESSID_ (niečo). Tu budete musieť zmeniť názov súboru cookie na svojej platforme.
Ďalšou dôležitou vecou je, že prvá požiadavka návštevníka dorazí do obchodu vždy bez ukladania do pamäte cache. To sa deje za účelom prijatia cookie relácie.
V porovnaní s verziou navrhovanou Fastly sme pridali túto časť navyše:
To znamená, že nechceme byť ukladaní do medzipamäte, ak je návštevník na stránke platby, na stránke účtu alebo ak je požiadavka na súbory .php (zvyčajne to vyžaduje Ajax, pretože väčšina adries URL je SEO-friendly, takže to nekončí .php). Určite máte stránky, ktoré by sa nemali ukladať do medzipamäte. Musíte ich identifikovať a zodpovedajúcim spôsobom upraviť súbor.
Po opätovnom spustení laku a zadaní 2 - 3 žiadostí by sa mala v nástrojoch Firebug/Developer zobraziť hlavička nenulového veku.
Ak sa sem dostanete a zbavíte sa problémov s diétou, gratulujeme, váš lak môže tučnieť (vytvára bruško - prepáč - keška). Ak hlavička Age stále zobrazuje nulu, znamená to, že niečo nie je v poriadku. Pred pokračovaním musíte tento problém vyriešiť.
Kto jedol koláče?
Dobre, teraz sa vytvára medzipamäť, ale súbory cookie napriek tomu nekončia v aplikácii obchodu. Na to musíme vygenerovať premennú $ _COOKIE z hlavičky nastavenej Varnishom.
A vytvoril som túto funkciu:
Opäť buďte opatrní, kde túto funkciu píšete/voláte, aby ste sa vyhli problémom s budúcou aktualizáciou.
Kôš, ako pri koši?
Super. Máme cache, máme cookies. Zostáva iba jeden problém: uloží sa do pamäti celá stránka vrátane časti kódu, ktorá ukazuje, koľko produktov máte v nákupnom košíku.
Na otestovanie môžete otvoriť nové okno prehliadača súkromne/inkognito. Pri druhom obnovení (prvý sa nikdy do vyrovnávacej pamäte nedostane, pamätáte?) V prvom prehliadači uvidíte košík.
Lak nám poskytuje špeciálnu značku, ktorú môžeme vložiť na stránku. Takže ak máme nákupný košík, môžeme zadať kód ako:
Keď Varnish uvidí tento kód na stránke, urobí požiadavku na pozadí do súboru /esi_shopping_cart.php, vezme výsledok a znova zostaví stránku, a to všetko bez toho, aby to návštevník vedel.
Nevkladáme sem kód z /esi_shopping_cart.php, pretože implementácia sa líši od platformy k platforme, ale pre niektoré premenné relácie to môže byť jednoduchá ozvena.
Aby ESI fungovalo, musíte si všimnúť, že pod vcl_fetch vložím sadu riadkov beresp.do_esi = true; .
Dobre, všetko ide perfektne, takže je čas dostať pivo z chladu, nie? Neponáhľajte sa, zatiaľ to bola ľahká časť.
Táto vyrovnávacia pamäť musí byť vymazaná. Jednoduchou metódou je pri vykonaní akýchkoľvek zmien v obchode vyčistiť celú vyrovnávaciu pamäť. To by v bežný deň nebol problém, ale tu hovoríme o čiernom piatku. Ak začnete vyčistiť každý cache pre každý príkaz, aby ste obnovili sklad, budete mať problém. V ideálnom prípade by ste mali vyčistiť medzipamäť iba pre produkt, ktorého zásoby sa zmenili, a prípadne pre stránku s kategóriami pre tento produkt.
Ak chcete vyčistiť vyrovnávaciu pamäť, musíte urobiť nejaké špeciálne požiadavky (PURGE/BAN namiesto GET/POST) na Lak. Tieto žiadosti je možné podať niekoľkými spôsobmi a ďalšie podrobnosti nájdete v dokumentácii. Najradšej používame BAN.
Pretože v spoločnosti Avanticart máme viac obchodov na rovnakom serveri, musíme vedieť, z ktorého obchodu chceme vymazať jeho vyrovnávaciu pamäť. Preto používame niekoľko ďalších hlavičiek (X-Ban-Host a X-Ban-Url). Musíme pridať /etc/varnish/default.vcl, aby sme pridali podporu pre mazanie + nastavenie hlavičky.
Pretože tieto požiadavky môžu prichádzať odkiaľkoľvek, radšej by sme nemali nechať nikomu vyčistiť jeho vyrovnávaciu pamäť. Tento riadok pridáme na začiatok súboru:
Potom upravíme funkciu vcl_recv takto:
Upravíme funkciu vcl_fetch a pridáme špeciálne hlavičky:
A teraz reštartujeme Vanish, aby sme mohli využiť zmeny.
Tu máte funkciu PHP, ktorá sa stará o mazanie:
Kedy a kde túto funkciu použijete, je samozrejme veľmi dôležité a môže mať vplyv na výkon. Pre $ url možno uviesť regulárne výrazy. Aby sme teda vyčistili všetku cache, môžeme zavolať clearVarnishCache ($ host, '. *');
Teraz je to naozaj pripravené. Ak si myslíte, že nám niečo chýbalo, nechajte nám komentár. A ak chcete dostávať ďalšie články o sieťach CDN a viacerých serveroch, prihláste sa na odber.
jedného zákazníka ovplyvnilo nesprávne nastavenie, ktoré viedlo k podivnému správaniu nákupného košíka (Emilian, znova sa ospravedlňujeme).