Çalışanı paketleyin
Desteklenen bir çalışma zamanı, sabitlenmiş bağımlılıklar ve bir hizmet yöneticisi veya konteyner kullanın. Yeniden başlatma sınırlarını ve özel bir hizmet kullanıcısını yapılandırın. Sağlayıcı özel kimlik bilgilerini uygulamanın herkese açık dosyalarının dışında, korunan yapılandırmada tutun.
İşlemler önem kazanmadan önce ilerlemeyi kaydedin
İşler için dayanıklı bir kuyruk veya veritabanı kullanın. Benzersiz bir işlem tanımlayıcısı atayın, harici istekleri kaydedin ve belirsiz sonuçları uzlaştırın. Bir yeniden başlatma ikinci bir e-posta göndermemeli, ikinci bir sipariş oluşturmamalı veya iki kez ücret almamalıdır.
Faydalı gözlemlenebilirlik ekleyin
Yalnızca bir sürecin var olup olmadığını kontrol etmek yerine iş tamamlanmasını, kuyruk yaşını, hata oranını ve maliyeti izleyin. Günlükleri incelemeye yetecek kadar küçük tutun ve saklanması gerekmeyen belirteçleri, istemleri ve belgeleri redakte edin.
Net bir üst sınır belirleyin
Model harcamasını, tarayıcı eşzamanlılığını, çalışma süresini ve yeniden deneme sayısını sınırlayın. Kolay bir duraklatma anahtarı ve sonuç doğuran eylemler için insan inceleme yolu bulundurun. Daha küçük, iyi gözlemlenen bir çalışan, kısıtlanmamış olandan daha güvenilirdir.
Bir gözetleyici ve bilinçli bir zamanlama kullanın
Systemd ve Docker, bir sürecin terminal bağlantısı kesildikten sonra da çalışmaya devam etmesini sağlamanın yaygın yollarıdır. Bir systemd hizmeti için Type=exec, yürütme hatasını basit bir arka plan başlatmasından daha doğrudan bildirebilir ve Restart=on-failure, sınırlı bir politikayla hataları yeniden başlatabilir. Zamanlanmış işler çakışan çalışmalardan kaçınmalıdır. Çalışma dizinini, hizmet kullanıcısını ve ortamı açıkça belirtin. Örnek, koala-agent kullanıcısının, sanal ortamın, çalışan modülünün ve özel ortam dosyasının zaten var olduğunu varsayar; bir birim kurmadan önce bunları uyarlayın.
- Özel bir hizmet hesabı kullanın
- Bir yeniden başlatma gecikmesi ve hata üst sınırı belirleyin
- Planlanmış bir çalıştırmayı başlatmadan önce önceki iş durumunu kontrol edin
[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.targetResmi belgeler: Systemd hizmet semantiği
Günlük bir bütçe ve yinelenme sınırı belirleyin
İşçiye bir maksimum istek sayısı, harcama limiti ve yürütme zaman aşımı verin. Dış dünyayı etkileyen eylemler için dayanıklı bir idempotency kaydı kullanın. Süreç bir yanıt almadan önce başarılı bir tarayıcı tıklaması gerçekleşebilir; yeniden denemeden önce dış durumu inceleyin. Docker Compose gizli bağlamaları bir sırrı imajın dışında tutabilir, ancak izinler ve tüketen uygulama yine de gözden geçirilmelidir.
Resmi belgeler: Docker Compose gizli değerleri
Periyodik bir işe açık bir telafi politikası verin
Kalıcı bir kuyruk çalışanı için uzun süre çalışan bir hizmet ve sınırlı bir zamanlanmış görev için zamanlayıcıyla tetiklenen oneshot hizmeti kullanın. systemd takvim zamanlayıcısıyla Persistent=true, kesintiden sonra bir kaçırılan etkinleştirmeyi tetikleyebilir; tüm bir iş birikimini yeniden oluşturmaz. Bu telafinin istenip istenmediğine karar verin. RandomizedDelaySec başlangıçları yayabilir, uygulama düzeyindeki bir kira ise iki kopyanın aynı zamanlanmış işi işlemesini önler.
- Amaçlanan saat dilimini kaydedin ve zamanlamayı etkinleştirmeden önce sonraki çalışma zamanlarını inceleyin.
- Görevin yürütme son tarihini çakışmaması gereken bir aralıktan kısa tutun veya sona erme ve sahiplik içeren dayanıklı bir kiralama kullanın.
- Her önceki zamanlayıcı olayının çalıştığını varsaymak yerine, işin bekleyen işleri saklanan durumdan seçmesini sağlayın.
- En son kılavuzdaki bir yönergeyi kullanmadan önce kurulu systemd sürümünü kontrol edin.
# 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-pagerResmi belgeler: systemd: zamanlayıcı planlaması
Bir çökme döngüsünü takılı kalmış bir işçiden ayırt edin
Bir yeniden başlatma politikası başarısız bir süreci kurtarabilir, ancak geçersiz bir kimlik bilgisini veya bozuk bir geçişi birkaç saniyede bir tekrarlamak hatayı daha gürültülü hale getirir. Hizmet başlatmalarını sınırlayın ve tekrarlanan hatada uyarı verin. Çalışan bir süreç de takılı kalabilir: en eski işin yaşını ve son tamamlanan işlemi ölçün. Tek kullanımlık işlerle bir API kesintisini, boş bir diski ve bir süreç durmasını test edin, ardından kalıcı durumun yinelenen dış eylemleri önlediğini doğrulayın.
- Uygulamada bir sağlayıcı bütçesi ve istek zaman aşımının yanı sıra çalışma zamanında bir CPU/bellek sınırı belirleyin.
- Docker konteynerlerinin yalnızca konteyner oldukları için iş yüküne özgü kullanışlı bir bellek sınırı yoktur; sınırları bilinçli olarak yapılandırın ve test edin.
- Görüntünün ve genel ağacın dışında bir sır saklayın, ardından çökme günlüklerinin ve tanılamaların bunu gizlediğini test edin.
- Manuel bir durdurma yolu bulundurun ve harcamalar, üretim yazmaları veya harici mesajlar için uygun inceleme gerektirin.
Resmi belgeler: systemd: hizmet denetimi · Docker: konteyner kaynak kısıtlamaları