we draaien geen Cron-taken bij Nextdoor

Achtergrond

bij Nextdoor draaien we veel geplande taken voor verschillende belangrijke doeleinden, zoals het dagelijks versturen van tientallen miljoenen verzamelmails naar onze gebruikers, het genereren van interne rapporten over onze groei en enkele operationele taken. Net als veel andere internetbedrijven (bijvoorbeeld Airbnb en Quora), zijn we begonnen met Cron en hebben we uiteindelijk onze eigen cron vervanger gebouwd, die we Nextdoor Scheduler noemden.

we gebruiken al meer dan 18 maanden Nextdoor Scheduler en we zijn er erg blij mee.

dus, wat is het probleem met Cron?

er zijn vier belangrijke problemen met Cron.

Ten eerste was de manier waarop we Cron gebruiken niet schaalbaar. We hebben alle cron taken uitgevoerd op een vlezige scheduler machine (c3. 8xlarge). Naarmate we tractie kregen, duwde Cron jobs de machine tot zijn limiet, in termen van het berekenen van resourcegebruik.

ten tweede is het bewerken van de platte tekst crontab foutgevoelig voor het beheren van taken, bijvoorbeeld het toevoegen van taken, het verwijderen van taken of het pauzeren van taken. Bijvoorbeeld, een extra sterretje verhinderde dat alle productie banen de andere dag:

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

Ten derde hebben we veel operationele overhead opgelopen met Cron. We hebben bijna tweehonderd productie banen die duizenden keren per dag worden uitgevoerd, op verschillende frequentie (bijvoorbeeld minutieus, per uur, per week). Werk falen is gebruikelijk. De oncall persoon moest manueel herstarten mislukte banen meerdere keren per dag, soms na middernacht. Hier is een voorbeeld van een typische oncall-ervaring: 1) Get paged met de opdrachtregel van de mislukte taak; 2) ssh in de scheduler machine; 3) kopieer & plak de opdrachtregel om de mislukte taak opnieuw uit te voeren. Dit is zeker niet goed voor engineering geluk-Ja, we geven om het geluk van onze medewerkers!

Ten Vierde, We hadden weinig zichtbaarheid voor productie banen tijdens runtime. Er was geen gemakkelijke manier om te weten welke banen werden uitgevoerd of of ze succesvol waren.

besluit

genoeg is genoeg. We besloten een cron-vervanger te bouwen. Maar waarom hebben we geen open source oplossingen gebruikt? We konden gewoon geen geschikte vinden. We spreken python. We wilden gebruik maken van bestaande infrastructuurcomponenten in het bedrijf. We wilden het bouwen, begrijpen en bezitten.

om het probleem van de schaalbaarheid aan te pakken, hebben we van elke taak een async-taak gemaakt die op een cluster van Taskworker-machines kan worden uitgevoerd. We kunnen taken die worden uitgevoerd op Taskworker eenvoudig configureren om automatisch opnieuw te proberen wanneer ze mislukken, wat slechts een enkele regel code verandering vereist. Onze oncall engineers houden van deze auto-opnieuw proberen functie!

om Cron te vervangen, gebruikten we de uitstekende python module ApScheduler om taken te plannen, waardoor we taken programmatisch konden beheren — we bouwden REST API ‘ s, command line tools en mensvriendelijke web UI.

architectuur

de volgende afbeelding toont de architectuur van ons Schedulersysteem.

Nextdoor Scheduler is geïmplementeerd met Python / Tornado. Het wordt uitgevoerd als een enkele daemon proces (Scheduler proces) op een enkele machine, die bestaat uit drie componenten.

  1. Scheduler (of Core Scheduler). Het vervangt cron en schema ‘ s taken uit te voeren. Wanneer een taak wordt geactiveerd om uit te voeren, de Scheduler proces publiceert gewoon een bericht voor de taak naar Amazon SQS. Een cluster van Taskworker machines grijpen berichten van Amazon SQS en uitvoeren overeenkomstige banen. Zoals hierboven vermeld, gebruiken we APScheduler om core scheduler te implementeren.
  2. Scheduler API. Het biedt een REST-interface om taken te beheren, bijvoorbeeld het toevoegen van taken, het pauzeren/hervatten van een taak, het verwijderen van taken, het wijzigen van taken, en handmatig aftrappen van een taak. We hebben command line tools gebouwd bovenop de Scheduler API om Bewerkingen eenvoudig te maken, bijvoorbeeld door een groep taken in één keer te pauzeren.
  3. Web UI. Het is een enkele pagina app praten met Scheduler API. We gebruikten ruggengraat.js en Bootstrap om de web UI te implementeren. Menselijke operators gebruiken voornamelijk de web UI om te communiceren met Nextdoor Scheduler.

informatie over alle taken en taakuitvoeringen wordt opgeslagen in een gegevensopslag. We gebruiken Postgres vooral hier bij Nextdoor.

Web UI

ingenieurs houden van Web UI van Nextdoor Scheduler, die een intuïtieve manier biedt om taken te beheren in plaats van om te gaan met blackbox-achtige Cron in de oude dagen.

pagina Taken

op deze pagina kunnen we zien welke banen we hebben en wanneer ze de volgende keer zullen worden uitgevoerd. We kunnen ook op “Custom Run” klikken om een taak handmatig af te trappen.

een taak bewerken

we kunnen een taak eenvoudig bewerken, bijvoorbeeld, het schema wijzigen en pauzeren met één klik op de knop! Dit is veel beter dan het wijzigen van platte tekst crontab in de oude dagen.

executies Page

tot slot hebben we grote zichtbaarheid voor wat banen draaien en of ze slagen of niet.

uitrollen

het schrijven van code is eenvoudig. Productie is moeilijk. Tegen de tijd dat we klaar waren met de implementatie van Nextdoor Scheduler, hadden we bijna 200 productie cron banen die moeten migreren naar het nieuwe systeem.

we hebben wat we hebben geleerd van het Taskworker-project toegepast om het Nextdoor Scheduler-systeem uit te rollen. Vier stappen:

  1. we dark lanceerde Nextdoor Scheduler naar productie – er werden nog geen productie banen uitgevoerd met het nieuwe systeem.
  2. we hebben een functie-switch toegevoegd aan de basisklasse van alle taken.
  3. we hebben gedurende twee weken langzaam en zorgvuldig functieschakelaars ingeschakeld voor elke taak.
  4. We hebben de oude beefy scheduler machine die cron draaide, afgesloten.

Happy Ending

met de nieuwe Nextdoor Scheduler kunnen we een veel goedkopere scheduler EC2-instantie uitvoeren (c3.2xlarge) dan voorheen (c3.8xlarge), terwijl de belasting super laag blijft als we taken verwijderen om te draaien op gedistribueerde Taskworker-machines.

hier is de CPU-gebruik vergelijking tussen oude scheduler machine (bovenste grafiek) en nieuwe scheduler machine (onderste grafiek):

we gebruiken al meer dan 18 maanden Planner jobs. We zijn gelukkig tot nu toe. Als je geïnteresseerd bent in het werken aan dit soort problemen en andere interessante infrastructurele uitdagingen, zijn we aan het inhuren!

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.