Ich habe eine Spring App, die heute @Async
Methoden verwendet, um einige nicht wesentliche, aber informative Sachen zu kümmern. Es funktioniert großartig.Was passiert, wenn ein Mitglied der Autoscaling-Gruppe aws gelöscht wird und herausragende Spring-Async-Threads dabei sind?
Ich möchte eine neue Verarbeitung in diese Ecke der App verschieben, aber ich verstehe nicht ganz, was in der ec2-Instanz passieren würde, auf der sie ausgeführt wird, wenn sie über AWS heruntergefahren wird.
Diese App läuft auf Tomcat 8 in AWS als Teil einer Autoscaling-Gruppe. Wir setzen häufig ein und skalieren oft hoch und runter, so dass die Maschinenbeendigung Routine ist. Ich verstehe, dass dies dazu führen kann, dass einige Threads mitten im Stream angehalten werden, und das ist akzeptabel.
Vorhandener Anwendungsfall: "Berichte über die letzte Stunde an die mittlere Verwaltung über Slack melden."
Ich verstehe, dass ein Herunterfahren der Maschine verursachen kann, dass Slack-Nachricht nicht gebucht wird, und das ist in Ordnung. Es ist nur das mittlere Management.
Neuer Anwendungsfall: "Melden Sie die Verkäufe für den letzten Tag täglich um 5:00 Uhr per E-Mail an die Geschäftsleitung."
Wenn dieser Bericht lange dauert, ist es viel wahrscheinlicher, dass der laufende Thread angehalten wird, wenn das Netzkabel gezogen wird.
Ich weiß, wie man sich dagegen wehren und Dinge "atomar" über Redis etc machen kann, aber das skaliert nicht zu kontinuierlichem Versagen oder wenn die Dauer der Aufgabe die ec2-Lebensdauer übersteigt, und ich würde gerne ein tieferes Verständnis davon bekommen Ein "shutdown" -Befehl der ec2-Instanz wirkt sich auf einen jvm-Thread während des Flugs aus, der gerade Code über einen Methodenaufruf @Async
ausführt.
Ich möchte diese Dinge in Lambda oder irgendetwas anderes Out-of-Band nicht ausführen, weil unsere Domäne in dieser Codebasis ist und häufig aktualisiert wird.
Ich habe zu diesem Thema ein wenig gegoogelt, und fast alle Ergebnisse ergeben Themen ihrer App-Container nicht Herunterfahren in diesem Szenario, das ist das Gegenteil der Informationen, die ich suche.
Danke!
-neil
Dies schützt die Instanz nicht vor Beendigung, wenn der gesamte Cloudformations-Stack "zerstört" wird. Es gibt eine Richtlinie zum "Beibehalten" einer ec2-Instanz, wenn der Eltern-Cloud-Formatierungsstapel zerstört ist, aber ich kann keine API finden, um dieses Bit für eine gegebene Instanz umzukehren. –