Za dobu fungování Ackee jsme si vyzkoušeli hned několik desítek technologií pro implementaci našich serverových služeb k webovým a mobilním aplikacím. Mnoho z nich se nám zalíbilo a u některých zas budeme rádi, když už znovu nedostaneme do ruky. Pojďme si shrnout přehled těch, na které se v backend týmu spoléháme.
API, Express a Typescript
Stejně jako frontendový tým nemáme jeden striktní stack, ale přizpůsobujeme se povaze projektu. Máme tak za sebou projekty jak v klasickém RESTu, ke kterému si necháváme generovat kód z dokumentace v Open API, tak v gRPC za využí knihovny ProtoCat, nebo v GraphQL s nástroji od Apollo. Základním stavebním kamenem pro nás ale téměř vždy tvoří trojice technologií Node.js, Express a Typescript.
Node jsme si oblíbili a je naší primární technologií. Obzory si také rozšiřujeme do jazyka Go, se kterým máme sice zatím pouze limitované produkční zkušenosti, ale líbí se nám a věříme mu. Express nám oproti jiným známým frameworkům vyhovuje svým minimalismem. Můžeme tak naše služby přizpůsobit jak větším, tak menším projektům postaveným na různých databázových či API technologiích.
Pro rychlý setup našich projektů využíváme předpřipravený node-template. Díky tomu, že ho udržujeme co nejvíce tenký a transparentní, neměli bychom mít nikdy problém ho vyměnit za něco nového. Statické typování kódu pomocí Typescriptu jsme si zamilovali a stalo se nedílnou součástí našeho stacku. Rádi se v něm také stále učíme novým věcem a trikům, k čemuž nedávno posloužila i naše interní TS Academy.
Ukládání a přenos dat
Základnou pro naše data jsou relační databáze. Po využívání systému MySQL se od roku 2019 opíráme hlavně o PostgreSQL, se kterým máme lepší zkušenosti v oblasti obsluhy, monitoringu a analýzy složitosti SQL dotazů. S relační databází nám nejvíce pomáhá knihovna Knex.js, pro kterou jsme si napsali i vlastní wrapper s názvem Databless.
V minulosti jsme vyzkoušeli také dokumentové úložiště MongoDB, od dalšího používání nás ale odradila převážně náročnost správy a monitoringu v Cloudu a případné ceny hostovaného řešení.
U větších projektů pak zapojujeme další nástroje z našeho širšího stacku. Rádi využíváme služeb Firestore pro živou synchronizaci dat s webovými a mobilními aplikacemi. V případě, že databáze nestíhají, využíváme pro cache vrstvu in memory úložiště Redis. V případě potřeby komplexnějšího fulltextového vyhledávání se také nebojíme použít ElasticSearch. Vzhledem k tomu, že si také rádi hrajeme s architekturou mikroslužeb, potřebujeme často nástroj pro interní komunikaci. Zde se nám osvědčila fronta zpráv Google Pub/Sub, pro kterou máme také vlastní wrapper FuQu.
Cloud a nasazení
Naše služby vyvíjíme lokálně za pomocí Dockeru, díky kterému jsme schopni simulovat remote prostředí pro každý projekt. Pro každé takové prostředí je potřeba i jiný konfigurační soubor a jelikož nám žádné z existujících řešení pro správu konfigurace nevyhovovalo a zatoužili jsme po využívání jsonc formátu, napsali jsme si knihovnu vlastní – Configuru. U API samozřejmě nesmí chybět ani testování, k tomu hojně využíváme framework Jest.
Standardem v oblasti nasazení a Continuous Integration je pro nás GIT a Google Cloud. Kód je nasazen z GIT repozitáře automaticky pomocí Gitlab CI na Google App Engine nebo Google Cloud Run s připojením na služby přímo v infrastruktuře cloudu, kterou spravuje nás skvělý DevOps tým pomocí Terraform. Více se o tom můžete dočíst například v článku s DevOps summary.
Závěrem
Tak tohle je náš aktuální backend tech-stack. Neustále se mění, protože rádi zkoušíme nové věci a hledáme lepší řešení k tomu, co už máme, abychom mohli klientům poskytnout to nejlepší. Chceš toho být součástí? Teď máš šanci – právě nabíráme!