Eshopová škatulata aneb naše zázemí

Posted 12. 02. 2010 / By Petr Soukup / Simplia

Sliboval jsem, že někdy lehce odkryju, jak je Simplia (hlavně eshopy) vymyšlena po technické stránce. Zavádíme teď nový server, součástí čehož jsou drobná vylepšení, takže to mám v živé paměti a můžu vám lehce popsat jak fungujeme. Nečekejte ale nic konkrétního. Nepovím vám, kolik máme serverů, ani na jaké konfiguraci a podobně. Už takhle tu dávám solidní návod, jak postavit kvalitně zázemí :)

Upozorňuji, že tu asi místy zmíním naprosté samozřejmosti, ale tento blog čtou i čistě podnikatelé bez technických znalostí, tak rozšíříme obzory :)

Jaké jsou možnosti?

Sdílený hosting

Je třeba se spoléhat na třetí stranu, doufat, že někdo ze sousedů server neshodí a celkově je to pro větší projekt dost špatné řešení. Na druhou stranu velmi levné

VPS

Virtuální server – existuje jeden skutečný server a ten je je rozdělen na několik virtuálních serverů, které jsou pronajímány. V poslední době se tento způsob dost rozmáhá, ale není to moc dobrá volba. Možná dočasně, ale dlouhodobě určitě ne.

Managed server

Dostanete od hostingu vyhrazený server a domény si spravujete přes administraci. Poměrně jednoduché, všechny starosti jsou outsorcované, ale pro nás moc svazující.

Housing

Pronájem jen místa v serverovně a přípojky. Server vlastní. A to je konečně náš případ :)

Už od začátku jsme se vrhli do vlastního řešení. Vlastní servery, vlastní systém. Dokonce máme kolegu, který se stará jen o to, aby všechny běžely, byly zabezpečené, nevytížené, … Poslední dobou mám skoro dojem, že jen sedí s nohama nahoře a kouká na barevné grafy :)

“Takže nemáte jen jeden server?”

Ne. Jsou vlastně dvě možnosti, jak k housingu přistoupit.

a) Koupit si velký nabušený server za milion a na něm mít všechno. (Případně si koupit normální server a na něm mít všechno, ale to už není úplně správně :o))

b) Mít více normálních serverů

Když jsme začínali, tak jsme šli druhou cestou. Jednak proto, že jsme neměli milion na server, který by větráčkem sfouknul prasátkům všechny tři domečky a druhak proto, že mi tenkrát přišlo lepší mít radši více serverů a tudíž možnost záložních kapacit i při velkých problémech.

Líbí se mi ta možnost v případě problému přesunout provoz z jednoho serveru na jiný (resp ho rozložit mezi více) a zatím vyřešit problém. Ale o tom dále.

Disky

Kupříkladu disky jsou všechny zrcadlené v RAIDu – místo aby byl v serveru jeden disk, tak jsou dva (nebo více) a jsou datově identické. Pokud se zapíše změna, tak se zapíše na všechny. Pokud se čte, tak se střídají (případně se čte z každého něco jiného). Obrovskou výhodou je, že pokud jeden disk odejde do křemíkového nebe (což se stává), tak to příliš nevadí, protože data zůstávají funkční. Návštěvník na eshopu ani nepozná, že disk vypadl. Možná se mu stránka místo 0,21s bude načítat 0,3s, ale pořád je to lepší, než když eshop vypadne úplně. Pak stačí přijít k serveru, špatný disk vytáhnout, vložit nový a ten si stáhne zase kopii dat a jede se dál. V praxi se to spíš dělá tak, že se nejdřív přesune alespoň část provozu jinam. Je to stejná logika, jako když píchnete auto a jedete na rezervě. Taky se pak vyhýbáte každé díře, protože druhou rezervu už nemáte :)

Kromě toho, že jsou zrcadlené, tak jich je v serveru více. Na jednom poli běží jen ostré verze eshopů, na dalším je systém, na dalším jen zálohy, …

RAID má ještě jednu sympatickou výhodu. Po půlroce můžete přijít k serveru, jeden disk odpojit a nahradit ho novým – tzn. průběžně je obměňovat.

Disková pole jsou i hostingů samozřejmost. Alespoň jsem si to myslel. Tento týden mě ale jeden poskytovatel opět přesvědčil, že to až tak samozřejmé není. Poznáte, do koho rýpu? :)

Správa serverů

Když máte server jeden, není až takový problém ho spravovat. Zapnete konzoli, vše si upravíte. Případně si na to uděláte nějaký skriptík. Ale aplikujte si to pří více serverech :)

V začátku jsme zkoušeli různá hotová řešení – cPanel, Plesk, … Ale nic neodpovídalo našim požadavkům. Takže máme vyrobený vlastní systém. Z mého pohledu vypadá tak, že si otevřu náš IS a tam mám hezky pohromadě s ostatním grafíky vytížení, správu domén, emailů, … a to vše hezky z jednoho místa. Pokud jde o eshopy, tak mi je při správě úplně jedno, který je na kterém serveru. Je to navrženo tak, že systém pozná, kde má změnu provést.

Na všechno jsou ale hlavně klikátka. Nemusím lézt do FTP účtů, vybírat jaký server chci spravovat, nastavovat cesty a podobně. Jen vlezu do eshopu, kliknu, že chci vytvořit FTP účet. Když se pak přesune eshop, přesune se i FTP :) Ono se FTP ani na nic jiného než přístup k šabloně pro klienty nepoužívá.

Balancování

