55

Tôi đã phát triển một ứng dụng dựa trên Docker bao gồm nhiều microservices. Nó phải tiêu thụ các thông điệp SQS của Amazon và xử lý chúng. Lúc đầu, tôi muốn sử dụng AWS Elastic Beanstalk, nhưng sau đó tôi đã ghé qua EC2 Container Service. Bây giờ tôi không biết nên chọn cái nào.Tôi có nên sử dụng AWS Elastic Beanstalk hoặc Amazon EC2 Container Service (ECS) để mở rộng các thùng chứa Docker không?

Hiện tại, Elastic Beanstalk hỗ trợ Môi trường đa vùng chứa. Điều này thật tuyệt vời bởi vì mọi dịch vụ microservice đều có máy chủ ứng dụng riêng bên trong một thùng chứa docker. Vấn đề tiếp theo là mở rộng quy mô:

Tôi không biết cơ chế mở rộng hoạt động như thế nào. Ví dụ: Tôi có 5 thùng chứa trong đế của tôi. Bây giờ chỉ có container thứ 5 chứa tải nặng, vì nó có một số lượng lớn các thông điệp SQS để xử lý, bốn thư khác gần như nhàn rỗi, vì chúng không cần nhiều CPU hoặc có thể không có nhiều thông điệp SQS. Giả sử container thứ 5 chạy một máy chủ ứng dụng JBoss. Theo tôi biết, máy chủ chỉ có thể tiêu thụ số lượng yêu cầu song song hạn chế ngay cả khi có đủ CPU/bộ nhớ.

Nếu thùng chứa JBoss Docker không thể xử lý số lượng yêu cầu, nhưng có đủ CPU/bộ nhớ, tất nhiên tôi muốn tự động khởi động thùng chứa Docker/JBoss thứ hai trên cùng một trường hợp. Nhưng điều gì xảy ra, nếu tôi không có đủ CPU/bộ nhớ? Tất nhiên tôi muốn quay về một trường hợp thứ hai, được cấu hình thông qua một nhóm tự động mở rộng quy mô trong EB. Bây giờ một ví dụ thứ hai quay lên, nhưng mỗi container ngoại trừ thứ 5 gần như nhàn rỗi, tất nhiên tôi không muốn chúng đẻ ra 4 không cần thiết ở dụ thứ hai nữa, đó sẽ là một sự lãng phí tài nguyên. Chỉ 5 nên sinh sản và những người khác nên quy mô như quy mô thứ 5 dựa trên các thông số có thể định cấu hình như ví dụ: CPU/bộ nhớ/SQS.

Tôi không biết chính xác liệu Amazon ECS có làm điều đó hay không, nhưng tôi thực sự không thể tìm thấy bất kỳ nguồn nào trên internet về chủ đề này, nói chung, mở rộng dựa trên các trường hợp /hộp đựng.

+0

Bạn có cảm thấy rằng vấn đề của bạn đã được giải quyết chưa? Tôi có một mối quan tâm rất tương tự về EB, tôi nghi ngờ nó khởi động tất cả 5 container trong một trường hợp riêng biệt –

+2

Tôi cũng bối rối. Câu trả lời được chọn không thực sự giải thích cách tính tỷ lệ hoạt động trong cả hai dịch vụ. Ngoài ra ECS/EB thực sự đá một container thứ 5 khác và sau đó chạy cả hai song song trên cùng một trường hợp nếu có đủ tài nguyên? – codepushr

Trả lời

47

EB và ECS thực sự nằm trong tầm kiểm soát. Bạn có muốn kiểm soát khả năng mở rộng quy mô và dung lượng của mình hay bạn muốn có nhiều nội dung trừu tượng hơn và thay vào đó tập trung chủ yếu vào ứng dụng của bạn. ECS sẽ cung cấp cho bạn quyền kiểm soát, vì bạn phải chỉ định kích thước và số lượng các nút trong cụm và có nên sử dụng tỷ lệ tự động hay không. Với EB, bạn chỉ cần cung cấp một Dockerfile và EB sẽ chăm sóc mở rộng quy mô của bạn về số lượng và kích thước của các nút, về cơ bản bạn có thể quên đi cơ sở hạ tầng với tuyến đường EB.

