Už to je dobré

Mám radost, že vám mohu oznámit, že teď už je vše v pořádku. Je neděle večer, server má load 0.4 a běží už více než 24 hodin bez zádrhelu. Dnešní plánovaný výpadek jsme museli trochu urychlit a provést ho už v pátek v noci a pokud sledujete náš status twitter, víte že to dopadlo dobře.

Tento servisní zásah jsme měli připravený, takže jsme se výrazně nezasekli. Služby na novém Roští jsme vypnuli kolem 0:30 a kolem 2:30 bylo hotovo. K poškození souborového systému tentokrát nedošlo, takže jsme neměli problémy s nahozením služeb. Jedeme teď na kombinaci Docker+ext4+aufs, což byste měli výrazně pocítit na výkonu IO operací, samozřejmě v tom dobrém slova smyslu 🙂 Kontejnery jsou teď opravdu svižnější.

Btrfs jsme původně vybrali, protože Docker týmem byl označen za stabilní a neměli jsme s ním po celý rok vývoje administrace žádné problémy. Hodně se nám líbili funkce snapshotů, které jsme používali pro zálohování a quote, které nám pomáhali omezovat množství dat, která můžete uložit. Spolehlivost je ale samozřejmě důležitější, takže tyto věci budeme řešit tak, jak jsme je řešili doposud.

Byl to náročný víkend, takže to jen shrnu. Všechno už je v pořádku, systém je teď rychlejší a i když vyšel Docker 1.8. teď rozhodně aktualizovat nebudeme 🙂

Doplněk: Aktualizovat budeme asi až na Docker 1.9, protože 1.8 pro nás nepřináší nic zásadního, ale 1.9 bude podporovat volume pluginy a to nám dá do ruky nástroj, jak decentralizovaně ukládat vaše data. Díky tomu by nás podobné problémy v budoucnu netrápily, protože bychom mohli migrovat vaše aplikace mezi servery v řádu sekund.

