Rychlejší práce s DNS

Prázdniny jsou obdobím, kdy se toho moc neudělá a letošní rok by mohl jít příkladem. V září už jsme se ale trochu posunuli a podařilo se nám dokončit změny v DNS, takže se budeme moci definitivně zbavit starých serverů.

Kvůli časovému deficitu fungovalo staré Roští ještě částečně do září a někteří z vás jste toho naplno využili. Snažili jsme se servery vypínat a v případě, že je někdo ještě chvíli potřeboval, tak je zapnout. Nicméně od tohoto týdně už posíláme jen data a servery znovu nezapínáme. Zároveň jsme vypnuli poštovní server, který neměl běžet už od konce července. Příští týden v pátek ale už jedeme do Master DC a tím definitivně skončíme s vlastními servery.

Master DC

K Master DC bych rád napsal pár řádek, protože pro nás byli těmi nejlepšími partnery, vycházeli nám vstříc a jejich serverovna byla vždy dobrým místem v lepších i horších chvílích. Dali nám spoustu IP adres, pomáhali nám se zvládnutím DDoS útoku a prakticky zařídili, že další útoky už naše uživatele nepostihli.

Důvod proč odtamtud odcházíme není o nespokojenosti s jejich službami, ale s fyzickými servery. Jejich éra pomalu končí a nemá smysl si je držet. Bohužel cloudové služby Masteru jsou cenově mimo naši hladinu a tak jsme postupně začali migrovat služby nejdříve pod ScaleWay a posléze do DigitalOcean. U Masteru nám zůstává pouze load balancer.

Děkujeme za ty čtyři roky.

DigitalOcean

Už přes půl roku jsme na DigitalOcean, které začátkem roku změnilo ceník a stalo se tak kompatibilní s tím naším. Po přechodu prakticky přestaly všechny výpadky našich služeb a během posledního půl roku jsme řešili jen rebootování serverů kvůli chybám v procesorech Intel. Rebooty by nevadily, ale došlo k ním v dost nešťastnou dobu mezi 16:00 a 20:00 ze strany DO a tak jsme byli u některých serverů pár minut dole.

Kromě této události se DigitalOcean osvědčilo a budeme na jeho službách dále zakládat ty naše. Jednou z následujících změn bude přechod administrace na Kubernetes, které DigitalOcean plánuje brzy spustit. To by nám mělo vyřešit současný setup plný SPOF.

DNS

S vypnutím starého Roští jsme museli řešit také naše DNS servery, které jsou pro obě administrace společné. Napsali jsme proto malou službu, která běží na jednom z NS serverů a zpřístupňuje REST API mezi administrací a Bindem. Služba se jmenuje dnsapi a je napsaná v Go. Zdrojové kódy jsou dostupné na GitHubu a ještě k nim přibude krátká dokumentace.

Před několika měsíci jsme se rozhodli nosné vlastnosti administrace přesunout mimo její kód a vytvořit několik menších služeb. Děláme to kvůli snazší testovatelnosti, větší spolehlivost i rychlosti. Nestane se nám pak třeba, že máme dvě na sobě závislé administrace. Navíc z frontendu nakonec zmizí 50 % kódu. Kromě DNS máme takto implementovaný i load balancer a snad ještě tento rok se k němu přidá správa kontejnerů, která přinese i pár zajímavých vlastností.

Nové DNS API nasadíme ještě tento týden. Jako uživatelé toho moc nepoznáte, jen změna DNS záznamu spadne z několika sekund na stovky milisekund s tím, že změna bude ihned poté viditelná – tedy na našich NS serverech. V tomto ohledu máme s Go velmi dobré zkušenosti. Je rychlé, staticky typované, má hezky integrované testy, i když ne tak propracované jako v Pythonu, a dobře se deployuje.

Kontejnerizační micro service

