Hlavní navigace

Shoptet po letech upravuje architekturu platformy. Má lépe zvládnout DDoS útoky a neoptimální uživatelské skripty

14. 9. 2021
Doba čtení: 7 minut

Sdílet

 Autor: Shoptet
Služba nyní obsluhuje 28 tisíc e-shopů. Jaké změny museli vývojáři udělat, aby Shoptet mohl dále růst?

Poskytovatel hotových technických řešení pro e-shopy Shoptet se blíží k hranici 30 tisíc provozovaných stálých e-shopů. Firma musela v uplynulých letech vyvinout řešení, které bude schopné nejen ustát podobný provoz, ale umožnit i postupné navyšování uživatelů bez nutnosti výrazně zasahovat do architektury platformy nebo omezovat zákaznický komfort.

Podle Ondřeje Brablce, který v Shoptetu působí na pozici Director of Operations, je systém nyní navržen tak, že zvládá i skokové nárůsty zájmu zákazníků, což se prokázalo třeba během pandemie. Nyní ale firma řeší, jak architekturu posunout k ještě více funkčnímu řešení, které by lépe umožnilo zvládat situace typu skokové zvýšení zatížení serverů z důvodu DDoS útoků nebo neoptimálních uživatelských skriptů na jednotlivých e-shopech.

„V Shoptetu jsem od roku 2013 a tehdy u nás bylo přibližně tisíc e-shopů, teď jich máme 28 tisíc. Ten nárůst je, až na nějaké covidové vlny, v podstatě exponenciální, a to přibližně o tři procenta měsíčně. Vše jsme ale měli připravené na to, abychom mohli přidávat e-shopy snadno. V naší architektuře můžeme přidávat projekty po pětitisícových blocích. Takže pokud je maxima aktuální kapacity dosaženo, tak se přidají určité prvky a je možné obsluhovat dalších pět tisíc projektů. Není nutné architekturu v tom okamžiku měnit. Ale nyní, když jsme dospěli k vysokým číslům e-shopů, které máme, a množství trialů, které vznikají každý den, tak uvažujeme o změnách,“ vysvětluje Brablc.

Vše běží na Galera Clusteru

Firma eviduje dvě linie e-shopů, a to trialy, tedy zkušební e-shopy, a vedle toho produkční projekty, které představují dlouhodobě funkční online obchody. Trialy jsou zkušební verze. „Pro mě jsou zajímavější nárůsty trialů, protože jich vzniká mnohem víc než následných produkčních projektů. Maximum, kterého jsme kdy dosáhli, bylo deset tisíc nových trialů během jednoho měsíce. Z nich jen určitá část přejde úspěšně do produkce. Nárůsty byly u trialů během covidu zhruba na trojnásobku v rámci měsíce a u produkčních projektů se to dostávalo také na dvoj- až trojnásobky,“ dodává Brablc.

Základem architektury Shoptetu je MariaDB Galera Cluster. Na každém databázovém clusteru firma zvládá hostovat pět až patnáct tisíc projektů podle toho, jak jsou náročné. Většinou ale zůstává u hranice pěti tisíc projektů.

„Kromě databázových serverů je nutné posilovat i další prvky, jakou jsou například webové servery. Zde jsme právě dokončili změnu v logické architektuře, kdy jsme nahradili sdílenou vrstvu webových serverů a místo toho dedikovali web servery každému databázovému clusteru. U load balancerů terminujících HTTPS spojení nyní přecházíme na certifikáty používající ECC, abychom snížili zátěž na CPU.“

Director of Operations Shoptetu Ondřej Brablc.
Autor: Shoptet

Director of Operations Shoptetu Ondřej Brablc.

„Obecně je provoz velkého množství e-shopů, kdy každý má svoje velká specifika, hodně zajímavá disciplína. Je to v podstatě každodenní hledání anomálií a upravování provozních parametrů nebo i úprava aplikace. Například minulý týden se kolegům povedlo v konkrétním případě u Shoptet API dosáhnout 100násobného zrychlení – toho my dosáhnout úpravami architektury nemůžeme. Ale pomocí sběru a analýzy provozních dat jsme schopni tyto neefektivnosti najít.“

Během osmi let, kdy Brablc ve firmě pracuje, prý k zásadnější změně architektury muselo dojít pouze jednou, a to v roce 2016 při přechodu k novému hosting providerovi. „U původního řešení běžel Shoptet na jednom MySQL serveru, v okamžiku, kdy jsme narostli na 10 000 projektů, bylo jasné, že potřebujeme spolehlivější řešení,“ říká.

„Ve spolupráci s VShostingem jsme navrhli novou architekturu, která s několika změnami funguje do dneška. Jedna z větších změn bylo zavedení kaskádové replikace, která nám kdysi prakticky přes noc umožnila navyšovat počty projektů po tisících, dnes bychom ji už rádi nahradili za aplikační řešení, od čehož si slibujeme výhody pro případné zotavování z havárií. Další změnou vynucenou nárůstem objemu dat bylo oddělení vnitřních a hraničních load balancerů. Teď nás čeká další výrazná změna, stojíme totiž před úkolem, jak zvýšit izolovanost jednotlivých projektů. V případě, že dojde k nějakým výkonnostním problémům, potřebujeme, aby ty ostatní zůstaly nedotčeny,“ vysvětluje Brablc.

