Tôi có nên sử dụng AWS Elastic Beanstalk hoặc Amazon EC2 Container Service (ECS) để mở rộng các vùng chứa Docker không?


81

Tôi đã phát triển một ứng dụng dựa trên Docker bao gồm nhiều dịch vụ nhỏ. Nó phải sử dụng các tin nhắn 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 đã thất bại trước Dịch vụ vùng chứa EC2. Bây giờ tôi không biết nên chọn cái nào.

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

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

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

Tôi không biết chính xác liệu Amazon ECS có đang 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 là mở rộng quy mô dựa trên các phiên bản / vùng chứa.


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

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

Câu trả lời:


68

EB và ECS thực sự đi xuống để kiểm soát. Bạn có muốn kiểm soát quy mô và dung lượng của mình hay bạn muốn điều đó được tóm tắt 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ính năng tự động chia tỷ lệ hay không. Với EB, bạn chỉ cần cung cấp một Dockerfile và EB sẽ đảm nhận việc mở rộng quy mô cung cấp 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 EB.

Đây là tài liệu 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 trước khi có thể bắt đầu triển khai Dockerfile để nó thực sự phụ thuộc vào 1) mức độ 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 dành cho cơ sở hạ tầng so với ứng dụng.


7
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ó mở rộng quy mô các vùng chứa, trên mỗi Vùng chứa không, vì vậy nếu chỉ một vùng chứa dưới tải, nó chỉ mở rộng quy mô này hoặc luôn mở rộng các phiên bản và bắt đầu container, bất kể chúng đang ở tải trọng nào?
orbatschow

6
Bây giờ ECS là GA, EB tận dụng ECS ​​để cung cấp cơ sở hạ tầng đa vùng chứa cho nó. Tự động điều chỉnh tỷ lệ được thực hiện bằng cách sử dụng nguyên thủy nhóm tự động mở rộng EC2 điển hình. Tuy nhiên, yếu tố kích hoạt để tăng hoặc giảm quy mô không phải là vùng chứa mà là nút phiên bản. Tức là nếu lưu lượng giao diện mạng hoặc tải CPU hoặc tải đĩa đạt đến một ngưỡng nhất định, thì cụm có thể mở rộng quy mô ra hoặc vào. Vì vậy, trong ví dụ của bạn, nếu nút của vùng chứa thứ 5 chịu tải nặng CPU, bạn có thể đặt trình kích hoạt nhóm tự động mở rộng trên đó.
alanwill


Cũng lưu ý rằng bạn có thể tiếp tục với cách tiếp cận ECS hướng vùng chứa được kiểm soát nhiều hơn và trì hoãn trách nhiệm kiểm soát cụm bằng cách sử dụng AWS Fargate .
dmulter

Làm thế nào về giá cả? Nó có khác không?
Daniel Vilela

12

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

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

Biên tập

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

Microservices của bạn là vi mô như thế nào? Sẽ là vô lý nếu cho họ mỗi người một t2.nano? Sau đó, biến chúng thành một ứng dụng Docker EB duy nhất - các ứng dụng EB worker có thể được điều khiển bởi các thông báo SQS. Hoặc sử dụng apex.run .

Chỉnh sửa 1/31/18:

AWS Fargate có vẻ khá tuyệt.

Chỉnh sửa 6/5/19:

Sử dụng EKS nếu bạn cần sắp xếp các thùng chứa, để giảm ngứa. Nhưng thực sự, hãy cố gắng tránh điều này. Hệ thống phân tán thật khó.


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 vì chúng tôi cấu trúc các ứng dụng của mình theo kiểu ngăn xếp, nơi chúng thường được chia tỷ lệ với nhau. Nếu nó cần thiết để một ứng dụng mở rộng quy mô độc lập, tôi muốn nói rằng đó phải là một ứng dụng khác trên EB. Tôi thực sự đang rất cố gắng để nghĩ ra một kịch bản tốt khi điều này là cần thiết. Tôi đã đọc nhiều trường hợp mọi người nêu mong muốn này và tôi không thể quyết định xem đó chỉ là vấn đề học thuật, thiết kế hay một trường hợp thực sự hợp lệ.
Jacob Thomason
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.