Trápí nás Btrfs :-(

Když jsme začali před rokem a kousek pracovat s Dockerem, postupně jsme si vybudovali vztah k souborovému systému Btrfs, který uměl vše co jsme potřebovali. Snapshoty, quoty, roztahoval se na více blokových zařízení a byl rychlý a odolný vůči výpadkům díky COW. Rozhodnutí Btrfs použít nás ale nakonec dostalo do tohoto bodu. Měli jsme dnes další neplánovaný výpadek.

Více než půl roku používáme Btrfs na zálohování dat. Snapshoty nám hodně to ulehčily udržování více verzí jedněch dat. Používáme Btrfs několik let i na desktopech a noteboocích, kde vyvíjíme administraci. V kombinaci s Dockerem nás ale už několikrát vypeklo. Před dvěma dny začalo stoupat iowait na hlavním serveru pro novou administraci a nedařilo se nám zjistit čím to je. Měli jsme v plánu problém pořádně prozkoumat v noci, až bude provoz na serveru minimální, ale dneska večer, kolem 22:00 stoupl load serveru na 180 a kontejnery přestaly reagovat. Monitoring nás upozornil a hned jsme na odstraňování problému začali pracovat.

Až po pádu jsme zjistili, že došlo k poškození souborového systému s daty kontejnerů a to byl také důvod, proč na serveru začal původně stoupat load. Podařilo se nám souborový systém odpojit, ale nepodařilo se nám ho bez restartu serveru opravit.

Rozhodli jsme se Btrfs nadobro opustit. Vrátíme se zpět k Ext4 a jako storage backend pro Docker použijeme buď autfs nebo overlayfs. S obojím máme zkušenosti, ale musíme provést nejdříve pár testů, abychom vybrali správně.

Držte nám palce. Psali jste nám během výpadku a my vám hned odpovídali. Byli jste rádi, že s vámi komunikujeme a že na odstranění problému pracujeme. To je v těchto chvílích velká vzpruha a víme, že to co děláme, děláme správně. Tak nám zůstaňte věrní, tohle společně zvládneme.

Restart kontejnerů

Po víkendovém Hackathonu jsme narazili na jeden problém, kdy se některé kontejnery náhodně odmítly vytvořit a nebo spadly během restartu. Až dnes jsme přišli na to, v čem je problém. Může za to chyba nahlášená přibližně před 23 dny.

I když se jedná o chybu Docker daemona, musíme restartovat všechny kontejnery a uděláme to dnes v noci, mezi 1:00 a 2:00. Výpadek by měl být kratší než v neděli, protože nebudeme restartovat server. Vlastnost „Hot upgrades“, která by umožnila restartovat docker daemona bez vlivu na kontejnery, je v řešení v issue #2658 vytvořeném v roce 2013. Nedávno byl zveřejněn návrh, který má hlavu a patu a doufáme, že se ho vývojářům podaří implementovat.

Nesnažíme se z toho vymluvit a házet vinu kolem sebe. Chceme vás jen informovat o okolnostech, ve kterých se Roští nachází. Než budeme Docker aktualizovat příště, pokusíme se ho otestovat o trochu lépe a snad se podobným problémům vyhneme. Děkujeme za podporu a až se zítra vzbudíte, bude už Roští opravené a připravené na další výzvy.

Update: Do administrace jsme přidali informační hlášku, která vás upozorní, že něco není v pořádku. Nemusíte tak ztrácet čas s pokusy, ale rovnou nám napsat a problém vyřešíme. Hláška se objeví v info kartě a v parametrech, pokud není aplikace ve validním stavu minutu od vzniku kontejneru. Po vytvoření aplikace tedy stačí minutu počkat a po reloadu info stránky budete vědět, jak na tom jste.

rc_filtry1

 

Každý commit se počítá

Možná víte, že většina nových funkcí na Roští vzniká během pravidelných hackathonů, které se konají jednou za měsíc. Zbytek měsíce službu udržujeme, opravujeme chyby a sbíráme podněty na další hackathon. Poslední víkend jeden hackathon proběhl, nazvali jsme ho HackX+1 a tady je malý souhrn.

Nejdříve název. Je to první hackathon, při jehož přípravě jsme použili milestony z GitLabu a protože netušíme, kolikátý hackathon už to je, použili jsme X + 1. Až zjistíme hodnotu X, samozřejmě nahradíme 🙂 Milestone jsme připravovali 14 dní a nakonec vybrali 18 issues, které musely být opraveny, aby se vám administrace dobře používala.

Ohromně nám pomohla vaše odezva za posledních 14 dní. Chat, který máme na webu od Smartsupp využíváte hojně a dáváte nám vědět o všem, děkujeme za to. Navíc když dojde k nějaké chybě a my o ní dostaneme hlášení, hned to s vámi přes něj řešíme a vysvětlujeme vám situaci. Chat vnímáme jako velký boost naší podpory a víme, že vy taky.

Mazání PostgreSQL databází

A teď k novinkám. První týden od nasazení jsme hodně bojovali s PostgreSQL databází, konkrétně s mazáním databází. Pokaždé, kdy jsme si mysleli, že je problém odstraněný se objevil někde znovu. Během hackathonu jsme kód znovu prošli a našli poslední místo, kde se tato chyba ještě schovávala. Teď už je to v pořádku.

Máme i Redis a Cron

Potřebovali jsme vám dát už v administraci někde vědět, že můžete použít Redis, Memcached, Cron a supervisor. V tom nám pomohla záložka Servicy a malé info u databáze.

admin1

 

admin1

Oddělení vypnutých aplikací

Jeden z našich uživatelů nás upozornil, že by bylo dobré oddělit aplikace, které neběží od těch, které běží. Už na starém Roští jste po nás chtěli možnost aplikaci vypnout, což jsme v nové implementovali a teď už to je i vidět 🙂 Na screenshotu si všimněte také flagu „Zastaralý obraz„, který se bude zobrazovat, pokud bude existovat nová verze obrazu pro technologii, kterou aplikace používá. Nový obraz většinou obsahuje opravy chyb a novou verzi technologie v minoritní částí označení. Třeba aktualizace PHP 5.6.7 na 5.6.11.

stoppedapps

Překlad údajů v History tabu

Toto máme zatím upraveno napůl. Byly tu chyby, které dělaly History tab úplně nepoužitelný. Teď už je na jeho výstup spolehnutí, ale utekly nám překlady akcí, které se provádějí. Abyste pochopili, že to není úplně triviální problém, vysvětlím, jak to funguje. Když dojde k nějaké akci jako je vytvoření aplikace nebo restart aplikace, přesune se tato úloha do pozadí. To děláme pomoci python-rq. Ten funguje tak, že mu nahrajeme do Redisu co se má dělat a on si to v úplně jiném procesu začne zpracovávat nezávisle na tom, co děláte na webu. Nemusíte díky tomu čekat několik sekund, než se vám načte administrace, ale tento proces na pozadí nemá vůbec představu pro „koho pracuje“, nemá k dispozici původní request a nastavení jazyka. Výchozím jazykem je angličtina a tak jsou tyto hlášky anglicky. Pokusíme se to dořešit v jednom z dalších hackathonů.

admin1

Vychozí DNS záznamy se vytvářeli na pozadí

Při přidání nové domény docházelo k malému nedorozumění. Hned po přidání vás administrace hodila na seznam DNS záznamů, který byl .. prázdný. Vytváření výchozích záznamů jsme přesunuli na pozadí, takže k němu docházelo až několik sekund po přidání domény. Takže jste nám začali přidávat záznamy vlastní, ale než jste uložili první, už tam byly ty výchozí. Chyba je tedy odstraněna a myslím, že bude lepší, když na ní všichni zapomeneme 🙂

Dokumentace

Minulý týden jsme psali dokumentaci a během hackathonu v tom pokračovali. Dokončili jsme stránky o:

  • Emailech
  • Ruby
  • Supervisoru
  • Memcached
  • Redisu
  • a rozebrali jsme základní pojmy

Na výsledek se můžete podívat zde na https://docs.rosti.cz/.

Změna hesla

Během posledního roku, kdy vyvíjíme novou administraci, jsme si nevšimli, že jsme neimplementovali formulář na změnu hesla. Děkujeme trpělivému uživateli, který nás na to upozornil.

admin1

Narazili jsme během implementace na to, že pokud přijdete přes Twitter, nemáme váš e-mail, takže není možné se do administrace přihlásit i když máte heslo. Administrace vás tedy upozorní, že je e-mail potřeba nastavit. Pomůže nám to i při řešení problémů, které se mohou objevit.

Nové kontejnery

Aktualizovali jsme všechny kontejnery. PHP můžete používat ve verzích 5.4.43, 5.5.27, 5.6.11, Node.js 0.10.40, 0.12.7, Ruby 1.9.3, 2.2.2 a Python 2.7.10, 3.4.3 a teď nově 3.5.0b3. Chtěli bychom přinášet buildy zatím beta větví jednotlivých technologií, ale musíme k tomu připravit nějakou automatizaci. I když vytvořit image s novou verzí je jednoduché, trvá to skoro hodinu ho dostat do produkce.

Malou novinkou pro všechny PHP aplikace je ještě možnost editovat nastavení Apache. Užívejte s rozvahou 🙂

Ukazatel využití RAMky a diskového prostoru

Na Roští účtujeme aplikace na základě využité paměti RAM a diskového prostoru, nicméně jsme vám neukázali, kolik toho vlastně aplikace bere. Osobně mám z této novinky největší radost a to nejen proto, že jsem ji implementoval sám 🙂 Je to prostě super mít nějaká metadata. Na pozadí navíc sbíráme historii za posledních 24h, takže vám během dalšího hackathonu dáme snad i nějaký graf.

admin1

Pokud žádná data nevidíte, běžte do karty Parametry a klikněte na uložit. U aplikací vytvořených před víkendem se musí zrebuildnout kontejner, což se dělá právě takto. Rebuild provedeme za vás, ale pravděpodobně až o víkendu. Data se zobrazí během 10 minut.

A to je zatím vše

Na závěr bychom se vám chtěli omluvit, protože jedna ze změn, konkrétně graf využití paměti, si vyžádala restart serveru. Byly tu i další důvody, třeba přechod na poslední verzi Docker API, ale to jsme mohli pozdržet, nebylo to blokující. Každopádně jsme se dohodli, že napíšeme na Twitter, že dojde k výpadku, ale už jsme se nedohodli na tom, kdo to udělá. V noci z neděle na pondělí, kolem 1:00 došlo k půlhodinovému výpadku, který jsme, ač neúmyslně, nehlásili.

Výpadky hlásíme do speciálního Twitter účtu https://twitter.com/rosti_cz_status, tak pokud máte na Roští důležité aplikace a chcete být informovaní, mrkněte občas tam.

Děkujeme za přízeň a zůstaňte s námi. Čeká nás totiž ještě spousta nových a skvělých věcí. Mám nakousnout? Tak jo, ale jen trochu. Prioritou pro příště je pro nás předělat správu domén u aplikací, což povede k tomu, že si budete moci sami bez naší pomoci přidat k doméně SSL certifikát, také možnost doménu registrovat u nás a nebo koupit SSL certifikát u nás na jeden klik. Kromě toho se budeme soustředit také na platby přes GoPay.

GoPay je taková věc, které se k nám nechce. Martin ho už měl skoro hotový, ale pořád se mu nelíbily některé detaily. Místo toho, aby kód odeslal do GITu třeba i nedokončený, spoléhal se na svůj domácí stroj, kterému pak ze dne na den odešel SSD disk. A jaké z toho plyne ponaučení? Každý commit se počítá!

A to už je opravdu všechno, dobrou noc! 🙂

admin1

 

Nová administrace

I když jsme vám to tak trochu neřekli, dneska jsme udělali velký krok. Po více než roce vývoje, jsme nasadili novou administraci. Na adrese https://admin.rosti.cz už nenajdete starou bootstrap2 šablonu, ale moderní, od základu přepsaný kód, založený na DJango 1.8 a Pythonu 3.4.3. Je to pro nás ohromný krok, protože nová administrace je prostě k sežrání z tolika důvodů. Nasadili jsme také novou homepage, ale ta už tolik změn nemá. Jen přepsané všechny texty a vypadá trochu líp 🙂

Začnu tím, že na rozdíl od staré, jsme u nové administrace napsali nejdříve dva nefunkční prototypy. Pomohlo nám to hodně, protože jsme nakonec vyvážili vlastnosti a pracnost.

Také jsme design a UX nové administrace nenavrhovali tak úplně sami, ale pomáhal nám Vladimír Bareš z http://fakedesign.cz/. Bez jeho práce by administrace nevypadala tak jak dnes vypadá. Jsme sice velmi dobří správci serverů a Martin je výborný programátor, ale design a UX, to nejsou naše silné stránky. Proto Mírovi děkujeme, to jak Roští dnes vypadá, to je jeho práce.

A teď trocha historie. Když jsme měli rozpracovaný třetí prototyp, šel jsem do nemocnice na operaci ramene. Nemohl jsem nějaký čas poté hýbat rukou, ale na klávesnici jsem nějak dosáhl a v tomto stavu s hnisající ránou na levé ruce, jsem napsal základní stavební kámen nové administrace. Nazval jsem ho dopanel, psal jsem ho celý víkend a hned ho poslal Martinovi. Tomu se to hrozně líbilo, ale jak jsem psal, z nás dvou je on programátorem a to se vším všudy. Takže mě to donutil přepsat. Po dalších dvaceti hodinách jsme měli křišťálově čistou knihovnu pro práci s Dockerem včetně integrace do Django administrace. Dopanel toho už tenkrát uměl mnohem víc, než administrace využije i dnes. Podporuje orchestraci nebo SSL certifikáty, ale tohle všechno ještě na své rozhraní pro uživatele čeká.

Další hackathony se táhly v duchu tvrdé práce na rozhraní administrace. Už o Vánocích jsme měli administraci, která šla používat. Možná dokonce ještě dřív. Ale jak je známo, tak 80 % produktu dělá posledních 20 % kódu. Měsíc co měsíc jsme se scházeli a dolaďovali detaily. Když jsme spolu nebyli, pracovali jsme na těchto detailech i po večerech. Mnoho kódu bylo napsáno i zahozeno, ale i když to bylo občas těžké a hlavně demotivační, dotáhli jsme to do konce.

Hodně nás minulý rok trápil Docker, kterému jsme svěřili naši budoucnost. Ještě na podzim jsme nemohli říct, že by se jednalo o stabilní kus softwaru a testovali jsme ho na malých projektech měsíce, než jsme se konečně uklidnili. Jedním z nich byl i Rošťácký webmail 🙂

Mezitím jsme se také stali firmou a koupili další čtyři servery, ale teď už tu před vámi stojíme a můžeme zvolat JE TO TAM. Nová administrace je nasazena a kdybych měl ohňostroj, jdu ho ven vypustit, protože s Martinem máme ohromnou radost.

Naše práce samozřejmě nekončí. Musíme vymyslet podporu pro SSL certifikáty (nyní je nasazujeme ručně), pracujeme na podpoře pro googlí modul pagespeed do Nginxu, protože pomůže při optimalizaci vašich webů pro mobilní i jiná zařízení, tak jak Google v posledních dvou měsících od provozovatelů stránek vyžaduje. A bude toho ještě víc, ale teď si chceme trochu odpočinout. V srpnu budeme mít další hackathon a určitě vám napíšeme, co si z těch všech možností vybereme.

A neopustím si ani trochu osobní komentář. S Roštím jsem začal sám, napsal jsem ho za tři měsíce před šesti lety, chodil jsem tenkrát ještě na vysokou školu v Pardubicích. Byla to moje první velká zkušenost s Pythonem a ještě rok trvalo, než jsem hosting spustil. Byla to moje druhá administrace a celkem třikrát jsem ji přepsal. Nejdříve jsem přemigroval z mod_wsgi na uwsgi s virtualenvy a pak jsem přepsal aplikace tak, aby každá měla svého systémového uživatele. Před touto změnou měl každý uživatel systémového uživatele a aplikace ho sdílely. Nebylo to úplně dobré pro bezpečnost ani pro správu. Podpora pro první způsob je v teď už staré administraci doteď a někteří uživatele nepřešli a i přes to, že jsem odstranil z menu odkazy na přidání nových aplikací, uživatelé je stejně našli. Stará administrace byla totiž dlouhou dobu open source a tak uživatelé mohli jít a najít si URL adresy formulářů pro přidání.

Tady mě napadá, že zkusíme zvážit otevření kódu staré administrace. Někomu to třeba pomůže.

Open source model, konkrétně licenci BSD jsem zvolil, aby mi lidé mohli pomoci s vývojem. Roští tenkrát moc nevynášelo a já neměl peněz nazbyt a nechtěl všechno psát sám. Nakonec pár vlastností přidal yetpodtržítko a ještě jedna dobrá duše. Děkuji oběma, pomohli jste. Obecně ale tento model úspěšný nebyl, tak když se připojil k Roští Martin, administraci jsme uzavřeli a nová už nemá zdrojový kód nikde veřejně.

Stará administrace pro mě znamenala hodně. V poslední době hlavně vrásky, ale jinak hodně i těch lepších věcí 🙂 Je to největší aplikace, co jsem kdy sám napsal, verze co teď běží na serverech má 15 000 řádek. Nová administrace se zatím drží vzadu s 10 500 řádky, ale nepochybuji, že brzy naroste.

A tady to asi ukončím. Ze staré administrace na novou budeme migrovat ještě během tohoto roku. Prozatím pracujeme s variantou, kdy se z každého serveru vytvoří image, do kterého se namigrují data uživatelů ze staré administrace. Tento image bude mít speciální cenu shodnou s cenou staré administrace. Jakákoli změna, ale změní také ceník. Celé tohle bude ještě výzva se spoustou proměnných, ale pokud to někdo dokáže, tak to jsme my.

Děkujeme, že jste to dočetli až sem a také děkujeme, že jste naši uživatelé. Máme vás rádi a rádi vás uvidíme na Roští i s vaším kódem.