Opracowałem aplikację opartą na platformie Docker składającą się z wielu mikrousług. Musi konsumować wiadomości Amazon SQS i je przetwarzać. Na początku chciałem skorzystać z AWS Elastic Beanstalk, ale potem przewróciłem się o usługę EC2 Container Service. Teraz nie wiem, który wybrać.
Obecnie Elastic Beanstalk obsługuje środowiska wielopojemnikowe. To świetnie, ponieważ każda mikrousługa ma własny serwer aplikacji w kontenerze Dockera. Następnym problemem jest skalowanie:
Nie wiem, jak działa mechanizm skalowania. Na przykład: mam 5 kontenerów docker w moim środowisku Elastic Beanstalk. Teraz tylko piąty kontener docker jest mocno obciążony, ponieważ ma ogromną liczbę komunikatów SQS do przetworzenia, pozostałe cztery są prawie bezczynne, ponieważ nie potrzebują dużo procesora lub może nie mają wielu komunikatów SQS. Załóżmy, że w piątym kontenerze działa serwer aplikacji JBoss. O ile wiem, serwer może zużywać ograniczoną liczbę równoległych żądań, nawet jeśli jest wystarczająco dużo procesora / pamięci.
Jeśli kontener JBoss Docker nie jest w stanie obsłużyć ilości żądań, ale jest wystarczająco dużo procesora / pamięci, oczywiście chcę automatycznie uruchomić drugi kontener Docker / JBoss na tej samej instancji. Ale co się stanie, jeśli nie mam wystarczającej ilości procesora / pamięci? Oczywiście chcę obrócić w drugiej instancji, którą można skonfigurować za pomocą grupy autoskalowania w EB. Teraz kręci się druga instancja, ale każdy pojemnik z wyjątkiem piątego jest prawie bezczynny, oczywiście nie chcę, aby w drugiej instancji pojawiały się 4 niepotrzebne, co byłoby marnowaniem zasobów. Tylko piąta powinna się pojawić, a pozostałe powinny skalować się jak piąta skala w oparciu o konfigurowalne parametry, takie jak np .: procesor / pamięć / SQS.
Nie wiem dokładnie, czy Amazon ECS to robi, czy w ogóle jest to możliwe, ale naprawdę nie mogę znaleźć w Internecie żadnego źródła na ten temat, czyli ogólnie rzecz biorąc, skalowanie oparte na instancjach / kontenerach.