Neporazitelné aplikace s Temporal

PHP, Go

Framework Temporal může sloužit k orchestraci microservis, spouštění pravidelných úloh nebo zpracování procesů trvající až měsíce či roky, s automatickým zotavením z chyb. Lze navíc zakomponovat přímo do aplikace a byznys logiky. Už nebude potřeba cron ani frontu úloh a další.

Neporazitelné aplikace s Temporal

Temporal vznikl původně jako framework v Uberu, a tehdy se jmenoval Cadence. Interně ale používal protokol Thrift a TChannel pro serializaci zpráv. Původní autoři pak založili vlastní firmu a vznikl Temporal, který využívá open-source protokol gRPC a Protocol buffers. Tím se odstranila závislost na proprietární technologie Uberu, dovolilo šifrování dat i zabezpečení připojení a další.

Základním stavebním kamenem je Workflow, ve kterém je napsána přímo byznys logika. Ta ale musí být deterministická, bez jakýchkoli vedlejších efektů. Pro provádění akcí, které jsou již nedeterministické a mohou v nich vznikat chyby, slouží Aktivity. To může zahrnovat například komunikaci s jinými servery a službami třetích stran, odesílání emailů a další.

Největší výhodou rozhodně patří integrace přímo do jazyků. Workflow či Aktivity lze psát v libovolném jazyce, do kterého existuje SDK. Momentálně pouze Java, Go, PHP a NodeJS, vznikají ale také komunitní pro Python či Ruby. Na dalších se ale pracuje, nebo se brzy začne.

Prezentace a ukázka

Temporal používáme na aktuálním projektu a proto jsem měl v rámci firmy malou prezentaci o této technologii. Můžete si ji zde prohlédnout. A samozřejmě nechyběla ani ukázka.

Spustitelné demo

Pěkné ukázky jsou přímo na Temporal Githubu, a ze stejného repozitáře vzešla i má ukázka. Tu je možno stáhnout na tomto odkaze, následně stačí následovat README, nebo tyto příkazy.

cd withdraw
go mod tidy

# Spuštění Temporal serveru a všech závislostí
docker-compose up -d
# A workeru, který bude zpracovávat všechny úlohy, zde je pak vhodné sledovat LOG
# protože aktivity reálně nic nedělají, pouze vypisují informace do logu
go run worker/main.go

# V novém terminálu je potřeba spustit starter, který spustí workflow
# Po 50s odešle changeFee signal a po dalších 200s cancelWithdraw signal
go run starter/main.go

# Ve třetím terminálu lze spustit query, pro zjištění, kolik celkem bylo strženo peněz
go run query/main.go

Zkušenosti s Temporalem, či názory a postřehy můžete sdílet se čtenáři v komentářích

K tomuto článku již není možné přidávat další komentáře