簡體   English   中英

我應該使用 AWS Elastic Beanstalk 還是 Amazon EC2 Container Service (ECS) 來擴展 Docker 容器?

[英]Should I use AWS Elastic Beanstalk or the Amazon EC2 Container Service (ECS) to scale Docker containers?

我開發了一個由多個微服務組成的基於 Docker 的應用程序。 它必須使用 Amazon SQS 消息並對其進行處理。 起初我想使用 AWS Elastic Beanstalk,但后來我被 EC2 容器服務迷住了。 現在不知道選哪個。

截至目前,Elastic Beanstalk 支持多容器環境。 這很棒,因為每個微服務在 docker 容器中都有自己的應用程序服務器。 下一個問題是縮放:

我不知道縮放機制是如何工作的。 例如:我的 Elastic Beanstalk 環境中有 5 個 docker 容器。 現在只有第五個 docker 容器負載很重,因為它有大量的 SQS 消息要處理,其他四個幾乎空閑,因為它們不需要太多 CPU 或者可能沒有很多 SQS 消息。 假設第 5 個容器運行 JBoss 應用程序服務器。 據我所知,即使有足夠的 CPU/內存可用,服務器也只能消耗有限數量的並行請求。

如果 JBoss Docker 容器無法處理大量請求,但有足夠的 CPU/內存可用,當然我想在同一個實例上自動啟動第二個 Docker/JBoss 容器。 但是,如果我沒有足夠的 CPU/內存,會發生什么? 當然,我想使用第二個實例,它可以通過 EB 中的自動縮放組進行配置。 現在第二個實例啟動了,但是除了第 5 個容器之外的每個容器幾乎都處於空閑狀態,當然我不希望它們在第二個實例中也產生 4 個不必要的容器,這會浪費資源。 只有第 5 個應該產生,其他的應該根據可配置的參數像第 5 個比例一樣縮放,例如:CPU/內存/SQS。

我不完全知道 Amazon ECS 是否正在這樣做,或者是否有可能,但我真的無法在互聯網上找到任何關於這個主題的資料,一般來說,這是基於實例/容器的擴展。

EB 與 ECS 真正歸結為控制。 你想控制你的擴展和容量,還是你想要更抽象,而是主要關注你的應用程序。 ECS 將為您提供控制,因為您必須指定集群中節點的大小和數量以及是否應使用自動擴展。 使用 EB,您只需提供一個 Dockerfile,而 EB 負責擴展您對節點數量和大小的配置,您基本上可以忘記使用 EB 路由的基礎設施。

這是 Docker 上的 EB 文檔:http: //docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker.html

使用 ECS,您必須先構建基礎架構,然后才能開始部署 Dockerfile,因此這實際上歸結為 1)您對基礎架構的熟悉程度和 2)您希望在基礎架構與應用程序上花費的工作量。

不要復活一個死問題,但希望這可以幫助某人。

接受的答案不夠明確:根據 OP 的描述,OP 想要 ECS,而不是 Multi-Container Elastic Beanstalk (MCEB)。 據我所知,MCEB 從未嘗試有效地將容器打包到實例中。 OP 在評論中詢問,“如果只有一個負載,它只擴展這個,還是總是擴展實例並啟動所有容器,無論它們處於什么負載下?” 答案是“后者”; MCEB 擴展實例並啟動所有容器,無論它們處於何種負載下。

編輯

不要使用你想象的架構。

你的微服務有多微? 給他們每個人一個 t2.nano 會很荒謬嗎? 然后讓它們每個都成為單容器 Docker EB 應用程序 - EB 工作程序應用程序可以由 SQS 消息驅動。

18 年 1 月 31 日編輯:

AWS Fargate 看起來很酷。

2019 年 6 月 5 日編輯:

如果您需要編排容器,請使用 EKS 來滿足您的需求。 但實際上,盡量避免這種情況。 分布式系統很難。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM