Výběr správného executora pro Apache Airflow je zásadním krokem, který ovlivňuje výkon a efektivitu celého pracovního toku. Když se rozhodujeme mezi různými možnostmi, jako jsou KubernetesExecutor, DaskExecutor a Kubernetes Local Executor, musíme brát v úvahu specifické požadavky našich úloh a infrastruktury. Každý z těchto executorů přináší své vlastní výhody a výzvy, které mohou významně ovlivnit úspěšnost nasazení Airflow v konkrétním prostředí.

KubernetesExecutor je jednou z nejdynamičtějších možností, které Kubernetes nabízí. Umožňuje využít výhod horizontálního škálování a zajišťuje vysokou dostupnost a odolnost úloh díky správě Kubernetes podů. Tento executor je vhodný pro prostředí, kde je nutné často vytvářet a ničit kontejnery a spravovat různé verze úloh. I přesto, že Kubernetes nabízí robustní platformu pro orchestrace kontejnerů, jeho nasazení přináší určité výzvy. Mezi nejvýznamnější z nich patří náklady spojené s údržbou Kubernetes clusteru, potřeba řešení pro uchovávání perzistentních dat a vyšší latence při startu kontejnerů, zejména pokud je nutné stahovat image z registry. KubernetesExecutor se tedy hodí především pro složité úlohy, které vyžadují škálovatelnost a flexibilitu, ale není ideální pro lehké úlohy s častými změnami.

DaskExecutor je další zajímavou alternativou pro distribuované výpočty. Tento executor využívá Dask, což je flexibilní knihovna pro paralelní výpočty, která se snadno integruje s Python ekosystémem. DaskExecutor je zvláště vhodný pro úlohy, které vyžadují intenzivní výpočty, jako je trénování modelů strojového učení, vědecké výpočty nebo analýza dat. Výhodou je jeho flexibilita, protože může běžet na jednom stroji nebo na distribuovaném clusteru, což ho činí ideálním pro různé velikosti nasazení. Nicméně zavedení Dask clusteru může být složité a náročné na údržbu, zejména pokud je potřeba zajistit kompatibilitu závislostí mezi pracovními uzly. DaskExecutor je nejvhodnější pro týmy, které již pracují s Dask nebo pro případy, kdy jsou úlohy přímo závislé na Python knihovnách.

Kubernetes Local Executor, jak už název napovídá, umožňuje kombinovat výhody místního běhu úloh (pomocí Local Executor) s možnostmi Kubernetes. Tento hybridní přístup umožňuje spouštět úlohy buď lokálně, nebo v Kubernetes clusteru podle specifických potřeb dané úlohy. Tento executor je výhodný pro vývoj a testování DAGů (Directed Acyclic Graphs) v lokálním prostředí bez nutnosti nasazení na celý Kubernetes cluster. V produkčním prostředí může být užitečný pro úlohy s vysokými nároky na zdroje nebo pro ty, které vyžadují škálovatelnost a odolnost. Při použití Kubernetes Local Executor je však důležité sledovat zátěž na databázi a věnovat pozornost případným problémům s paralelním vykonáváním úloh, které mohou vést k podmínkám závodění.

Výběr správného executora pro Apache Airflow je tedy silně závislý na konkrétních potřebách a infrastruktuře. Pro týmy, které potřebují škálovatelnost a robustnost Kubernetes, je KubernetesExecutor ideálním řešením, i když přináší určité výzvy v oblasti správy a nákladů. DaskExecutor je silným nástrojem pro data-intenzivní výpočty a Python-based workflow, ale vyžaduje zkušenosti s Dask a složitější konfiguraci. Kubernetes Local Executor se ukazuje jako flexibilní nástroj, zejména v prostředích, kde je potřeba kombinovat různé metody spouštění úloh.

Je důležité si uvědomit, že každý executor má své specifické výhody a nevýhody, a rozhodnutí o jeho použití by mělo vycházet z konkrétního kontextu nasazení. Různé scénáře, jako například vývoj, testování nebo produkční prostředí, mohou vyžadovat různé přístupy a kombinace executorů. Vždy je třeba zvážit nejen technologické aspekty, ale i dlouhodobou udržitelnost a optimalizaci nákladů.

Jak vytvořit a distribuovat vlastní Airflow provider: Případová studie

Při vytváření vlastního poskytovatele pro Airflow, známého jako Airflow provider, je důležité dodržovat určitá pravidla a struktury, které byly stanoveny komunitou, aby byl zajištěn bezproblémový přenos mezi různými systémy. Tento proces zahrnuje nejen psaní kódu, ale i správné organizování souborů a adresářů v rámci projektu. Následující příklad ukazuje, jak by mohl vypadat souborový systém pro vlastní provider, který integruje Airflow s konkrétní technologií, například s teapot API.