Aktuálně pracujeme na novém projektu, který se posadí vedle dnsapi a lbapi a bude se jednat o službu pro práci s kontejnery. Vyřešíme tím jeden z palčivých problémů Roští a to je cena. Nemyslíme si, že je vysoká pro nějaký eshop nebo jakýkoli komerční web, ale chtěli bychom hosting Pythonu, Node.js a PHP přiblížit metě několika korun za měsíc pro ty ostatní projekty.

Základem je pevná storage, kam se budou ukládat data. Tahle storage se v případě potřeby, tedy když přijde request, připojí na některý z nodů, kde se nastartuje také nový kontejner a request se obslouží. V případě že během pár minut či sekund přijde další request, tak bude obsloužen z běžícího kontejneru. Pokud ale request nepřijde, tak se kontejner vypne. Uživatel bude platit jen cenu za storage a za dobu, po kterou kontejner běží.

Kromě pevné storage pracujeme i možností posílat kód jako ZIP archiv, což může frontend přeložit do mnoha podob od Gitu přes deploy pomocí API. Takto uploadovaný kód by pak nabíhal v kontejnerech stejným způsobem s tím, že by neexistovala permanentní storage. Když dodáme API, tak se tím přiblížíme někam mezi AWS Lambda a Zappa. Kombinace obojího nás v této připravované novince hodně inspirovala.

Tahle služba je teprve ve stádiu příprav a pracujeme na demu, na kterém budeme moct vyzkoušet, zda to vůbec bude fungovat. Stejná služba bude na DigitalOcean spouštět a shazovat servery, takže doufáme, že se dostaneme na průměrnou cenu za aplikaci řádově od korun. Staneme se pak perfektní volbou pro malé projekty, blogy, fakturační systémy, itranety, prostě pro systémy, které potřebují běžet jen omezenou část dne.

Pokud vše půjde dobře, nahradí tento způsob současný způsob provozu aplikací, ale chceme, aby oba způsoby běžely nějaký čas vedle sebe. A protože teď máme zkušenost s vypínáním služeb, kde jsme museli starý hosting vypnout bez náhrady, tak jen dodám, že pokud bychom současný způsob provozu někdy vypínali, tak budeme připraveni na automatickou migraci. Jedná se totiž stále o kontejnery založené na Dockeru a tato novinka změní pouze jejich management.

A tímto bych tento článek ukončil, protože je delší než původně měl být 🙂

Březnové novinky

Po sérii restartů ze strany DigitalOcean se můžeme podívat na to, co se v březnu na Roští událo. Nejvíce změn najdete v administraci, jejíž nová verze bude tento týden nasazena a taky se koukneme, jak se serverům daří v DigitalOcean po přechodu ze ScaleWay.

V administraci jsme se tento měsíc zaměřili na API, do kterého budeme teď chvíli přidávat nové funkce. I ty, které nejsou ve webovém rozhraní dostupné. Během pár týdnů se tam ale objeví. Mimo to, že jsme dokončili snapshotování, jsme vyřešili i běh některých tasků na pozadí. Používali jsme a používáme django-rq, které zase používá python-rq, ale v jeho implementaci jsme měli mezery. V administraci nyní lépe trackujeme co se na pozadí děje a jsme schopni vám to ukázat. Můžete tak ověřit, zda daná akce dopadla dobře nebo ne.

Snapshotování má před sebou ještě pár mil než bude úplně dotažené a navíc zatím chybí snapshoty databází. Chybí nám také webové rozhraní a propojení s killerem, který odstraňuje aplikace z účtů, které jsou v mínusu. To je jeden z hlavních důvodů, proč jsme snapshoty zavedli, abychom mohli levně odsudnout aplikace, o které nikdo nejeví zájem a jako bonus jsme tuto možnost dali i vám. Snapshoty lze použít i pro zálohování podle vašeho vlastního uvážení. Je to úplně oddělený systém od našeho vlastního zálohování, takže se dá brát jako taková záloha a navíc je uživatelsky dostupné obnovování. Ze snapshotů lze vytvořit kopii aplikace nebo aplikaci kompletně obnovit do podoby, ve které byla předtím.

