Rozhovor s Josefem Muškem, CTO v BizMachine

31.5.2021

3 minuty

čtení

Aspirací platformy Prospector je pomocí několika principů, například separací dat, tagů nebo prostřednictvím hierarchie vyřešit obrovské množství klientských potřeb. Nejen o tom se v rozhovoru rozpovídal Josef Mušek, CTO v BizMachine.

Jaké technologie používáte pro vývoj a proč?

Prospector se skládá z dvou hlavních komponent, integračního API a webového rozhraní, se kterým interagují uživatelé. Integrační API je psané v Microsoft .NET C# a webové rozhraní je vyvíjené na Reactu (javascriptová knihovna). Obojí se vyvíjí v jiných nástrojích a k tomu naši vývojáři pracují jak na Windows, tak na Macu. Aby toho nebylo málo, produkční verze jsou nasazené na Microsoft Azure Cloud. To vše s sebou nese velkou potřebu univerzality, aby obě komponenty mohly využívat co nejvíce společných nástrojů. Microsoft Cloud nám mnohé z aktivit ulehčuje. Jak už to u cloudového vývoje bývá, přinesl zároveň i potřebu změn v přístupu k vývoji.

Jak se tedy změnil váš přístup k vývoji?

V BizMachine věříme, že automatizace je v jednadvacátém století nevyhnutelná, pokud chceme držet krok s tím, co dělají jiné úspěšné firmy.

Jak nasazujete a vydáváte nové verze aplikace?

Za poslední dva roky jsme v BizMachine prošli poměrně velkou změnou přístupu. Pro samotný vývoj nadále využíváme standardní nástroje jako jsou Microsoft Visual Studio, Visual Studio Code a Git. Snažíme se ale mnohem více než v minulosti využívat možnosti automatizace.

Před dvěma lety byl náš vývoj silně založen na lidském faktoru: vývojář udělal změny, které sám dal do úložiště, sám to sestavil a sám taky nasadil. Bez vývojáře se nic nestalo. Měl sice velkou svobodu, ale, jak říká klasik, with great power comes great responsibility (s velkou mocí přichází velká zodpovědnost). Obrovská flexibilita byla zároveň výhodou i nevýhodou. Vývojář tehdy neměl příliš mnoho důvodů se hlouběji zamýšlet nad tím, jaký dopad bude mít daná změna a zpravidla se testoval jen lokální dopad, ale netestovala se interakce s ostatními komponentami. Z časových důvodů nebylo často možné vše na různých prostředích otestovat. Lidský faktor se ukázal jako velká nevýhoda zejména při reprodukci procesu: lidé nejsou neomylní a reprodukovat stejný krok ve stejném sledu se stejnými parametry je skoro nemožné. Navíc to vývojáře moc nebaví. Vývojáři si mohli také dovolit trochu "divočet", například změnit verzi frameworku, a ovlivnit tím chování něčeho, co přímo nesouviselo s jejich změnou. Bez zásahu člověka se také nic nemohlo provést, nic naplánovat či připravit dopředu. Každé prostředí bylo nutné měnit manuálně. Když jsme potřebovali nasadit nějaké změny, někdo si k tomu musel sednout třeba i v deset večer.

Dnes když vývojář udělá změnu, uloží ji na server, kde se všechny změny scházejí, server následně vytvoří binárky a pak přichází ke slovu Docker. Automatický proces vezme výsledný kontejner a nasadí na jedno prostředí. Čeká se na human interaction a po otestování, když je všechno v pořádku, se stejný kontejner automaticky nasadí na další prostředí, druhé, třetí, podle potřeby. Prvotně proces nasazení sice vývojář musí popsat pomocí skriptu, ale opakovaná spuštění jsou už automatizovaná. Můžeme je načasovat kdykoli, třeba mimo pracovní dobu. Nasazuje se zpravidla stejným skriptem na různých prostředích. Tedy když si funkčnost vyzkoušíme na předprodukčním, staging prostředí a je to v pořádku, máme velkou míru důvěry, že na produkčním prostředí to bude taky fungovat a nemusíme proces hlídat až do konce. Do skriptu je také možné vložit automatické kontroly, které nám nasazení vrátí zpátky, pokud by někde nastala chyba. Výhodou automatizace je zároveň mnohem menší chybovost: na rozdíl od člověka dobře napsaný skript nikdy neudělá chybu. Jsme schopni mnohem snadněji procesy replikovat a v kombinaci s Dockerem víme přesně, kde co je a v jaké verzi včetně  závislostí. Pokud je problém v nasazené verzi, můžeme si dokonce stejný kontejner pustit lokálně a ověřit si chování pro potřeby řešení chyby. V BizMachine věříme, že automatizace je v jednadvacátém století nevyhnutelná, pokud chceme držet krok s tím, co dělají jiné úspěšné firmy.

