emme suorita Cron-töitä Nextdoorilla

Tausta

Nextdoorilla, suoritamme paljon aikataulutettuja töitä erilaisiin tärkeisiin tarkoituksiin, kuten lähettämällä kymmeniä miljoonia digest-sähköposteja käyttäjillemme päivittäin, tuottamalla sisäisiä raportteja kasvustamme ja joitakin operatiivisia tehtäviä. Kuten monet muut internet-yritykset (esim.Airbnb ja Quora), aloitimme Cron ja päätyi rakentamaan oman cron korvaaminen, jota kutsuimme Nextdoor Scheduler.

olemme käyttäneet Nextdoor Scheduleria yli 18 kuukautta ja olemme erittäin tyytyväisiä siihen.

joten, mikä Cronissa on vikana?

Cronissa on neljä pääongelmaa.

ensinnäkin Cronin käyttötapa ei ollut skaalautuva. Ajoimme kaikki Cron-työt beefy scheduler-koneella (c3.8xlarge). Kun saimme pitoa, Cron jobs työnsi koneen äärirajoilleen, mitä tulee laskentaresurssien käyttöön.

toiseksi, pelkän tekstin muokkaaminen crontab on virhealtista työpaikkojen hallinnassa, esim. työpaikkojen lisäämisessä, työpaikkojen poistamisessa tai työpaikkojen keskeyttämisessä. Esimerkiksi ylimääräinen tähti esti taannoin kaikkien tuotantotöiden pyörittämisen:

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

kolmanneksi, meille tuli paljon operatiivisia kuluja Cronin kanssa. Meillä on lähes kaksisataa tuotantotyötä, jotka ajetaan tuhansia kertoja päivässä, eri taajuuksilla (esim.minuuteissa, tunneittain, viikoittain). Työn epäonnistuminen on yleistä. Päivystäjä joutui käynnistämään epäonnistuneet työt manuaalisesti uudelleen useita kertoja päivässä, joskus puolenyön jälkeen. Tässä on esimerkki tyypillisestä oncall-kokemuksesta: 1) hae hakulaite epäonnistuneen työn komentoriviltä; 2) ssh ajoituskoneeseen; 3) Kopioi & liitä komentorivi epäonnistuneen työn uusimiseksi. Tämä ei todellakaan tee hyvää insinöörien onnellisuudelle-kyllä me välitämme työntekijöidemme onnellisuudesta!

neljäs, meillä ei ollut juurikaan näkyvyyttä tuotantotöihin suoritusaikana. Ei ollut helppoa tietää, mitä töitä oli käynnissä tai onnistuivatko ne.

päätös

Jo riittää. Päätimme rakentaa cron-korvaajan. Mutta miksi emme käyttäneet avoimen lähdekoodin ratkaisuja? Emme vain löytäneet sopivaa. Puhumme Pythonia. Halusimme hyödyntää yhtiön olemassa olevia infrastruktuurikomponentteja. Halusimme rakentaa, ymmärtää ja omistaa sen.

skaalautuvuusongelman ratkaisemiseksi teimme jokaisesta työstä async-tehtävän,joka voidaan suorittaa Tehtäväryhmällä. Voimme helposti määrittää työt, jotka suoritetaan Taskworkerilla, automaattisesti uudelleen, kun ne epäonnistuvat, mikä vaatii vain yhden rivikoodin muutoksen. Meidän oncall insinöörit rakastavat tätä automaattinen yritä ominaisuus!

Cronin tilalle käytimme erinomaista python-moduulia Apscheduleria töiden aikatauluttamiseen, jonka avulla pystyimme hallitsemaan työtehtäviä ohjelmallisesti — rakensimme REST-sovellusliittymiä, komentorivityökaluja ja ihmisystävällisen web-käyttöliittymän.

Arkkitehtuuri

seuraavassa kuvassa on Scheduler-järjestelmämme arkkitehtuuri.

