nem futtatunk Cron munkákat a Nextdoor-nál

háttér

a Nextdoor-nál sok ütemezett munkát futtatunk különböző fontos célokra, például napi tízmillió digest e-mailt küldünk felhasználóinknak, belső jelentéseket készítünk növekedésünkről és néhány operatív feladatról. Mint sok más internetes vállalat (például az Airbnb és a Quora), a Cron-nal kezdtük, és végül saját cron-cserét építettünk, amelyet Nextdoor Schedulernek hívtunk.

több mint 18 hónapja használjuk a Nextdoor Schedulert, és rendkívül elégedettek vagyunk vele.

Szóval, mi a probléma a Cron-nal?

négy fő probléma van a Cron – val.

először is, a Cron használatának módja nem volt skálázható. Az összes Cron feladatot egy húsos ütemező gépen futtattuk (c3.8xlarge). Ahogy tapadást szereztünk, a Cron jobs a számítási erőforrás-felhasználás szempontjából a határáig tolta a gépet.

másodszor, az egyszerű szöveges crontab szerkesztése hibára hajlamos a feladatok kezelésére, például a feladatok hozzáadására, a feladatok törlésére vagy a feladatok szüneteltetésére. Például, egy extra csillag megakadályozta az összes termelési feladat futtatását a minap:

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

harmadszor, mi felmerült egy csomó működési rezsi a Cron. Közel kétszáz termelési munkánk van, amelyek naponta több ezer alkalommal futnak, különböző gyakorisággal (például aprólékosan, óránként, hetente). A munkahelyi kudarc gyakori. Az oncall személynek manuálisan kellett újraindítania a sikertelen munkákat naponta többször, néha éjfél után. Íme egy példa egy tipikus oncall tapasztalat: 1) get lapozott a parancssor a sikertelen munkát; 2) ssh az ütemező gép; 3) copy & illessze be a parancssort, hogy futtassa újra a sikertelen munkát. Ez természetesen nem jó a mérnöki boldogsághoz-igen, törődünk munkatársaink boldogságával!

negyedszer, kevés láthatóságunk volt a termelési munkákra futásidőben. Nem volt könnyű módja annak, hogy megtudja, milyen munkahelyek futnak, vagy sikerrel jártak-e.

határozat

elég elég. Úgy döntöttünk, hogy építünk egy cron-csere. De miért nem használunk nyílt forráskódú megoldásokat? Csak nem találtunk megfelelőt. Beszélünk python. Ki akartuk használni a vállalat meglévő infrastrukturális elemeit. Meg akartuk építeni, megérteni és birtokolni.

a skálázhatóság problémájának megoldása érdekében minden feladatot aszinkron feladatként hoztunk létre, amely Taskworker gépek csoportján futtatható. Könnyen konfigurálhatjuk a Taskworker-en futó feladatokat, hogy automatikusan újrapróbálják, ha kudarcot vallanak, ami csak egyetlen soros kódmódosítást igényel. Oncall mérnökeink szeretik ezt az automatikus újrapróbálkozási funkciót!

a Cron helyett a kiváló apscheduler python modult használtuk a feladatok ütemezéséhez, amely lehetővé tette számunkra a feladatok programozható kezelését — REST API-kat, parancssori eszközöket és emberbarát webes felhasználói felületet építettünk.

architektúra

az alábbi kép az ütemező rendszer architektúráját mutatja.

Nextdoor Scheduler végre Python / Tornado. Egyetlen démon folyamatként (ütemező folyamat) fut egyetlen gépen, amely három összetevőből áll.

  1. ütemező (vagy Core ütemező). Ez helyettesíti a cron-t, és ütemezi a futási feladatokat. Amikor egy feladat futtatásra kerül, az ütemező folyamat egyszerűen közzéteszi a feladat üzenetét az Amazon SQS – nek. A Taskworker gépek egy csoportja megragadja az Amazon SQS üzeneteit, és futtatja a megfelelő feladatokat. Mint fentebb említettük, az APScheduler-t használjuk a core scheduler megvalósításához.
  2. ütemező API. Rest felületet biztosít a feladatok kezeléséhez, pl. munkahelyek hozzáadása, a munka szüneteltetése/folytatása, a feladatok eltávolítása, a feladatok módosítása és a munka kézi indítása. A parancssori eszközöket az ütemező API tetejére építettük, hogy megkönnyítsük a műveleteket, például egyszerre szüneteltessük a feladatok egy csoportját.
  3. webes felhasználói felület. Ez egy egyoldalas alkalmazás, amely az ütemező API-val beszél. Gerincet használtunk.JS és Bootstrap a webes felhasználói felület megvalósításához. Az emberi operátorok elsősorban a webes felhasználói felületet használják a Nextdoor ütemezővel való interakcióhoz.

az összes feladat és feladat végrehajtása egy adattárban tárolódik. A Postgres-t elsősorban itt, a Nextdoor-nál használjuk.

Web UI

a mérnökök szeretik a Nextdoor Scheduler webes felhasználói felületét, amely intuitív módon kezeli a feladatokat, ahelyett, hogy a régi időkben a blackbox-szerű Cron-nal foglalkozna.

Állásoldal

ezen az oldalon láthatjuk, hogy milyen munkáink vannak, és mikor fognak futni legközelebb. Az “egyéni Futtatás” gombra kattintva manuálisan elindíthatjuk a munkát.

munka szerkesztése

könnyedén szerkeszthetünk egy munkát, pl. módosíthatjuk az ütemezését, és szüneteltethetjük egy gombnyomással! Ez sokkal jobb, mint a sima szöveges crontab módosítása a régi időkben.

kivégzések oldal

végül, nagy láthatósággal rendelkezünk arról, hogy milyen munkahelyek futnak, és hogy sikeresek-e vagy sem.

a

bevezetése a kód írása egyszerű. A termelés nehéz. Mire befejeztük a Nextdoor Scheduler megvalósítását, közel 200 termelési Cron feladatunk volt, amelyeknek át kellett költözniük az új rendszerre.

a Taskworker projektből tanultakat alkalmaztuk a Nextdoor Scheduler rendszer bevezetésére. Négy lépés:

  1. a We dark elindította a Nextdoor Schedulert a gyártáshoz — az új rendszerrel még nem futottak gyártási munkák.
  2. hozzáadtunk egy funkciókapcsolót az összes feladat alaposztályához.
  3. két hét alatt lassan és óvatosan bekapcsoltuk a funkciókapcsolókat minden munkához.
  4. leállítottuk a régi húsos ütemezőgépet, amely a Cron-t futtatta.

Happy End

az új Nextdoor Scheduler, képesek vagyunk futtatni egy sokkal olcsóbb scheduler EC2 például (c3.2xlarge), mint korábban (c3.8xlarge), miközben a terhelés szuper alacsony, mint mi tehermentesíti feladatok futtatni elosztott Taskworker gépek.

itt látható a régi ütemező gép (felső grafikon) és az új ütemező gép (alsó grafikon)CPU-használatának összehasonlítása:

több mint 18 hónapja használjuk az ütemező munkákat. Eddig boldogok vagyunk. Ha érdekli az ilyen típusú problémák és más érdekes infrastrukturális kihívások kezelése,felveszünk!

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.