Đây là tài liệu hướng dẫn EB trên Docker: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker.html

Với ECS bạn sẽ phải xây dựng cơ sở hạ tầng đầu tiên trước khi bạn có thể bắt đầu triển khai các Dockerfile nên nó thực sự đi xuống 1) quen thuộc của bạn với cơ sở hạ tầng và 2) mức độ nỗ lực mà bạn muốn chi tiêu cho cơ sở hạ tầng so với ứng dụng.

+5

Có, nhưng cơ chế tự động mở rộng quy mô của cả hai dịch vụ hoạt động như thế nào, Elastic Beanstalk có quy mô các thùng chứa, mỗi Vùng chứa hay không, vì vậy nếu chỉ có một tải, nó chỉ có tỷ lệ này hoặc luôn mở rộng các trường hợp và bắt đầu tất cả các thùng chứa, không có vấn đề gì dưới tải chúng là gì? – orbatschow

+5

Bây giờ ECS là GA, EB thúc đẩy ECS cung cấp cơ sở hạ tầng đa container. Việc tự động mở rộng quy mô được thực hiện bằng cách sử dụng nguyên mẫu nhóm tự động quy mô EC2 điển hình. Các yếu tố kích hoạt để mở rộng quy mô lên hoặc xuống không phải là container tuy nhiên nhưng nút thể hiện. I E. nếu lưu lượng giao diện mạng, hoặc tải CPU hoặc tải đĩa đạt đến ngưỡng nhất định, thì cụm có thể mở rộng hoặc ra. Vì vậy, trong ví dụ của bạn, nếu nút của container thứ 5 dưới tải CPU nặng, bạn có thể đặt trình kích hoạt nhóm tự động dựa trên cái đó. – alanwill

+0

Dưới đây là một số tài nguyên để giúp bạn: 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

Không hồi sinh câu hỏi đã chết, nhưng hy vọng điều này sẽ giúp ai đó.

Câu trả lời được chấp nhận không đủ rõ ràng: dựa trên những gì được mô tả trong OP, OP muốn ECS, chứ không phải là Cây đậu phụ có nhiều ngăn chứa (MCEB). Theo như tôi có thể nói, MCEB không bao giờ cố gắng đóng gói các thùng chứa một cách hiệu quả vào các trường hợp. OP hỏi trong một bình luận, "nếu chỉ có một tải, nó chỉ có quy mô này, hoặc nó luôn luôn mở rộng quy mô các trường hợp và bắt đầu tất cả các thùng chứa, không có vấn đề theo tải chúng là gì?" Và câu trả lời là "cái sau"; MCEB tăng quy mô các trường hợp và bắt đầu tất cả các vùng chứa, bất kể chúng tải dưới mức nào.

Chỉnh sửa

Không sử dụng kiến ​​trúc bạn đang tưởng tượng.

Micro dịch vụ của bạn vi mô như thế nào? Nó sẽ là vô lý để cung cấp cho họ mỗi một t2.nano? Sau đó, làm cho chúng mỗi ứng dụng Docker EB đơn container - ứng dụng nhân viên EB có thể được điều khiển bởi các thông điệp SQS. Hoặc sử dụng apex.run.

Chỉnh sửa 1/31/18

AWS Fargate có vẻ khá thú vị.

+1

Nó thực hiện chính xác điều này. Đối với chúng tôi, đó không phải là một vấn đề lớn bởi vì chúng tôi cấu trúc các ứng dụng của mình theo kiểu xếp chồng mà thường không sao khi chúng được thu nhỏ lại với nhau. Nếu nó cần thiết cho một ứng dụng để mở rộng quy mô một cách độc lập, tôi muốn nói rằng nên là một ứng dụng khác trên EB. Tôi thực sự đang cố gắng nghĩ về một tình huống tốt khi cần thiết. Tôi đã đọc nhiều trường hợp của người nói ra mong muốn này và tôi không thể quyết định nếu nó chỉ là học tập, một vấn đề thiết kế, hoặc một trường hợp thực sự hợp lệ. –

Các vấn đề liên quan