RSHOP v kontajneri


RSHOP v kontajneri

Docker je na svete cca 5 rokov a za pomerne krátky čas sa stal extrémne populárnym. Z viacerých analýz tiež vyplýva, že trh s aplikačnými kontajnermi bude aj v najbližších rokoch rapídne rásť, táto technológia je preto veľmi perspektívna.

V RIESENIA.com sme dlhšie Docker používali primárne pre development a pre produkčný beh niektorých služieb. Začiatkom tohto roka sme sa rozhodli kontajnerizovať naše e-commerce riešenie RSHOP. V tomto texte by som priblížil ciele, ktoré sme tým chceli dosiahnuť a postup, ktorý sme zvolili.

RSHOP je e-commerce platforma vyvíjaná našou spoločnosťou, na ktorej staviame riešenia pre našich klientov. Pokiaľ vás zaujíma, ako takéto riešenie vzniká a aké môže v spojitosti s ďalšími našimi službami dosiahnuť výsledky, mrknite na case study k projektu Svet nápojov.

Rýchly teoretický úvod

Na úvod prebehneme zopár základných pojmov, ako kontajner, Docker alebo orchestrátor. Pokiaľ vám tieto pojmy nie sú neznáme, smelo preskočte na nasledujúci podnadpis.

Kontajner je abstrakciou aplikačnej vrstvy a obaľuje aplikáciu so všetkými jej závislosťami. Na rozdiel od virtualizácie, pri ktorej sa simuluje celý hardware, kontajnery zdieľajú jadro operačného systému, na ktorom bežia. Vďaka izolácii procesov sú však jeden od druhého, a takisto od samotnej infraštruktúry, kompletne oddelené. Sú teda veľmi efektívne, veľmi rýchlo sa štartujú a dajú sa jednoducho “prenášať”.

Docker je nástroj, ktorý robí prácu s kontajnermi veľmi jednoduchou. Umožňuje pochopiteľným textovým zápisom definovať tzv. images, ktoré sú predlohou pre vytvorenie kontajnerov. Kontajnery je možné ľahko vytvárať, štartovať a vypínať, pripájať na definované siete alebo k nim pripájať dátové jednotky (volumes).

Orchestrátor kontajnerov je nevyhnutný pri prevádzke v produkcii. Slúži na správu kontajnerov, zabezpečuje prideľovanie zdrojov, škálovanie, upgrade na nové verzie, dostupnosť služieb a i. Najrozšírenejšími sú Kubernetes a Docker Swarm. Pre ľahko stráviteľné intro do Kubernetes a všeobecne do kontajnerov si môžete pozrieť veselé video (aj) pre deti 🙂

Prečo sme kontajnerizovali RSHOP

Pre development je docker neoceniteľný. Akýkoľvek nástroj môžete veľmi jednoducho rozbehať a testovať na vlastnom lokálnom počítači. Na Docker Hube sa dá nájsť nekonečno predpripravených images a takisto si naň jednoducho môžete nahrať vaše vlastné a zdieľať ich s ostatnými kolegami.

Ďalšie plus je v rýchlosti nabehnutia nového kolegu do vývoja. Miesto hodín strávených rozbiehaním lokálneho vývojového prostredia mu stačí nainštalovať Docker. Naviac má všetky knižnice vo verziách, ktoré sú pre beh danej aplikácie potrebné (napr. nemusí riešiť verziu PHP a chýbajúce extensions).

Tento dôvod je významný aj pre použitie v produkcii. RSHOP beží na NGINX a PHP-FPM. K tomu zopár ďalších knižníc, cache, RabbitMQ, prípadne Elasticsearch. Na každom serveri, na ktorý nasadíme RSHOP, teda musí byť všetko nainštalované a správne nakonfigurované.

Platformu neustále vyvíjame, a s tým sú spojené nielen zmeny zdrojových kódov aplikácie. Takých prípadov je neúrekom, napríklad zmena PHP verzie, použitie Redis pre cache, NGINX cache vybraných stránok alebo optimalizácia spracovania obrázkov.

V takýchto prípadoch je potrebné okrem nasadenia zdrojových súborov meniť konfiguráciu, prípadne nainštalovať potrebné nástroje. Deployment sa tak zásadne komplikuje.

Výhodou zabalenia do kontajnera je teda aj fakt, že samotné knižnice, potrebné pre beh aplikácie, sa de-facto stávajú jej súčasťou. Na rozdiel od “klasického” scenára, keď sú nainštalované použitím package managera operačného systému a jednotlivými aplikáciami zdieľané. Výhody izolácie ani nejdem rozoberať, myslím, že sú zrejmé.

Jednou z najzásadnejších motivácií je ale škálovanie. Aj keď máme väčšinu klientov na Google Cloud Platform, kde zmenu parametrov servera jednoducho vyklikáte vo webovom rozhraní, spája sa takáto zmena aj s ďalšími nastaveniami (napr. na úrovni PHP, nehovoriac o potrebe vypnutia a zapnutia samotnej mašiny).

Kontajnerov ale môžeme vďaka orchestrátoru naštartovať požadovaný počet a v prípade potreby tento počet jednoducho zvýšiť alebo znížiť. Pokiaľ niektorý kontajner z ľubovoľného dôvodu “umrie”, naštartuje sa miesto neho nový a v prípade nárastu trafficu sa môžu ďalšie kontajnery naštartovať automaticky (a samozrejme, sa aj automaticky povypínať).

Realizácia

Momentálne pozostáva RSHOP z troch kontajnerov:

  • NGINX,
  • PHP-FPM,
  • image processing (mikro služba pre spracovanie obrázkov).

Zloženie ctí princíp, že jeden kontajner by mal slúžiť iba jednému účelu, čo zjednodušuje škálovanie, logovanie a ponúka prípadné ďalšie výhody vyplývajúce z tohto prístupu. Všetky kontajnery vychádzajú z oficiálnych repozitárov, ktoré dodržujú best practices pre stavbu kontajnerov.

K tomu je potrebných zopár služieb, ako napríklad:

  • MySQL,
  • Elasticsearch,
  • RabbitMQ,
  • Redis,
  • a ďalšie, prípadne špecifické podľa klienta.

Výhodou abstrakcie služieb je, že pre testovacie účely (alebo development) môže ísť o jednoduchý kontajner, zatiaľ čo v produkcii napr. o databázový cluster alebo externú službu.

Produkčný beh testujeme v Google Kubernetes Engine, ktorý ponúka možnosť využiť manažovanú inštaláciu Kubernetes. Google ako hlavný prispievateľ do tohto opensource projektu integruje Kubernetes v rámci Google Cloud Platform a zabezpečuje vždy aktuálnu verziu, čo nám umožňuje využiť plný potenciál platformy, bez nutnosti zdĺhavej a značne komplikovanej správy.

Next steps

Po vychytaní mušiek a vyladení testovacieho a deployment procesu budeme najnovšiu verziu RSHOP postupne nasadzovať všetkým našim klientom. Veríme, že to zásadne ovplyvní rýchlosť nabiehania nových verzií do produkcie, stabilitu a škálu možností riešenia problémov.

Poď nám pomôcť s vývojom super vecí a my ťa potiahneme vyššie!

Do nášho development tímu hľadáme posily. Poď s nami makať na vývoji TOP platformy v e-commerce a na tých najlepších e-shopoch. Ak si expert v PHP, pozri si ponuku pre Back-End Developera. Ak už máš nejaké skúsenosti, ale potrebuješ viac praxe (možno aj popri škole), vezmeme ťa medzi Junior Webdeveloperov.

 

+ Diskusia nemá žiadne príspevky