Servery zatěžují i špatně nastavené skripty u zákazníků

Izolovanost projektů je výhodná v případě, že na některém e-shopu skokově vyroste návštěvnost a hrozí tak, že jeden web zpomalí i ostatní hostované na stejném serveru. „Spravujeme 28 tisíc e-shopů na více než padesáti serverech. Není to rozhodně tak, že každý e-shop má vlastní server a máme nastavené limity pro případ příliš vysoké návštěvnosti. Ale vždycky se může stát, že dojde k nějakému problému. Nemusí to být hned kyberútok, ale často dochází třeba k ‚přátelské palbě‘. Naše e-shopy je možné snadno upravovat vlastními silami nebo s pomocí partnerů, chybka se v dnešní době může stát snadno a neúmyslně. Proti těmto věcem se někdy chrání trochu obtížněji, protože to není typický útok, proti kterému třeba brání anti-DDoS od hosting providera.“

E-shopaři se například uchylují ke znásobování dotazů. K tomu dochází, když provozovatel například ve výpisu kategorie chce ke každému produktu zobrazit více detailů, než je na stránce k dispozici. „V některých případech jsou dokonce data dostupná v dataLayeru nebo jiných datových strukturách ve stránce, ale naši zákazníci jsou zruční a nebojí se použít XHR a pro každý produkt na stránce udělat jeden webový request – tím vytvoří třeba i desetinásobnou návštěvnost svému e-shopu. Ta z pohledu měřících prvků vypadá zcela legálně a je těžké ji potom detekovat. Je to někdy mravenčí práce zjistit, co se vlastně stalo.“

„Podobné situace řešíme ve spolupráci s datovým týmem, který v Shoptetu máme zhruba rok. S pomocí nástrojů, jako je Keboola, PowerBI a Metabase, ale i Elastalert, máme k dispozici grafy a alerting, který upozorňuje na některé anomálie, a některé dokonce umí řešit. Přes tuto pomoc statistických nástrojů je ale nakonec nutné udělat konkrétní analýzu, co k ní vedlo. V některých případech dojde pouze ke komunikaci se zákazníkem přes naše oddělení podpory. Pokud se ukáže, že jde o něco, co by se dalo optimalizovat v kódu, tak z takového vylepšení následně profitují i ostatní projekty.“

Další zátěž pro servery představují například roboti mířící na zboží, kterého je v danou chvíli nedostatek. Podle Brablce ale během pandemie bylo často těžké odlišit případy, kdy nedostatkové zboží vyhledávají roboti a kdy skuteční návštěvníci. Příkladem za všechny byly třeba v určitém krizovém období nákupy roušek.

„Šlo o legální návštěvnost, nicméně jsme tam dosáhli ohromných počtů page views až v řádu milionů na jednom e-shopu za jeden den. I tady pravděpodobně přispívali roboti, ale to už bylo hrozně těžké odlišit. Záleží také na velikosti e-shopů a na sortimentu, některé mají nastavená data takovým způsobem, že se jejich stránky vydávají hrozně rychle, některé to mají složitější a tam musíme provádět nějaké optimalizace. Právě u e-shopů s rouškami bylo zajímavé, že jak byly jednoduché a měly málo produktů, tak ani velké zatížení nevyvolaly. Máme řádově desítky milionů page views dynamického obsahu denně, takže nárůst o jednotky milionů není tak úplně vidět. Ale když se na to člověk potom podívá statistickým pohledem, vidí, že došlo k nárůstu u konkrétního produktu a je nutné provést analýzu, jestli to bylo přirozené, nebo v důsledku nějaké kampaně, nebo jestli to byl robot.“

Shoptet se snaží udržovat provozní rezervu na úrovni přibližně dvou set procent běžné zátěže systému. „Rezerva je v podstatě daná dostupnou kapacitou výkonu Galera clusterů. Předpokládáme, že může dojít ke zvýšení zátěže u mnoha projektů, které sdílí stejné zdroje, a to i na desetinásobek, ale nepředpokládáme, že by došlo ke zvýšení návštěvnosti u všech projektů najednou. Vzhledem k počtu projektů a k jejich podílu na celé české e-commerce nelze ani očekávat, že by se našlo tolik návštěvníků.“

Firma nedávno oznámila, že svým zákazníkům z řad e-shopářů nově nabízí i vlastní platební bránu Shoptet Pay. Pro vývojáře tento krok představoval jistý odklon od původní architektury, ale i tak se jim podle Brablce podařilo vše sladit.

„Zatímco provoz Shoptetu je v podstatě jednoduchá záležitost – klasická webová aplikace na které pouze běží pár desítek tisíc e-shopů a která vyřizuje asi 5000 requestů za sekundu, tak nové projekty Shoptetu jsou psané pro běh v Kubernetes clusteru. To je případ existujícího Shoptet Premium projektu a nově i Shoptet Pay platební brány. A právě u Shoptet Pay projektu jsme se zatím, díky kolegům z vývoje, dostali nejdále v oblasti CI/CD. Snad se takhle daleko dostaneme i se samotnou Shoptet aplikací, kterou nyní releasujeme pouze jednou nebo dvakrát za den.“

Autor článku

Novinář a moderátor, redaktor Lupa.cz a spolupracovník Českého rozhlasu Plus. Dříve působil také v marketingu a pracoval ve státní správě.