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.