Ondřej Sika: Serverless Deployment
Serverless je model, kdy se správce aplikace vůbec nemusí starat o běhové prostředí. Ne vždycky se chceme strat o servery, takže nám platforma nabídne API pro přímé spouštění funkcí v daném prostředí.
Výhodou také je, že takový provoz může být výrazně levnější. Řešení existuje celá řada: od Google, Amazonu a dalších.
ZEIT je zero-config řešení, jeho nasazení je tedy velmi snadné. Jeho výhodou je, že má prakticky nulovou konfiguraci.
Běží v prostředí AWS Lambda a zaměřuje se na statický deployment. Nabízí podporu CDN, DNS, integraci s GitHubem a podobně. Na začátku se stačí zaregistrovat na webu Zeit.co, nainstalovat klienta now
a začít nasazovat svou aplikaci.
Základem tvorby aplikace jsou Lambda funkce, což jsou jednoduché kusy kódu reagující na požadavky – typicky zaslané pomocí HTTP. Nemusíme používat žádný Docker ani jiné složité řešení.
Všechny funkce jsou uloženy v adresářiapi
a podpora je k dispozici pro jazyky Node.js, Go, Python a Ruby. Zeit je primárně připraven pro statické aplikace generované například pomocí Jekyll nebo Hugo. Lambda funkce jsou k dispozici, abychom mohli třeba poslat e-mail nebo zaregistrovat uživatele.
Integrovaná CDN umožňuje dostat statické soubory co nejblíže k uživatelům, aby měli co nejrychlejší přístup. Stejně tak je automaticky k dispozici HTTPS, to už je dnes standard.
Přímo v Zeit je možné si koupit i domény, což je možné zařídit také přímo v příkazové řádce v utilitě now
. Pokud integrujeme Zeit s GitHubem, může každý push do masteru znamenat nasazení do produkce. Můžeme se přestat úplně starat o nasazování, všechno se děje automaticky.
Zeit je zdarma pro malé projekty, omezení jste ale počtem Lambda funkcí či počtem denních deploymentů. Plnohodnotný plán stojí 20 dolarů a podle Siky stačí pro všechna běžná nasazení. Mají i dražší varianty, ale ty jsem nikdy nepotřeboval.
Tomáš Tichý: kde aktuálně je už ten autobus
Pokud bydlíte ve velkém městě, můžete vyrazit na autobus kdykoliv, vždycky nějaký jede. Pokud ale nemáte to štěstí, musíte mít jízdní řád nebo aplikaci v telefonu, abyste si vyhledali konkrétní spoj. Jak ale zjistit zpoždění daného spoje? Dopravní podniky někdy nabízejí zastávková tabla na webu nebo ve vlastních aplikacích. Data jsou k dispozici ve formátu GTFS, což znamená General Transport Feed Specification. Formát vymyslel Google a jde vlastně o zazipované soubory CSV.
ROPID nabízí otevřená data, která aktualizuje denně. Jedná se o 26MB soubor, který má po rozbalení přes 150 MB. Obsahuje vždy jízdní řád na deset dnů včetně všech podrobností.
Stejně tak jsou v datech například informace o všech možných jízdenkách, pásmech, výtazích ve stanicích, provozovatelích linek, zastávek, výstupech z metra, zastavení v jednotlivých zastávkách a další.
Poloha jednotlivých vozů je pak od 13. ledna 2020 dostupná v aplikaci Golemio, kde je možné opět získat mnoho podrobností o konkrétních spojích. Data jsou k dispozici ve formátu JSON. Když ta data zveřejnili, zmrzlo peklo. Byl o to takový zájem, že jim zmrzla celá aplikace. Dnes už je to v pořádku a funguje to.
Během letošního roku by do dat měly přibýt i tramvaje.
Josef Zelenka: stavba CDN s Ceph
Přednáška se zabývala provozem CDN nad Ceph. Základem jsou servery s běžnými SSD disky a rychlou 10Gbit sítí. Procesory ani paměť nejsou příliš potřeba, zátěž jde především na IOPS. Rotační disky jsou kvůli tomu naprosto nepoužitelné.
Pro ukládání metadat se používá RADOSGW, která běží mimo storage nody a nabízí rychlé indexování a přístup k metadata poolům. API podporuje Swift a S3, takže je možné velmi snadno migrovat aplikaci na jiné řešení. Jen je potřeba dávat pozor na oprávnění, neumí si to poradit s mícháním různých API.
CDN je použitá k rychlé distribuci obrovského množství obrázků, ke kterému slouží vlastní softwarové řešení. Cílem bylo poskytnout API pro management obrázků na úložišti a v cache kompatibilní se současnou infrastrukturou.
Vše je postaveno na Node.js a Nginx.
Typicky uživatel požaduje obrázek, ale v úložišti je k dispozici v obrovském úložišti. Nechceme uživateli cpát velký obrázek, pokud chce na stránce zobrazit jen maličkou verzi na stránce.
Zároveň aplikace nechce stále sahat na Ceph, proto má lokální keš v Nginx. Aplikace zároveň zajišťuje konzistenci mezi různými cache nody. Uživatel pak nedostává nevhodné náhledy, které už byly nahrazeny novou verzí.
Změna rozlišení se provádí pomocí image_filter
v Nginx, který vše zvládá sám. My mu jen předhodíme obrázek a řekneme mu: tohle vrať a nakešuj si to.
Pro nahrávání a stahování obrázků v Ceph se používá aplikace napsaná v Node.js, používá SwiftAPI pro RADOSGW. Umožňuje nám to také mazání obrázků z úložiště pomocí dotazů na API.
Správce webu tedy může určit, že dané obrázky už nepotřebuje a je možné je smazat.
Vysoká dostupnost byla původně řešena pomocí více uzlů, které měly stejný obsah. Jednotlivé uzly spolu komunikovaly, aby byla zajištěna dostupnost keše.
Problém tohoto řešení bylo, že bylo možné využít maximálně kapacity jednoho node.
Nová varianta využívá Corosync a HAProxy. Používáme hash-consistent balancing, který se sám rozhoduje, kam bude směřovat přicházející požadavky.
Pokud jeden z uzlů selže, HAProxy se rozhodne automaticky rozložit obsah na další uzly. Nemůže se nám tak stát, že se uzel přetíží, protože na něj jde velká zátěž.
Monitoring sleduje stav jednotlivých součástí, sleduje se počet úspěšných a neúspěšných požadavků. Řešíme nejen vypnutí či zapnutí, ale také skutečně úspěšnou činnost.
V současné době je v CDN více než 200 milionů obrázků a nové funkce je možné přidávat díky snadné konfiguraci Nginx.
Jakub Vokoun: moderní nástroje pro příkazovou řádku
Příkazovou řádku není rozhodně nutné ani dnes zatracovat a stále se pro ni vyvíjejí nové zajímavé nástroje. Douglas Adams shrnul náš přístup k technologiím do tří tezí: jsme sžití s věcmi existujícími od našeho narození, novinky přicházející s 15. až 35. rokem věku nás fascinují a věci vzniklé později už jsou mimo naše chápání. Filosofie unixových nástrojů je tu s námi desítky let a říká, že bychom měli dělat jen malé jednoduché programy, programy by měly být zřetězitelné a komunikační kanál by měl být textový.
Jeden z nejdůležitějších nástrojů je tmux
, což je alternativa k tradičnímu nástroji screen
. Je to terminál v terminálu, který umožňuje vytvořit více sezení a nepřijdete o ně ani při výpadku spojení.
Různé terminály je možné přidat na jednu obrazovku a rozdělit si ji tak pro více činností.
Dalším představeným nástrojem byl fzf
, což je zkratka pro fuzzy finder. Vždycky jsem měl strašný problém poskládat správně parametry pro find.
Dokáže se perfektně integrovat do historie shellu, umí se propojit s dalšími programy a nabízí interaktivní zobrazení vyhledaných souborů.
Šikovným pomocníkem je tig
, což je textové rozhraní pro Git napsaný v ncurses. Má moc pěkné rozhraní, které předvádí, jak by se aplikace v ncurses měly dělat.
Nabízí možnost nastavit si klávesové zkratky, které dovolují pracovat s Gitem pokročilejším způsobem. Dá se ale použít jen jako prohlížeč historie commitů.
HTTPie je vlastně curl
na steroidech, i když s ním nemá nic společného. Je intuitivnější, snadno rozšiřitelný a umí obarvovat synataxi výstupu. Umí snadno rozlišit, jestli odesíláte formulář nebo JSON a podle toho to i správně odešle.
Existuje celá rodina nástrojů končících na top
, což zahrnuje htop
pro zobrazení informací o procesech, powertop
informuje o stavu power managementu, iotop
zobrazuje zátěž disků a iftop
dokáže informovat o vytížení sítě. Pak existují modernější varianty jako ctop
zobrazující přehled o kontejnerech, ngxtop
vypisující stav o web serveru Nginx, apachetop
zase ukazuje metriky Apache.
Pro práci s daty v JSON se hodí utilita jq
, kterou autoři představují jako sed
pro JSON. Dovoluje filtrovat a transformovat data, podobně jako sed
, awk
a grep
dohromady.
Další nástroj pro práci s daty je VisiData
, který je napsaný v Pythonu. Podporuje to neuvěřitelné množství různých formátů: CSV, JSON, YAML, XML, HTML a další.
Mezi formáty je možné jednoduše převádět, data můžete filtrovat a rozšířit si nástroj o vlastní moduly.
Nástroj s krátkým názvem q
umožňuje provádět SQL dotazy nad nějakou formou textových dat. Umí to většinu základních věcí z SQL. Pokud jste kamarádi s SQL, budete kamarádi i s tímto nástrojem.
Velká skupina nástrojů vyvíjených společně mají příponu cli
a umožňují pracovat s různými databázemi. Umí také velmi dobře napovídat, včetně nápovědy tabulek podle kontextu.
Konkrétně litecli
je určen pro SQLite, postcli
pracuje s PostgreSQL a mycli
zase s MySQL. Jako pager pro Postgres se velmi hodí pspg
. Proti prostému výstupu v less je to mnohem pohodlnější a přehlednější.
David Bečvařík: mikroslužby a kontejnery
Dnes se už velmi často nesnažíme vytvářet velké a složité aplikace, ale rozsekat je na mikroslužby, stále věci měnit a rychle nasazovat do produkce. Trh jde bohužel tímto směrem a musíme se zamyslet nad tím, zda jsme schopni tímhle způsobem ještě dodávat použitelný a funkční produkt.
S tímto přístupem začal Netflix a je v tom hodně daleko. Původní mikroslužby nepoužívaly žádnou infrastrukturu, ale každá služba si nesla všechny funkce sebou. Když jste pak v některé knihovně objevili problém, bylo snadné ho opravit, ale museli jste pak opravit každou službu zvlášť.
Je to sice možné, ale je to někdy velmi složité.
Proto se dnes tyto vlastnosti přesouvají přímo do platforem, které poskytují mnoho užitečných služeb. Princip pak spočívá v tom, že velkou aplikaci rozdělíme na malé části, které spolu komunikují. Bohužel to většinou sklouzne do stavu, kdy všechno komunikuje se vším a vznikne velký neudržovatelný moloch.
Tyto moderní přístupy také často zjednodušují život vývojářům, ale přidávají práci adminům. IT je vlastně jako dvě spojené nádoby a správa infrastruktury je položka, která generuje náklady. Proto se optimalizuje, přidává se práce a ubírají se peníze. Je to smutné, ale je to tak.
Mikroslužby také kladou nové nároky na architekturu aplikace, protože komunikace probíhá po síti a my si nemůžeme být jisti, že nám odpověď přijde rychle a skončíme úspěchem. Dříve jste také věděli, kdo odpovídá za jednu aplikaci. Najednou je ale aplikace rozdělena na spoustu částí, o které se starají různí lidé.
Bojovat se s tím dá pomocí automatizace, ale obvykle má každý vývojář svůj skript a celá funkce je závislá na několika lidech, kteří musí ve správném pořadí spustit svou část. Musíte se v automatizaci posunout, abyste měli celkový koncepční pohled a vytvořili jednotnou bázi.
Nechcete totiž žádat jednoho člověka, aby spustil nový server, jiného aby nastavil síť, dalšího o instalaci systému.
Do toho všeho přicházejí kontejnery, což vypadá jednoduše, ale nestačí spustit platformu a zapomenout na ni. Správce musí chápat všechny komponenty a všechno se komplikuje.
Potřebujeme opravdu kvůli několika málo aplikacím spustit takto složitou věc? Vybudování velkého stacku může trvat velmi dlouho a je otázka, jestli původní aplikace nebyla dostatečně dobrá, abychom ji mohli používat dál v mnohem jednodušším prostředí. Je dobré být pragmatický a přemýšlet nad tím, co opravdu potřebuji. Občas stačí trocha automatizace s Ansible.
Zásadní je myšlenka Operátoru, který umožňuje automatizovat celou správu a nasazení nových verzí aplikací. Jde o to znalosti nezapisovat do wiki, ale rovnou je převádět do kódu. Tím dávám všem do ruky vhodné nástroje a vývojáři pak nasazují všechno automaticky.
DevOps je možné také měřit, z hlediska úspěšnosti implementace těchto postupů. Můžeme sledovat, jak často nasazujeme novou verzi, jak dlouho nám to trvá a jak dlouho trvá obnovení do funkčního stavu. Z pár jednoduchých údajů jsem schopen říct, jak dlouho mi trvalo něco naimplementovat.
V současné době je DevOps spíše filosofickou záležitostí, která se neměří a nijak se neanalyzují. Všichni chtějí vyvíjet a nasazovat rychle, ale většina lidí to nenávidí.
Reálně se pak v týmech řeší drobné detaily, ale nedaří se sledovat celkový obraz. Má to ale být velmi jednoduché: chceme dělat co nejlepší software tím, že si pomáháme.
Jsou to vlastně znovu implementované myšlenky z open-source světa.
Proto je dobré dodržovat několik jednoduchých pravidel: lidé jsou důležitější než procesy a nástroje, funkční software je důležitější než dokonalá dokumentace, spolupráce se zákazníkem je důležitá a reagovat na změnu je důležitější než sledování plánu. Pokud se dostaneme do problémů, je lepší upravit plán než se snažit za každou cenu upravit svět podle původního plánu.
Jak tyhle věci dělat správně? Není to žádná raketová věda a není potřeba k tomu najímat nikoho z venčí. Stačí se držet několika jednoduchých pravidel.
Měli bychom se snažit dosáhnout dobře definovaných cílů, vše by mělo být hodnoceno a někdo by měl být zodpovědný. Nejhorší je kolektivní zodpovědnost a kolektivní vina. Když je za něco zodpovědný někdo konkrétní, může to opravit.
Josef Jebavý: bezpečné řešení pro správu hesel musí být open source
O heslech se v posledních letech hodně mluví, ale pořád to ještě většinu uživatelů dostatečně nezajímá. Představoval bych si, aby s bezpečností přicházelo také pohodlí, k čemuž může pomoct i dobrý správce hesel.
Bezpečnost v tomto případě znamená open source, protože jen tak je možné zkontrolovat, že aplikace funguje správně a je bezpečná.
Správce hesel by měl být centrální, bezpečný, dobře použitelný a integrovaný do dalších nástrojů. Bylo by taky příjemné, kdyby poskytoval sdílení. Firmy často poskytují přístup svým zaměstnancům nebo zákazníkům a potřebují je spravovat.
V linuxovém desktopu je správce hesel běžná věc, uživatelé jsou zvyklí na KWallet nebo GNOME Keyring. Integrace je na velmi dobré úrovni, ale chybí možnost sdílení a synchronizace.
Nástroj BitWarden má spoustu užitečných funkcí: jde o svobodný software pod GNU GPL 3, ukládá hesla centrálně na server, umí generovat hesla, sdílet je v rámci skupin, podporuje dvoufaktorovou autentizaci a nabízí i konzolové nástroje. Ty vám umožňují zacházet s daty automatizovaně. Nemusíte tam mít uložená jen hesla, ale i poznámky nebo libovolné soubory.
Zásadní je seznam podporovaných platforem, protože svět je dnes multiplatformní. Podporován je Linux, macOS, Windows, Android a prohlížeče jako Chrome, Firefox, Safari a další. Na serveru jsou zašifrovaná data a dešifruje je až váš počítač.
Začít používat BitWarden je velmi snadné, není potřeba provozovat ani vlastní server, je možné použít veřejnou instanci, která je pro základní použití zdarma. Vstupní bariéra je úplně minimální, stačí se zaregistrovat pomocí e-mailu a hesla.
Uživatelé pak typicky použijí integraci do prohlížeče, kdy je rozšíření schopné automaticky vyplňovat údaje na přihlašovacích stránkách.
Součástí správce hesel je i generátor, který dokáže náhodně vytvořit nové heslo. Můžete si snadno vytvořit heslo podle požadavků dané služby. Takové heslo je pak bezpečné, protože je silné a náhodné.
Pavel Valach: otevřený komunikátor Matrix
Protokol Matrix je decentralizovaný a federovaný. Kdokoliv si může na libovolném serveru vytvářet místnosti a komunikovat s ostatními lidmi napříč různými servery. Je to vlastně jako spojení IRC a e-mailu.
Je možné přidat také silné šifrování, je ale potřeba ověřit každé zařízení proti každému. Připravuje se ale funkce cross-signing, která umožňuje ověřit klíče na úrovni uživatelů.
Existuje referenční implementace serveru jménem Synapse, kterou si každý může velmi jednoduše nainstalovat. Nemusíte si ani zapínat federaci, ale spojení s hlavním serverem na Matrix.org přináší řadu výhod.
Stejně tak existuje referenční klient Riot, který je dostupný pro všechny hlavní platformy.
Užitečná je možnost zakládat tématické místnosti, které vznikají velmi jednoduše. Pokud znáte hash tag, můžete se do těchto místností připojit.
Do místností je možno přidat také integrace, kdy je pak možné místnost obohatit o možnost spolupráce různých lidí. V nastavení místnosti je také možné řídit práva a omezit například přístup k historii.
Při zapnutí šifrování dochází k ověření mezi dvěma zařízeními. Starší metoda vyžaduje ruční ověření otisků šifrovacích klíčů, novější zobrazí emoji a obě strany musí potvrdit, že vidí stejné obrázky. Pak začne být komunikace bezpečná a servery vidí jen šifrovaný obsah.
(Foto: Anna Kapitánová)