Ich habe eine Docker-basierte Anwendung entwickelt, die aus mehreren Microservices besteht. Es muss Amazon SQS-Nachrichten konsumieren und verarbeiten. Zuerst wollte ich AWS Elastic Beanstalk verwenden, aber dann bin ich über den EC2 Container Service gestürzt. Jetzt weiß ich nicht, welchen ich wählen soll.
Ab sofort unterstützt Elastic Beanstalk Multi-Container-Umgebungen. Das ist großartig, weil jeder Microservice einen eigenen Anwendungsserver in einem Docker-Container hat. Das nächste Problem ist die Skalierung:
Ich weiß nicht, wie der Skalierungsmechanismus funktioniert. Zum Beispiel: Ich habe 5 Docker-Container in meiner Elastic Beanstalk-Umgebung. Jetzt ist nur der fünfte Docker-Container stark ausgelastet, da eine große Anzahl von SQS-Nachrichten verarbeitet werden muss. Die anderen vier sind fast inaktiv, da sie nicht viel CPU benötigen oder möglicherweise nicht viele SQS-Nachrichten enthalten. Nehmen wir an, im 5. Container wird ein JBoss-Anwendungsserver ausgeführt. Soweit ich weiß, kann der Server nur eine begrenzte Anzahl paralleler Anforderungen verarbeiten, selbst wenn genügend CPU / Speicher verfügbar ist.
Wenn der JBoss Docker-Container die Anzahl der Anforderungen nicht verarbeiten kann, aber genügend CPU / Speicher verfügbar ist, möchte ich natürlich automatisch einen zweiten Docker / JBoss-Container auf derselben Instanz starten. Aber was passiert, wenn ich nicht genug CPU / Speicher habe? Natürlich möchte ich eine zweite Instanz drehen, die über eine automatische Skalierungsgruppe in EB konfiguriert werden kann. Jetzt dreht sich eine zweite Instanz, aber jeder Container außer der fünften ist fast im Leerlauf. Natürlich möchte ich nicht, dass sie auch in der zweiten Instanz unnötig 4 erzeugen, was eine Verschwendung von Ressourcen wäre. Nur die 5. sollte erscheinen und die anderen sollten wie die 5. Skala basierend auf konfigurierbaren Parametern wie z. B.: CPU / Speicher / SQS skalieren.
Ich weiß nicht genau, ob Amazon ECS das tut oder ob es überhaupt möglich ist, aber ich kann im Internet wirklich keine Quelle zu diesem Thema finden, was im Allgemeinen gesagt wird, Skalierung basierend auf Instanzen / Containern.