Nechceme spustit cron pracovních míst v Nextdoor

pozadí

v Nextdoor, provozujeme mnoho naplánovaných pracovních míst pro různé důležité účely, jako je zasílání desítek milionů digest e-mailů našim uživatelům denně, generování interních zpráv o našem růstu, a některé provozní úkoly. Airbnb a Quora), začali jsme s Cronem a nakonec jsme vytvořili vlastní náhradu cron, kterou jsme nazvali Nextdoor Scheduler.

používáme Nextdoor Scheduler více než 18 měsíců a jsme s ním velmi spokojeni.

takže, jaký je problém s Cron?

existují čtyři hlavní problémy s Cron.

Za prvé, způsob, jakým používáme Cron, nebyl škálovatelný. Spustili jsme všechny Cron úlohy na svalnatý plánovač stroj (c3. 8xlarge). Jak jsme získali trakci, cron jobs tlačil stroj na jeho hranici, pokud jde o využití výpočetních zdrojů.

za druhé, editace crontabu prostého textu je náchylná k chybám pro správu úloh, např. přidávání úloh, mazání úloh nebo pozastavení úloh. Například, další hvězdička zabránila spuštění všech výrobních úloh druhý den:

1 * * * * * /opt/nextdoor/some_job.sh

Zatřetí jsme s Cronem vynaložili spoustu provozních režií. Máme téměř dvě stě výrobních pracovních míst, které jsou provozovány tisíckrát denně, s různou frekvencí (např. Selhání práce je běžné. Osoba oncall musela ručně restartovat neúspěšné úlohy několikrát denně, někdy po půlnoci. Zde je příklad typického zážitku oncall: 1) Získejte stránkování pomocí příkazového řádku neúspěšné úlohy; 2) ssh do stroje plánovače; 3) Zkopírujte & vložte příkazový řádek a znovu spusťte neúspěšnou úlohu. To rozhodně není dobré pro inženýrské štěstí-ano, záleží nám na štěstí našich zaměstnanců!

Začtvrté jsme měli malou viditelnost pro výrobní úlohy během běhu. Nebylo snadné zjistit, jaká pracovní místa běží nebo zda uspěli.

rozhodnutí

stačí. Rozhodli jsme se postavit cron-náhradu. Ale proč jsme nepoužili řešení s otevřeným zdrojovým kódem? Prostě jsme nemohli najít vhodnou. Mluvíme python. Chtěli jsme využít stávající komponenty infrastruktury ve společnosti. Chtěli jsme ji postavit, pochopit a vlastnit.

abychom vyřešili problém škálovatelnosti, udělali jsme z každé úlohy asynchronní úlohu, která může běžet na clusteru strojů pro práci s úkoly. Můžeme snadno nakonfigurovat úlohy, které běží na Taskworker, aby se automaticky opakovaly, když selžou, což vyžaduje pouze změnu kódu jednoho řádku. Naši inženýři oncall milují tuto funkci automatického opakování!

abychom nahradili Cron, použili jsme vynikající python modul ApScheduler k naplánování úloh — což nám umožnilo programově spravovat úlohy – vytvořili jsme REST API, nástroje příkazového řádku a uživatelské rozhraní pro lidi.

Architektura

následující obrázek ukazuje architekturu našeho plánovacího systému.

Nextdoor Plánovač je implementován s Python / Tornado. Je spuštěn jako jeden démonový proces (proces plánovače) na jednom počítači, který se skládá ze tří komponent.

  1. plánovač (nebo základní Plánovač). Nahrazuje cron a plány úlohy spustit. Když je úloha spuštěna ke spuštění, proces plánovače jednoduše zveřejní zprávu pro úlohu Amazon SQS. Cluster Taskworker strojů chytit zprávy z Amazon SQS a spustit odpovídající úlohy. Jak bylo uvedeno výše, používáme APScheduler implementovat základní plánovač.
  2. Plánovač API. Poskytuje rozhraní REST pro správu úloh, např. přidávání úloh, pozastavení / obnovení úlohy, odstraňování úloh, úpravy úloh a ruční zahájení úlohy. Vytvořili jsme nástroje příkazového řádku nad plánovačem API, abychom usnadnili operace, například pozastavení skupiny úloh najednou.
  3. webové rozhraní. Jedná se o jednostránkovou aplikaci, která mluví s API plánovače. Použili jsme páteř.JS a Bootstrap pro implementaci webového uživatelského rozhraní. Lidští operátoři primárně používají webové rozhraní pro interakci s Nextdoor Scheduler.

informace o všech úlohách a provádění úloh jsou uloženy v datovém úložišti. Používáme Postgres především zde na Nextdoor.

Web UI

inženýři milují Web UI Nextdoor Scheduler, který poskytuje intuitivní způsob, jak spravovat úlohy, spíše než jednání s blackbox-jako Cron za starých časů.

stránka práce

na této stránce vidíme, jaké úlohy máme a kdy budou příště spuštěny. Můžeme také kliknout na „vlastní běh“ a ručně zahájit práci.

úprava úlohy

můžeme snadno upravit úlohu, např. změnit její plán a pozastavit ji jedním kliknutím na tlačítko! To je mnohem lepší než úprava prostého textu crontab za starých časů.

stránka popravy

konečně máme skvělou viditelnost toho, jaká pracovní místa běží a zda uspějí nebo ne.

vyvalit

psaní kódu je snadné. Výroba je těžká. V době, kdy jsme dokončili implementaci Nextdoor Scheduler, jsme měli téměř 200 pracovních míst produkčních Cron, které potřebují migrovat do nového systému.

použili jsme to, co jsme se naučili z projektu Taskworker, abychom zavedli systém Nextdoor Scheduler. Čtyři kroky:

  1. do výroby jsme spustili Nextdoor Scheduler — s novým systémem zatím neběžely žádné výrobní zakázky.
  2. přidali jsme přepínač funkcí do základní třídy všech úloh.
  3. pomalu a opatrně jsme zapnuli přepínače funkcí pro každou úlohu během dvou týdnů.
  4. vypnuli jsme starý stroj beefy scheduler, který běžel Cron.

šťastný konec

s novým Nextdoor Scheduler, jsme schopni spustit mnohem levnější plánovač EC2 instance (c3.2xlarge) než dříve (c3. 8xlarge), při zachování zatížení super nízká, jak jsme offload úlohy spustit na distribuovaných Taskworker strojů.

zde je srovnání využití CPU mezi starým plánovačem (horní graf) a novým plánovačem (dolní graf):

byli jsme pomocí Plánovač pracovních míst pro více než 18 měsíce. Zatím jsme spokojení. Pokud máte zájem pracovat na těchto druzích problémů a dalších zajímavých výzvách v oblasti infrastruktury,najímáme vás!

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.