Spike Last durch regelmässige Cronjobs
Der Server ist trotz der krassen Hardware hoher Spike Last ausgesetzt:
Das führt natürlich auch dazu, dass andere Dinge die in diesem Zeitraum laufen evtl. ungewöhnlich lange laufen (Webrequests etc.). Besser ist es immer wenn die Last kontinuierlicher verteilt ist.
Der Spike wird durch den minütlichen CronJob DeliverRecentNotificationsMailsJob
ausgelöst. Aktuell sind es 10 Instanzen auf dem Server (5 x canary + 5 x production) was Bedeutet, dass jede Minute 10 Ruby/Rails Prozesse gestartet werden.
- Zum einen ist das ein grundsätzliches Problem (Aufwand Starten eines Porzesses) von hochfrequenten cron basierten regelmässigen Jobs.
- Zum anderen dadurch verschlimmert, dass alle Instanzen (natürlich) zur exakt gleichen Zeit den Prozess starten (grundsätzlich ein Problem, nicht nur für hochfrequente Jobs).
Ein grundsätzlicher Workaround könnte sein die cronentries (via eines custom random_wait_runner für schedule.rb
) mit einem $RANDOM bash sleep von einigen Sekunden zu versehen damit nicht alle Instanzen zeitgleich starten.
Für hochfrequente regelmässige Jobs wäre es außerdem besser für diese nicht jedes Mal einen neuen Prozess zu starten sondern existierende Prozesse zu nutzen. Unser job-framework bietet hierfür eine Option (Recurring Jobs).