Aby byly servery rovnoměrně zatížené, tak se musí správně rozdělit eshopy. K tomu používáme především dva grafy – absolutní návštěvnost (resp hits) a denní/hodinovou zátěž. Každý eshop má špičky v jiných časech a jiných dnech v týdnu. Zajímavé třeba je, že sexshop a kočárky mají hodinové návštěvnosti (procentuálně) prakticky stejné :) Vybírají se tedy eshopy, které složením grafů vytvoří rovnou čáru.

Ale časté převody domén způsobují výpadky eshopů, že? Není pravda. Díky tomu jak je systém nastaven by bylo teoreticky možné přehazovat eshopy mezi servery v poledne. Nikdo by nic nepoznal. V praxi se to ale stejně radši dělá v noci. Přesun teď vypadá tak, že v našem IS kliknu, že chci eshop přesunout jinam a on se přesune :)

Z toho plyne i důsledek, který jsem zmínil výše. Pokud by měl být nějaký problém, je možné velmi rychle přesunout veškerý provoz jinam.

Zálohování

Dříve jsme měli zálohy nastavené tak, že probíhali non-stop a postupně zálohovaly všechno a když dojely na konec, tak se jelo znova. Eshopy měli proto zálohu v průměru z každých 15ti minut. Teď jsme systém ale ještě více vylepšili a máme… no…jak to nazvat…. absolutní zálohy! Sedla si k počítači vaše ratolest a podařilo se jí smazat půlku katalogu? Není problém. Obnovíme eshop ze zálohy v 15 hodin 32 minut a 17 sekund.

Zálohy samozřejmě slouží primárně pro různé živelné katastrofy a ne pro obnovy uživatelských omylů. Ale pokud je klient milý a příjemný, tak mu v zálohách najdeme co potřebuje.

Zálohy se navíc ještě zálohují mezi servery. V důsledku to znamená, že pokud na jeden spadne meteorit, tak je možné během chvíle obnovit provoz domén na ostatních serverech a to prakticky od okamžiku pádu. Hezké, že? Každý server v sobě tedy má všechny eshopy + jejich historii.

Zatím mají historii kompletní, až se začnou moc roztahovat, tak je připraven šuplík s diskem, na který se sesypou nejstarší zálohy a archivují.

Bezpečnost?

Při takové míře zálohování se data docela naběhají, není nebezpečná takhle je vystavovat po síti? Ne. Data pobíhají po vnitřní síti v serverovně. Kromě toho používáme VPN – data tak pobíhají jen šifrovaně.

VPN je další věc, kterou bych rád zmínil. U většiny hostingů se pro nabourání musíte dostat přes nějaké silné heslo či certifikát. U nás je přidán ještě jeden prvek a sice VPN. Pokud nemáte certifikát pro připojení k VPN, tak se na serveru nepřipojíte prakticky k ničemu. Původně ale nevzniklo z bezpečnostních důvodů, ale spíše z praktických. Díky VPN máme možnost dívat se vzájemně na “locahosty”, používat sdílené síťové disky (třeba pro přístup k šablonám eshopů) a celkově je to dost pohodlné. Bezpečnostní prvek je spíš bonus.

Například editace šablon vypadá takto: otevřu si síťový disk (vpn, heslo, …) a tam mám seznam šablon všech eshopů. Kodéři mají nižší práva, tak vidí jen jejich šablony. Hezké je, že tady jsou sice všechny šablony pohromadě, ale v reálu jsou z různých serverů. Kde který je ví systém a mě to může být jedno :)

Verze eshopů

Všechny eshopy jsou ve stejné verzi. Používáme pro vývoj repozitáře Mercurial, které mají proti třeba SVN výhodu, že jsou decentralizované. Není problém mít jich několik a posílat změny kaskádově. Takže si kolega něco u sebe vyvíjí, pak to pošle do společného vývojového repozitáře, zkontroluje se kompatibilita s jinou novinkou, projde to testy a pak jde do ostrých verzí. Systém se postará, aby dostaly servery novou verzi najednou, updatovaly se, případně změnily strukturu databází apod.

S odstupem času jsem dost rád, že se nám podařilo hlavně v začátku udržet vývoj tak, aby byla jen jedna ostrá verze zdrojáků. změny v eshopech to pak výrazně zjednodušuje. A díky systému distribuce změn s tím ani není moc práce. Vlastně jen jedno kliknutí.

Přátelé, nechci se vás dotknout…

… ale kdo z vás to má? :)

Podobný princip samozřejmě není aplikovatelný všude. Kdyby například stejně zálohoval klasický hosting, tak bude každý den dokupovat další a další disky. Chtěl jsem vám je nastínit, jak jsme si to pěkně vymysleli na míru, pro naše potřeby.

A příště?

Tento článek je první z menšího seriálu, kterých bych interně nazval “Simplií chlubítka”. Postupně bych chtěl psát články popisující různé drobnosti, které máme myslím hezky vyřešené. Dnes to byly servery, příště opět něco technického a pak pár videií s popisem z administrace e-shopů. Neberte to jako chlubení, ale spíš inspiraci – co vám do teď nechybělo, ale brzo bude :) Navíc je mi jasné, že jen co tu představím některé vychytávky z adminu, tak to vzápětí bude “konkurence” nabízet taky. Pak bude vtipný závod, jestli je frekvencí novinek (které ale my máme třeba už dva roky) uštvu :o)



O blogu
Blog o provozování eshopů a technologickém zázemí.
Aktuálně řeším hlavně cloud, bezpečnost a optimalizaci rychlosti.

Rozjíždím službu pro propojení eshopů s dodavateli.