Nextdoor Scheduler on toteutettu Python / Tornado-ohjelmalla. Se suoritetaan yhtenä daemon-prosessina (Scheduler-prosessi) yhdellä koneella, joka koostuu kolmesta osasta.

  1. Scheduler (tai Core Scheduler). Se korvaa Cronin ja aikatauluttaa työt pyörimään. Kun työ käynnistetään suoritettavaksi, Scheduler-prosessi yksinkertaisesti julkaisee tehtävän viestin Amazon SQS: lle. Klusterin Taskworker koneita napata viestejä Amazon SQS ja ajaa vastaavia työpaikkoja. Kuten edellä mainittiin, käytämme APScheduler toteuttaa core scheduler.
  2. Scheduler API. Se tarjoaa REST-käyttöliittymän, jolla voi hallita työpaikkoja, esimerkiksi lisäämällä työpaikkoja, keskeyttämällä/jatkamalla työtä, poistamalla työpaikkoja, muokkaamalla työpaikkoja ja käynnistämällä työn manuaalisesti. Olemme rakentaneet komentorivityökalut Scheduler API: n päälle tehdäksemme toiminnasta helppoa, esimerkiksi pysäyttämällä joukon tehtäviä kerralla.
  3. Web UI. Se on yhden sivun sovellus puhuu Scheduler API. Käytimme selkärankaa.js ja Bootstrap Web-käyttöliittymän toteuttamiseen. Ihmisoperaattorit käyttävät ensisijaisesti Web-käyttöliittymää vuorovaikutuksessa Nextdoor Schedulerin kanssa.

tieto kaikista työpaikoista ja työteloituksista tallennetaan tietovarastoon. Käytämme Postgres ensisijaisesti täällä Nextdoor.

Web UI

insinöörit rakastavat Nextdoor Schedulerin Web UI-käyttöliittymää, joka tarjoaa intuitiivisen tavan hallita töitä sen sijaan, että olisi tekemisissä Blackboxin kaltaisen Cronin kanssa ennen vanhaan.

Jobs Page

tällä sivulla näemme, mitä työpaikkoja meillä on ja milloin ne tulevat seuraavan kerran toimimaan. Voimme myös napsauttaa ”Custom Run” aloittaaksemme työn manuaalisesti.

työn editointi

voimme helposti muokata työtä, esimerkiksi muuttaa sen aikataulua ja keskeyttää sen yhdellä napin painalluksella! Tämä on paljon parempi kuin muokkaamalla pelkkää tekstiä crontab ennen vanhaan.

teloitukset sivu

lopuksi meillä on hyvä näkyvyys siihen, mitkä työt pyörivät ja onnistuvatko ne vai eivät.

koodin kirjoittaminen on helppoa. Tuotteistaminen on vaikeaa. Kun saimme Nextdoor Schedulerin toteutuksen valmiiksi, meillä oli lähes 200 tuotanto-Cron-työpaikkaa, jotka on siirrettävä uuteen järjestelmään.

sovellimme sitä, mitä olemme oppineet Taskworker-projektista Nextdoor Scheduler-järjestelmän käyttöönotossa. Neljä askelta:

  1. we dark lanseerasi Nextdoor Schedulerin tuotantoon-uuden järjestelmän kanssa ei vielä ollut käynnissä tuotantotöitä.
  2. lisäsimme ominaisuuskytkimen kaikkien töiden perusluokkaan.
  3. käynnistimme ominaisuuskytkimet hitaasti ja huolellisesti jokaista keikkaa varten kahden viikon ajan.
  4. sammutimme vanhan beefy scheduler-koneen, joka pyöritti Cronia.

Happy Ending

uuden Nextdoor Schedulerin avulla voimme ajaa paljon halvempaa scheduler EC2-instanssia (c3.2xlarge) kuin aiemmin (c3.8xlarge), ja pitää kuormituksen erittäin pienenä, kun puramme hajautetuille Tehtävätyöläisille tehtäviä.

tässä on suoritinkäytön vertailu vanhan scheduler-koneen (ylägraph) ja uuden scheduler-koneen (bottom graph)välillä:

olemme käyttäneet Scheduler-töitä yli 18 kuukautta. Olemme tyytyväisiä tähän mennessä. Jos olet kiinnostunut työskentelemään tällaisten ongelmien ja muiden kiinnostavien infrastruktuurihaasteiden parissa, me palkkaamme!

Vastaa

Sähköpostiosoitettasi ei julkaista.