Zmínil jsi kontejnerové služby Docker. Jakou s nimi máte zkušenost?

Momentálně jsme ve fázi implementace této technologie. Snažíme se připravovat všechny kroky tak, abychom se tam co nejdříve dostali. Prvním krokem je vytvořit výstupní balíček našeho buildu (sada knihoven a exe souborů) a z něj Docker image. Doposud jsme vydávali balíček a ten spouštěli přímo na daném prostředí. Místo toho bychom teď chtěli vydávat Docker image a v cílovém prostředí spouštět instance kontejneru založené na vydaném image.

__wf_reserved_inherit
Začali jsme na specifických technologiích Azure Cloudu a teď se posouváme směrem k agnostickým open source technologiím jako jsou Docker a Kubernetes, tzn. k technologiím, které lze používat jak v cloudu, tak i lokálně.

Začali jsme na specifických technologiích Azure Cloudu a teď se posouváme směrem k agnostickým open source technologiím jako jsou Docker a Kubernetes, tzn. k technologiím, které lze používat jak v cloudu, tak i lokálně.

A co vývoj v Cloudu? Jak vám v tom pomáhá?

V dnešní době je skoro všechno v cloudu. Je zajímavé, že přitom moc vývojářů s tímto vývojem ještě nemá praktickou zkušenost, vnímají to jako něco magického nebo dokonce těžkého. Jde ale o trend, kterým se postupně ubírají všechny firmy, protože když se nemusí starat o infrastrukturu, tak mají více času věnovat se tomu podstatnému, svému produktu. V BizMachine se snažíme využívat agnostické technologie, které můžeme použít jak na vývoj pro různé cloudové platformy, tak on premise, například právě kontejnerovou platformu Docker. Nad ní běží orchestrátor Kubernetes, který původně vyvinul Google a hlavně je to open-sourcový projekt. Aplikace se pak nasazuje do různých prostředí stejně, ať už je v cloudu nebo lokálně, díky jednotnému rozhraní. Obecně nám toto pomáhá získat jiný nadhled na konkrétní problém. Využití paměti je dobrý příklad, kde na vlastním HW je to limitace, takže s ní při vývoji musíme počítat, ale v cloudu si můžeme říct o obrovské množství a limitací je naopak doba, po kterou jej potřebujeme.i.

Vývoj a nasazování v cloudu a automatizace, jak to přesně spolu souvisí?

Pro vývojáře samotná znalost vývoje v cloudu představuje velkou výhodu: když si osvojí vývoj v Azure Cloud od Microsoftu a změní zaměstnání, kde se používá Google Cloud, interní procesy sice budou jiné, ale sada možností bude obdobná, jen minimálně omezená firemními směrnicemi. Nemusí se tudíž učit další technologie. Když budou vědět, že nová aplikace bude releasovaná jako Docker kontejner, de facto budou vědět všechno o daném prostředí, jaké má vstupy a výstupy. Nemusí pak přemýšlet nad tím, jestli to bude v Azure nebo Googlu.

Jaké výhody má nový přístup k vývoji pro vaše klienty?

Samozřejmě se snažíme, aby pro klienta byla jakákoliv změna při vývoji buď nepostřehnutelná, anebo pozitivní, například ve zrychlení odezvy webového rozhraní. Aktuálně nám vše zmíněné umožňuje nasazovat nové verze bez výpadku, přidávat nové funkce a zároveň obsluhovat větší množství klientů ve stejný čas. To, co děláme při vývoji na Prospectoru, aplikujeme v různé míře také v dalších typech práce, třeba u datové přípravy nebo na klientských projektech. V tomto směru nám open source technologie pomáhají zlepšovat přepoužitelnost řešení jako celku nebo jeho částí, zvyšovat kvalitu dat a být efektivnější při přípravě nových projektů.

Anna Evans, autorka článku

Anna Evans

Anna Evans je Head of Marketing v BizMachine, kde vede marketingovou strategii i exekuci pro český a středoevropský trh. Specializuje se na B2B positioning, sales enablement a práci s daty v obchodě a marketingu. Před příchodem do BizMachine získala zkušenosti v B2B prostředí, dnes se věnuje propojení dat, technologií a marketingových strategií, které pomáhají obchodním týmům růst.