55

Ho sviluppato un'applicazione basata su Docker composta da più microservizi. Deve consumare messaggi Amazon SQS e elaborarli. All'inizio volevo utilizzare AWS Elastic Beanstalk, ma poi sono caduto sopra il servizio contenitore EC2. Ora non so quale scegliere.Devo utilizzare AWS Elastic Beanstalk o Amazon EC2 Container Service (ECS) per ridimensionare i contenitori Docker?

A partire da ora, Elastic Beanstalk supporta ambienti multi-contenitore. Questo è ottimo perché ogni microservizio ha il proprio server delle applicazioni all'interno di un container. Il prossimo problema è il ridimensionamento:

Non so come funziona il meccanismo di ridimensionamento. Ad esempio: ho 5 container docker nel mio ambiente Elastic Beanstalk. Ora solo il quinto contenitore docker è sotto carico pesante, perché ha una quantità enorme di messaggi SQS da elaborare, gli altri quattro sono quasi inattivi, perché non hanno bisogno di molta CPU o forse non hanno molti messaggi SQS. Supponiamo che il quinto contenitore esegua un server delle applicazioni JBoss. Per quanto ne so, il server può solo consumare una quantità limitata di richieste parallele anche se c'è abbastanza CPU/memoria disponibile.

Se il contenitore di Docker JBoss non è in grado di gestire la quantità di richieste, ma c'è abbastanza CPU/memoria disponibile, ovviamente voglio avviare automaticamente un secondo contenitore Docker/JBoss nella stessa istanza. Ma cosa succede, se non ho abbastanza CPU/memoria? Ovviamente voglio girare su una seconda istanza, che è configurabile tramite un gruppo di ridimensionamento automatico in EB. Ora una seconda istanza si gira, ma ogni container eccetto il 5 è quasi inattivo, ovviamente non voglio che anche loro generino 4 inutili in seconda istanza, il che sarebbe uno spreco di risorse. Solo il 5 ° dovrebbe spawn e gli altri dovrebbero scalare come la 5a scala in base a parametri configurabili come ad es .: CPU/memoria/SQS.

Non so esattamente se Amazon ECS lo stia facendo, o se è possibile a tutti, ma non riesco proprio a trovare alcuna fonte su internet su questo argomento, che in generale è detto, il ridimensionamento basato su istanze/contenitori.

+0

Pensi che il tuo problema sia stato risolto? Ho una preoccupazione molto simile per quanto riguarda EB, ho il sospetto che lancino tutti i 5 contenitori in un'istanza separata –

+2

Sono anche confuso. La risposta selezionata non spiega in realtà come funziona il ridimensionamento in entrambi i servizi. ECS/EB fa davvero un calcio di un altro 5 ° contenitore e poi esegue entrambi in parallelo sulla stessa istanza se ci sono abbastanza risorse? – codepushr

risposta

47

EB vs ECS arriva davvero al controllo. Vuoi controllare il tuo ridimensionamento e la tua capacità o vuoi che sia più astratto e concentrati principalmente sulla tua app. ECS ti darà il controllo, dato che devi specificare la dimensione e il numero di nodi nel cluster e se deve essere usato o meno il ridimensionamento automatico. Con EB, si fornisce semplicemente un Dockerfile e EB si occupa di ridimensionare il provisioning del numero e della dimensione dei nodi, in pratica si può dimenticare l'infrastruttura con il percorso EB.

Ecco la documentazione EB sulla finestra mobile: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker.html

Con ECS si dovrà costruire le infrastrutture prima di poter iniziare la distribuzione del l'Dockerfile quindi si tratta veramente basso per 1) la familiarità con le infrastrutture e 2) livello di impegno che vuoi dedicare all'infrastruttura rispetto all'app.

+5

Sì, ma come funziona il meccanismo di auto-ridimensionamento di entrambi i servizi, Elastic Beanstalk ridimensiona i contenitori, per Container, quindi se solo uno è sotto carico, ridimensiona solo questo, o scala sempre le istanze e avvia tutti i contenitori, non importa sotto quale carico sono? – orbatschow

+5

Ora che ECS è GA, EB sfrutta ECS per fornire la sua infrastruttura multi-contenitore. L'auto-ridimensionamento viene eseguito utilizzando la tipica primitiva del gruppo di ridimensionamento automatico EC2. Il fattore di attivazione per il ridimensionamento verso l'alto o verso il basso non è tuttavia il contenitore ma il nodo dell'istanza. Cioè se il traffico dell'interfaccia di rete, il carico della CPU o il carico del disco raggiungono una determinata soglia, il cluster può scalare o rientrare. Quindi nell'esempio, se il nodo del quinto contenitore era sottoposto a un carico elevato della CPU, era possibile impostare un trigger automatico del ridimensionamento in base a quella. – alanwill

+0

Ecco alcune risorse per aiutarti anche tu: https://aws.amazon.com/blogs/aws/aws-elastic-beanstalk-for-docker/ http://docs.aws.amazon.com/elasticbeanstalk/latest /dg/create_deploy_docker_ecs.html – alanwill

4

Non far risorgere una domanda morta, ma si spera che questo aiuti qualcuno.

La risposta accettata non è abbastanza chiaro: sulla base di quanto descritto OP, OP vuole ECS, non Multi-Container Elastic Beanstalk (BECM). Per quanto posso dire, BECM non tenta mai di mettere in valigia in modo efficiente i contenitori in istanze. OP chiede in un commento, "se solo uno è sotto carico, è in scala solo questo, o lo fa sempre scalare le istanze e iniziare tutti i contenitori, non importa in quali carico sono?" E la risposta è "il secondo"; BECM scale le istanze e inizia a tutti i contenitori, indipendentemente dal carico sono sotto.

Modifica

Non utilizzare l'architettura si sta immaginando.

Quanto micro sono i tuoi microservizi? Sarebbe ridicolo dare a ciascuno un t2.nano? Quindi crea ciascuna un'applicazione Docker EB per container singolo: le applicazioni EB worker possono essere gestite dai messaggi SQS. O utilizzare apex.run.

Modifica 1/31/18

AWS Fargate sembra piuttosto fresco.

+1

Fa esattamente questo. Per noi non è un problema enorme perché strutturiamo le nostre app in modo impilabile, dove di solito è corretto che siano ridimensionate. Se è necessario che un'app scalasse in modo indipendente, direi che dovrebbe essere un'altra app su EB. Sto davvero provando a pensare a un buon scenario in cui questo è necessario. Ho letto molti casi di persone che affermano questo desiderio e non riesco a decidere se è solo accademico, un problema di progettazione o un caso veramente valido. –