Pakkaa työntekijä
Käytä tuettua suoritusympäristöä, kiinnitettyjä riippuvuuksia ja palvelunhallintaa tai konttia. Määritä uudelleenkäynnistysrajat ja erillinen palvelukäyttäjä. Pidä yksityiset palveluntarjoajan tunnistetiedot suojatussa kokoonpanossa sovelluksen julkisten tiedostojen ulkopuolella.
Tallenna edistyminen ennen kuin toiminnoilla on merkitystä
Käytä kestävää jonoa tai tietokantaa töille. Anna yksilöllinen toimintotunniste, kirjaa ulkoiset pyynnöt ja täsmäytä epävarmat tulokset. Uudelleenkäynnistys ei saa lähettää toista sähköpostia, luoda toista tilausta tai veloittaa kahdesti.
Lisää hyödyllistä havaittavuutta
Seuraa työn valmistumista, jonon ikää, virheprosenttia ja kustannuksia sen sijaan, että tarkistaisit vain prosessin olemassaolon. Pidä lokit riittävän pieninä tarkistettaviksi ja peitä tunnukset, kehotteet ja asiakirjat, joita ei tarvitse säilyttää.
Aseta selkeä yläraja
Rajoita mallin kulutusta, selaimen samanaikaisuutta, suoritusaikaa ja uudelleenyritysten määrää. Pidä helppo keskeytyskytkin ja ihmisen tarkistuspolku merkittäville toimille. Pienempään, hyvin valvottuun työntekijään on helpompi luottaa kuin rajoittamattomaan.
Käytä valvojaa ja harkittua aikataulua
Systemd ja Docker ovat yleisiä tapoja pitää prosessi käynnissä päätteen yhteyden katketessa. Systemd-palvelussa Type=exec voi raportoida suoritusvirheen suoremmin kuin pelkkä taustakäynnistys, ja Restart=on-failure voi käynnistää epäonnistumiset uudelleen rajatuin käytännöin. Ajoitettujen tehtävien tulisi välttää päällekkäisiä ajoja. Pidä työhakemisto, palvelun käyttäjä ja ympäristö nimenomaisina. Esimerkki olettaa, että koala-agent-käyttäjä, virtuaaliympäristö, worker-moduuli ja yksityinen ympäristötiedosto ovat jo olemassa; mukauta niitä ennen yksikön asentamista.
- Käytä erillistä palvelutiliä
- Aseta uudelleenkäynnistyksen viive ja vikakatto
- Tarkista edellisen työn tila ennen ajastetun ajon aloittamista
[Unit]
Description=Example agent worker
After=network-online.target
[Service]
Type=exec
User=koala-agent
WorkingDirectory=/opt/koala-agent
EnvironmentFile=/etc/koala-agent.env
ExecStart=/opt/koala-agent/.venv/bin/python -m worker
Restart=on-failure
RestartSec=10
NoNewPrivileges=true
[Install]
WantedBy=multi-user.targetVirallinen dokumentaatio: Systemd-palvelun semantiikka
Aseta päiväbudjetti ja duplikaattiraja
Aseta työntekijälle enimmäispyyntömäärä, kuluraja ja suorituksen aikakatkaisu. Käytä kestävää idempotenssitietuetta toiminnoille, jotka vaikuttavat ulkomaailmaan. Onnistunut selainklikkaus voi tapahtua ennen kuin prosessi vastaanottaa vastauksen; tarkista ulkoinen tila ennen uutta yritystä. Docker Composen salaisuusliitokset voivat pitää salaisuuden poissa imagesta, mutta käyttöoikeudet ja kuluttava sovellus on silti tarkistettava.
Virallinen dokumentaatio: Docker Composen salaisuudet
Anna jaksottaiselle työlle selkeä kiinniotto-käytäntö
Käytä pitkäkestoista palvelua pysyvälle jonotyöntekijälle ja ajastimen laukaisemaa oneshot-palvelua rajatulle ajoitetulle tehtävälle. systemd-kalenterin ajastimella Persistent=true voi laukaista yhden väliin jääneen aktivoinnin käyttökatkon jälkeen; se ei luo uudelleen koko liiketoiminnan rästiä. Päätä, onko tällainen kiinniotto toivottavaa. RandomizedDelaySec voi hajauttaa käynnistyksiä, kun taas sovellustason lease estää kahta replikaa käsittelemästä samaa ajoitettua työtä.
- Kirjaa aiottu aikavyöhyke ja tarkista seuraavat suoritusajat ennen aikataulun ottamista käyttöön.
- Pidä tehtävän suoritusmääräaika lyhyempänä kuin väli, joka ei saa mennä päällekkäin, tai käytä kestävää vuokrausta, jossa on vanheneminen ja omistajuus.
- Anna tehtävän valita keskeneräiset työt tallennetusta tilasta sen sijaan, että oletettaisiin jokaisen aiemman ajastintapahtuman suorituneen.
- Tarkista asennettu systemd-versio ennen uusimman käsikirjan direktiivin käyttöä.
# Read-only checks after creating your own matching units.
systemctl list-timers --all
systemctl status koala-agent.service
journalctl -u koala-agent.service --since today --no-pagerVirallinen dokumentaatio: systemd: ajastus
Erota kaatumissilmukka pysähtyneestä työntekijästä
Uudelleenkäynnistyskäytäntö voi palauttaa epäonnistuneen prosessin, mutta virheellisen tunnistetiedon tai rikkinäisen migraation toistaminen muutaman sekunnin välein tekee viasta äänekkäämmän. Rajoita palvelun käynnistyksiä ja hälytä toistuvasta epäonnistumisesta. Käynnissä oleva prosessi voi myös juuttua: mittaa vanhimman työn ikä ja viimeksi suoritettu toimenpide. Testaa API-katkos, täysi levy ja prosessin pysäytys kertakäyttöisillä töillä ja varmista sitten, että kestävä tila estää ulkoisten toimien toistumisen.
- Aseta palveluntarjoajan budjetti ja pyyntöjen aikakatkaisu sovelluksessa sekä CPU/muistiraja ajonaikaisessa ympäristössä.
- Docker-konteilla ei ole hyödyllistä työkuormakohtaista muistirajaa pelkästään siksi, että ne ovat kontteja; määritä ja testaa rajat tarkoituksella.
- Tallenna salaisuus kuvan ja julkisen hakemiston ulkopuolelle ja testaa sitten, että kaatumislokit ja diagnostiikka peittävät sen.
- Pidä manuaalinen pysäytysreitti ja vaadi asianmukainen tarkistus kulutukselle, tuotantokirjoituksille tai ulkoisille viesteille.
Virallinen dokumentaatio: systemd: palveluiden valvonta · Docker: konttien resurssirajoitukset