informace ze zákulisí vývoje

Migrace do Azure

14. 1. 2019 12:44
Rubrika: Pod pokličkou | Štítky: azure , cloud , migrace , novy server , server

Během prosince se udály velké změny. Možný jste si všimli několikahodinových výpadků - přemigrovali jsme na úplně nové servery.


Už během minulé zimy jsme se rozhodli, že zmigrujeme do cloudu. Cloud je výhodný v tom, že je jaksi neomezen, velikostí, výkonem, a přizpůsobí se potřebám vaší aplikace. Dále je jeho velkou výhodou to, že pořád máte vcelku zaručeno, že běžíte na nejlepším/nejnovějším hardwaru. Respektive, vy se vůbec nestaráte o to, na čem běžíte, ani to nevíte, prostě to řeší někdo za vás. To je diametrální rozdíl od naší situace před migrací, když jsme měli již několik let starý server, který bohužel něšlo upgradovat na nové linuxové jádro, protože s ním nám odmítal nabootovat. Tedy cloud.

Microsoft Azure nabízí pro neziskové organizace svůj cloud zadarmo, respektive nabízí určité množství kreditů, které v něm můžete využít. Loni to bylo $5000 za rok, bohužel to snížil na $3500. Zdá se to docela dost, ale je třeba zmínit další důležitou informaci - cloud je výrazně vždy dražší. Bohužel jsem změnu "dotace" objevil až po spuštění celé migrace, s nižším příspěvkem budeme se muset snažit v cloudu šetřit, ale nějak to snad zvládneme.

Prakticky jsem se rozhodli zmigrovat uplně celé signály.cz, tzn.: data (fotky, soubory), databázi (data, která jste na signály vložili - statusy, komentáře, blogy) a samotnou aplikace, tj. PHP appku. Migraci jsme rozdělili podobně na 3 fáze:

  1. Zmigrování dat: to zahrnovalo úpravu aplikace, aby najednou přestala používat lokální disky a začala pracovat se vzdáleným úložištěm. Toto bylo docela náročné, zejména množstvím úprav. Ty byly samy o sobě vcelku jednoduché, ale počet míst, kde signály něco ukládají na disk, tu něco na něm mění, těch je prostě dost. Některé části aplikace jsme museli dokonce přepsat, protože by jejich logika už takto dále být nemohla.
    Během této části nebylo prakticky tolik výpadků. Většina dat byla malá. Tzn. data se rychle přenesla a pak jsme nasadili změny v aplikaci. Signály.cz jsme vypli jen při přenusu velkých objemů dat - protože to trvalo dlouho a potřebovali jsme zajistit konzistenci. Tedy při migraci fotek a profilových fotek uživatelů byly signály.cz vypnuty, respektive omezena jen daná funkcionalita.
  2. Zmigrování databáze: nejtěžší část bylo zmigrování databáze. Museli jsme signály vypnout. Provést export databáze a pak ji naimportovat do vzdálené nové databáze v cloudu. Signály.cz byly tak několik hodin vypnuty.
  3. Zmigrování aplikace: jednoduchá část ponechaná nakonec se ve výsledku stala vcelku komplikovanou. Na Azure jsme zvolili Web Service for Container - jinými slovy naše aplikace běží v dockeru v Linuxovém prostředí a je docela dost managována od Azure. Jenže převést aplikaci do Dockeru také vyžadovalo trochu lazení a samozřejmě přineslo několik problémů.

Celá akce byla naplánovaná na 3 dny. Středa-pátek jsem měl dovolenou a s Přemkem Kochem jsme na s.roomu poctivě makali. Ale sotvě jsme stihli udělat tak 1. fázi a půl druhé.

Zbytek už ale ležel na mě a v následujících dnech jsem se tomu věnoval po nocích, když jsem zrovna nědělal podlahu v ložnici. Pamatnou noc jsem chtěl jít spát někdy ve dvě, ale vždy jsem to o hodinku protáhnul, a tak nakonec až o půl 8 se podařilo. Redis na session konečně běžel.


Bylo by dobré ještě nějak zhodnotit Azure:

  • UI portalu je vcelku pěkné a příjmené, ale někdy na palici. Když se něco vytváří, není to vidět a člověk musí čekat a refreshovat. U AWS je to lepší.
  • App Service for Containers je dobrá služba, která toho hodně umí.
    Zásadní neduh vidím v tom, že neposkytuje certifikáty zdarma (AWS ano) a že jsem zatím něpřišel jednoduše na to, jak zprovoznit websockety - a proto nefunguje chat.
  • Mnoho služeb má "security" jenom v placené verzi. Všechny sice mají cca SSL, ale privání síť umožňují jen vyšší levely služeb. To se mi nelíbí. V AWS je vše by-default ve VPC a chráněno přes security-groups a vůbec za to neplatím.
  • Managovaná MySQL běží velmi pěkné a zatím žádný problém. I timezony do ní šli nahrát pomocí procedury :)

A na závěr ještě přehled, na čem běžíme:

  • App Service: PremiumV2: 1 Small - 1 CPU core, 3.5 GiB memory
  • MySQL: General Purpose, 2 vCore(s), 10 GB RAM, 70 GB storage
  • Redis: Basic 1 GB

Zobrazeno 2901×

Komentáře

radeczek

Zdarte,
opravdu jste spokojeni s výkonem? Nemáte tam něco špatně? Možná sice máte někde průměrnou reakci na request stejnou jako na starém serveru, ale odezva je opravdu hrozná.
Přklad: Naíšu jméno a heslo, kliknu na přihlásit. Načtení úvodní stránky, 5.56s z toho WAITING - 4.5s -- tedy než můj prohlížeč od vás dostal první bajt, čekal 4.5s. Ok fajn, klikám na tento blogový příspěvek - celkem 4.32s, opět Waiting 3.73s. Říkám si, přečtu si další komentář - klik, načtení 5ti komentářů trvalo 2.65s, z toho waiting 2.65 (samotný obsah šel v rámci milisekund).
Nemáte tam něco špatně? U mě to není - ostatní weby reagují svižně jsem na pevném Gbit připojení s pingem k vám cca 20ms (Teda na poslední hop, který mi ještě odpoví, proč máte zakázaný ping?).
Dík za reakci.
R.

Jan Škrášek

Ne, uz zase nejsme, uz se to zase zhorsilo.

Zobrazit 11 komentářů »

Pro přidání komentáře se musíš přihlásit nebo registrovat na signály.cz.

Autor blogu Grafická šablona Ondřej Válka