Změny v administraci se ale netýkají jen snapshotů. Tady je celý seznam:

  • Backend: Opraven bug v pozvánkách, kdy docházelo k přidání jednoho uživatele k firmě několikrát.
  • Backend. Opraven bug, kdy u odemykání účtu po zaplacení dlužné částky nenaběhly aplikace.
  • Admin: Opraven bug s kontrolou DNS záznamů.
  • API: Vytváření snapshotů aplikací
  • API: Obnova aplikací ze snapshotů
  • API: Mazání snapshotů
  • API: Seznam firem, do kterých má uživatel přístup
  • API: Seznam běžících a dokončených úloh, které jsou prováděny na pozadí.
  • Backend: Framework pro async procesy
  • Admin: K databázi je možné nyní přidat poznámku
  • Admin: Aktivovali jsme generování automatických faktur, pokud si je zapnete (není nutné se již přihlašovat do administraci kvůli platbě)
  • Backend: přístup k SMTP pro aplikaci (již není potřeba email)
  • Admin: Členy firem může odstranit kdokoli, kdo je součástí dané firmy. Ne pouze vlastník.

Aplikace dostaly svůj vlastní SMTP přístup

Kromě změn v administraci jsme zažily vlnu restartů ze strany DigitalOcean, které se tím rozhodlo vyřešit problém se Spectre a Meltdown. Výpadky na Roští probíhaly v absolutně nevhodný čas (16:00-21:00), ale chápeme, že jde o velký zásah do infrastruktury a tak chtěli mít v DO jistotu, že budou mít na případné problémy dostatek lidí a budou je tak moct řešit co nejrychleji.

Samotné restarty proběhly bez problémů, kromě jednoho serveru, který zůstal po celém procesu vypnutý. Toho jsme si všimli až po půl hodině, kdy už bylo divné, že nenabíhá. Nicméně servery naběhly absolutně bez problémů, aniž bychom do nich museli nějak zasahovat. Minulý rok jsme udělali maximum pro to, aby bootování serverů bylo co nejhladší a vypadá to, že se to povedlo.

Po mnoha měsících neřešíme problémy se sítí, s výkonem, se stabilitou, s výpadky nebo se ztrátou dat. Nepočítáme-li tedy zmíněné restarty, tak co jsme na DigitialOcean, neměli jsme jediný problém a doufáme, že v tom budeme takto pokračovat. Všechny změny, které jsem vypsal výše, bylo možné udělat, díky tomu, že jsme nemuseli řešit problémy s infrastrukturou a doufám, že tempo vylepšování se v dalších měsících ještě zrychlí jen co vypneme poštu a staré Roští. Hlavně propojení na DNS serverech a poštovním serveru mezi novou a starou administrací je svazující. Potřebovali bychom především přemigrovat DNS servery na nové, ale se starou administrací za zády to nezvládneme udělat.

Na následujících dvou obrázcích si můžete porovnat podobné období jednoho z našich serverů. První obrázek je aktuální server z DigitalOcean. Jeho zatížení nedosahuje ani na warning hranici. Druhý obrázek je ze ScaleWay, kde byl výkon o něco méně stabilní a zatížení se drželo na kritické hranici. Jiné porovnání bohužel nemáme, protože tohle je jediný server, který zůstal proti původním nezměněn, co se týče jeho obsahu.

Nový server na DigitalOcean

Původní server na Scaleway

Tento post vznikal postupně během března, ale všechny změny se nám podařilo dokončit a odladit až dnes. V dubnu se chceme zaměřit na naši homepage, takže v administraci toho moc neuděláme. Vzhledem k tomu, že jsme vyřešili naše problémy se servery, rádi bychom zase rozjeli nějaké formy propagace. Naše homepage už nepředstavuje to, jaké Roští je, ale spíš jaké bylo a to bychom rádi změnili.

API