Prvním krokem při vytváření vlastního Airflow provideru je správná struktura projektu. Obvykle by projekt měl obsahovat několik základních složek, mezi které patří:

  • Hooks: Tato složka obsahuje všechny hooky potřebné pro komunikaci s integrovanou službou. Hooky jsou zodpovědné za připojení k externím API a manipulaci s daty.

  • Operators: V této složce jsou umístěny operátory, které se používají v DAGs (Directed Acyclic Graphs) k vykonání úkolů.

  • Sensors: Tato složka obsahuje operátory, které čekají na určité podmínky nebo události z externích služeb.

  • Triggers: Triggery se používají pro specifické operátory, které podporují odložení vykonání úkolu.

  • Provider: Tato složka obvykle obsahuje soubor s funkcemi, které registrují váš provider u Airflow při jeho instalaci.

V případě, že vyvíjíte pro Airflow poskytovatele, je také zásadní mít složku pro vývojové prostředí. V našem příkladu bude tato složka obsahovat soubory pro nastavení Dockeru, jako je Dockerfile a docker-compose.yaml, které umožní rychlé nasazení a testování vašeho provideru v izolovaném prostředí. Tento vývojový prostor umožňuje efektivní testování a demonstraci poskytovatelova fungování bez nutnosti nasazení na produkční systém.

Pro testování kódu je dobrým zvykem mít samostatnou složku pro testy, která bude obsahovat unit testy, funkční testy nebo testy na konci procesu. Nejčastěji používaným nástrojem pro tyto účely je framework pytest. Psaní testů pro váš provider nejen zajišťuje, že kód bude fungovat podle očekávání, ale také dává ostatním vývojářům jistotu, že váš kód je kvalitní a stabilní.

Pokud jde o samotné balení a distribuci, součástí každého takového projektu by měly být i soubory setup.py a setup.cfg. Tyto soubory popisují metadata o balíčku a umožňují správné zabalení a instalaci kódu. Ačkoli není soubor setup.py vždy nutný, je užitečný při instalaci balíčku v editovatelném režimu. Pomocí těchto souborů můžeme také zajistit, že Airflow při spuštění automaticky registruje váš provider.

Při autorování poskytovatele je důležité mít na paměti několik obecných zásad. Airflow pracuje se zdrojovým kódem tak, že v okamžiku, kdy se DAGy načítají, jsou vykonávány všechny inicializační metody tříd. To znamená, že žádné volání na externí API nebo služby by nemělo být součástí inicializačních metod, protože by mohlo dojít k chybám při importování kódu, pokud by externí služba nebyla dostupná. Tato pravidla platí i pro používání makra a šablon Jinja, které je třeba využít k dynamické konfiguraci při běhu DAGu.

Pro zajištění správné registrace vašeho provideru v systému Airflow je třeba vytvořit metodu get_provider_info, která vrátí metadata o provideru ve formě slovníku. Tento slovník musí obsahovat informace, jako je název balíčku, název provideru, popis a verze. Tento proces registrace se provádí pomocí metadat balíčku v souboru setup.cfg a setup.py. Výsledkem tohoto kroku je, že Airflow bude schopen váš provider při spuštění rozpoznat a správně jej nastavit pro použití.

Dalším klíčovým prvkem je psaní Hooků. V našem příkladu budeme vytvářet Hook pro komunikaci s teapot API, které poskytuje jednoduché HTTP metody pro interakci s čajovou konvicí. Tento Hook bude odpovědný za připojení k teapotu a posílání požadavků na jeho API. Při implementaci Hooku je třeba důkladně promyslet, jakým způsobem bude strukturováno připojení k externím službám, jaké informace bude třeba uživatelům zobrazit v UI Airflow a jak bude vypadat konfigurace připojení.

Je důležité mít na paměti, že kvalitní dokumentace a příklady kódu mohou výrazně ulehčit práci ostatním uživatelům, kteří budou váš provider používat. Vytváření ukázkových DAGů a testování funkčnosti poskytovatele v lokálním vývojovém prostředí pomáhá uživatelům rychleji pochopit, jak správně konzumovat váš provider a jak implementovat vlastní případy použití.

Pokud jde o doporučení pro vývojáře, kteří budou tvořit vlastní poskytovatele pro Airflow, klademe důraz na dodržování komunitních standardů a best practices. To zajišťuje, že váš kód bude nejen funkční, ale i snadno pochopitelný pro ostatní vývojáře, což zjednodušuje jeho údržbu a zajišťuje jeho dlouhodobou kompatibilitu s novými verzemi Airflow. Kromě toho je důležité neustále testovat váš kód a pravidelně ho aktualizovat, aby byl kompatibilní s nejnovějšími verzemi Airflow a závislostí.