Je to už dlouho, co jsme se o API zmiňovali poprvé. To jsme si ještě nemysleli, že to potrvá tak dlouho. Nakonec jsme se k tomu dostali až po dlouhých dvou letech. Ale o to lepší nakonec výsledek je. Nyní máme hroznou radost, že vám můžeme oznámit, že API pro aplikace a databáze je hotové.

Tahle novinka je pro Roští milníkem v jeho vývoji, protože API otevírá v jeho službách úplně nové možnosti. Je to základ, na kterém budeme stavět v následujících měsících. S API můžete integrovat deployment do vašeho build systému, případně upravit deployovací skripty. Možností je hodně. Na implementaci některých se chystáme sami, jiné necháme v rukou komunity.

Naši hlavní prioritou v téhle oblasti bude utilitka s názvem rostictl, se kterou půjde naše API integrovat do vašich shell scriptů pro deploy a testování. Díky tomu, že používáme Django a Django REST framework je to možné už dnes díky coreapi schématům a nástroji coreapi-cli. Vytvoření aplikace tak lze provést z BASHe třeba takto:

Naše utilitka k tomu ale přidá jedno malé vylepšení, Rostifile – definice toho co aplikace potřebuje

Další varianty volání coreapi lze nalézt v naší dokumentaci pro API. Dokumentace je v angličtině. Odpovědi z API budou chodit zatím v češtině, ale co nejdříve se je pokusíme také přepnout do angličtiny. Bojujeme trochu s tím, že je admin spojený s API. Řešení je několik a nakonec jedno vybereme, ale teď jsme chtěli API hlavně vypustit.

Je možné, že během následujících týdnů a měsíců tuto verzi budeme ještě upravovat, ale nebude to větší změna než datový typ nějakého fieldu.

Chybí nám ještě API pro DNS a platby. DNS doplníme hned jak to bude možné, protože to budeme potřebovat pro rostictl. U plateb uvidíme, není to zatím priorita.

Další změny

Společně s API přišly i nějaké další změny. Pojďme mrknout na screenshot.

Hned na první pohled je vidět první změna. Úložiště už nejsou vázaná na aplikaci. Chtěli jsme dřív nabídnout službu zálohování aplikace včetně databáze. Tedy takový snapshot stavu v čase. Nakonec se to ukázalo být komplikované. Navíc jsme na základě zpětné vazby zjistili, že uživatelé chtějí spíše jednu databázi k více aplikacím. Tento krok tedy usnadní fungování nám a snad i většině uživatelů.

Druhou změnou je přesun položky upozornění ze side menu nahoru do loga, kde byl v našem původním návrhu. Potřebovali jsme tuhle vlastnost rychle a tak jsme úplně neřešili kde se zobrazí. Tímto jsme to tedy opravili.

Třetí změna ani tak změna není, protože tohle už v administraci nějaký čas je. Ale je to místo, kde se nastavuje token pro API a taky tu můžete změnit heslo pro svůj účet. Token je generovaný pro uživatele, ne pro firmu. Takže s jedním tokenem můžete přistupovat ke všem aplikacím firem, ke kterým máte práva i v administraci.

A to je všechno. Budeme rádi, když si naše API zkusíte a když nám nahlásíte jakýkoli bug na který narazíte. Většinu toho chytneme v Sentry, ale i tak budeme rádi za zpětnou vazbu.

Konec emailových služeb

O konci emailových služeb už jsme minulý rok psali a v tomto krátkém článku bychom chtěli jen zopakovat již zveřejněné informace a postup, kterého se budeme držet. Konec emailů, stejně jako konec starého Roští je pro nás zavření jedné kapitoly, která se s naší firmou táhla od jejího začátku.

Důvodem ukončení emailových služeb jsou nároky na jejich provozování a malý zájem mezi zákazníky, kteří u nás platí za aplikace. Za emaily jsme nikdy nechtěli žádné peníze a brali jsme je jen jako vedlejší službu pro zákazníky, kteří u nás měli web. Z dat, která jsme za pět let nasbírali, jsme zjistili, že 26 % schránek u nás web nemá a přibližně 60 % zákazníků, kteří u nás mají web, u nás nemá žádnou emailovou schránku.

Chvíli jsme zvažovali, zda bychom emaily na Roští nezmodernizovali, ale investice do takového projektu a blížící se potřeba nového hardwaru, nás přesvědčily, že by to byl krok do neznáma a raději tu energii budeme věnovat hostingu aplikací, ve kterém můžeme, na rozdíl od emailů, nabídnout něco unikátního.

Doufáme tedy, že náš krok pochopíte. Vypnutí serveru přijde 31. května 2018, tedy za necelé čtyři měsíce. To by mělo být dostatek času na migraci pod jiného poskytovatele. Tři poskytovatele, se kterými máme zkušenosti, jsme vám vypsali v naši dokumentaci, společně s dalšími informacemi, které vám s migrací pomohou.

V následujícím seznamu najdete seznam událostí spojených s touto změnou. Některé už proběhly, jiné nás ještě čekají.

Co se týče odchozího emailového serveru, tak ten zůstane a jeho možnosti se rozšíří pro potřeby aplikací. O tom ještě zveřejníme informace později.

Konec starého Roští (stare.rosti.cz)

Jak jsme psali už dříve, tak staré Roští pomalu končí a 31.5.2018 bychom rádi původní servery vypnuli. Když jsme vypustili novou administraci s úplně novou infrastrukturou, posunuli jsme staré Roští na vedlejší kolej a byla jen otázka času, kdy ho vypneme úplně. V tomto postu vám chceme dát vědět, jak celou akci plánujeme.

Důvodů, proč byste na starém Roští neměli mít žádná data je hned několik:

  • Infrastruktura je založená na Debian Wheezy a Squeeze (už bez upstream podpory),
  • administraci jsme poslední dva roky nevyvíjeli,
  • všechny aplikace běží na našem fyzickém serveru, za který již nemáme žádnou náhradu,
  • instalace serverů není nějak automatizovaná.

Staré Roští používá na jednom ze serverů Debian Squeeze, který již není podporován a obsahuje minimálně dvě zásadní bezpečností chyby. Jednu se nám podařilo potlačit, druhou bohužel ne. Debian Wheeze je stále podporován, ale jeho podpora končí 31.5.2018. Tam běží většina webů a proto chceme staré Roští vypnout dříve než se z pohledu bezpečnosti stane úplně nepoužitelné.

V administraci jsme od nasazení nové administrace moc neudělali, pouze opravili ty nejdůležitější chyby a změnili způsob fakturace. Hodně nás naučila, ale už jsme se posunuli dál.

Aktuálně běží všechny aplikace na starém Roští na našem fyzickém serveru, kde jsou jen pomalé HDD disky a výkon se během dne občas propadne. Migrací tedy získáte pár milisekund k dobru.

Když nepočítáme výpadky v Master DC, neměly aplikace hostované na starém Roští problém dosáhnout 100% dostupnosti většinu roku. Na druhou stranu, postupy související se starou infrastrukturou vybledly a kdyby nyní k něčemu došlo, trvalo by nám hodně dlouho dát vše do pořádku. Nové Roští je celé zansiblované. I kdybychom nyní přišli o všechny servery najednou, jejich obnova se bude rovnat času potřebnému pro kopírování dat ze záloh, což trvá u některých strojů asi dvě hodiny.

Jak to bude probíhat

Vypnutí proběhne 31.5.2018 ale předtím i potom je několik bodů, které musíme splnit. Tady jsou:

  • únor: rozešleme emaily o konci služby
  • únor až březen: přesuneme DNS servery na samostatné servery
  • duben: další email o konci služby
  • 31. květen: konec starého Roští
  • červen: kredity ze staré administrace převedeme do nové na účet se stejnou emailovou adresou
  • 31. červenec: odstraníme všechna data

Článek ještě budeme aktualizovat.