26

Sự hiểu biết của tôi về Elastic Beanstalk là khi bạn triển khai phiên bản ứng dụng mới, nó sẽ triển khai phiên bản Amazon EC2 mỗi lần một trường hợp (nếu bạn có nhiều hơn một). Tuy nhiên, ngay cả với tối thiểu hai trường hợp, ứng dụng của tôi phải chịu một lượng thời gian ngừng hoạt động ngắn khi tôi tải lên một .war mới khi triển khai nó, như thể nó đang cập nhật cả hai cùng một lúc. Có cách nào tôi có thể đảm bảo không có thời gian chết và rằng một trong những trường hợp được cập nhật đầy đủ và chấp nhận yêu cầu trước khi bắt đầu tiếp theo: Đây là cách các sự kiện nhìn. Lưu ý điều này là không có tải trên ứng dụng, do đó, nó sẽ chỉ trở nên tồi tệ hơn với lưu lượng truy cập sản xuất.Làm thế nào để ngăn chặn thời gian chết trong AWS Elastic Beanstalk triển khai một phiên bản mới của ứng dụng?

INFO 
Environment update completed successfully. 

INFO 
New application version was deployed to running EC2 instances. 

ERROR 
The application did not respond at the health check URL. 

INFO 
Waiting for 8 seconds while EC2 instances download the updated application version. 

INFO 
Deploying version SomethingMore to 2 instance(s). 

Trả lời

19

Để đạt được mục tiêu này trong Elastic Beanstalk, bạn sẽ cần phải mở rộng thủ tục triển khai để tạo điều kiện nhiều môi trường (xem AWS Elastic Beanstalk Components):

Một môi trường là một phiên bản được triển khai vào AWS tài nguyên. Mỗi môi trường chỉ chạy một phiên bản duy nhất, tuy nhiên bạn có thể chạy cùng một phiên bản hoặc các phiên bản khác nhau trong nhiều môi trường cùng một lúc. [...] Để biết thêm thông tin khác về môi trường và các tài nguyên được tạo , hãy xem Architectural Overview. [tôi nhấn mạnh]

Tính năng này rất hữu ích để thử nghiệm/gỡ lỗi các phiên bản riêng biệt đã có, nhưng đặc biệt này cho phép trao đổi nóng của môi trường là tốt, thấy Deploying Versions With Zero Downtime cho một hương tương ứng:

Kể từ AWS Elastic Beanstalk thực hiện cập nhật tại chỗ khi bạn cập nhật các phiên bản ứng dụng của mình, bạn sẽ gặp phải một số thời gian chết. Tuy nhiên, có thể tránh thời gian chết này bằng cách hoán đổi CNAMEs cho môi trường của bạn. Phần này hướng dẫn bạn cách thực hiện việc hoán đổi CNAME bằng Bảng điều khiển quản lý AWS, dòng lệnh giao diện hoặc API. [tôi nhấn mạnh]

+0

Cảm ơn, môi trường trao đổi CNAME chính xác là những gì tôi đang tìm kiếm. – Peter

+6

Tôi đã thử tính năng này trên ứng dụng sản xuất của mình và quan sát thấy rằng ngay cả sau khi trao đổi CNAME và chờ DNS TTL hết hạn, một phần đáng kể lưu lượng truy cập vẫn sẽ chuyển sang môi trường beanstalk cũ. Tôi nghi ngờ điều này là do khách hàng đang nắm giữ bộ nhớ cache DNS lâu hơn họ nên. Nếu khách hàng không thể dựa vào để tuân theo TTL, thì kỹ thuật hoán đổi CNAME này dường như không phải là cách đáng tin cậy để thực hiện triển khai ZDD với Beanstalk. –

+0

@AaronIba Đó là một quan sát rất tốt. Bạn đã nghĩ ra một số cách khác?Tôi đang nghĩ đến việc chỉ đơn giản là ghi đè lên phiên bản ứng dụng hiện có và tắt các trường hợp hiện có theo cách thủ công (ASG sẽ tăng cấp độ mới và kéo phiên bản ứng dụng đã cập nhật). Nhưng đó là quá trình thủ công/chậm/rườm rà và cảm thấy như một hack. –

6

Tôi biết đây là một câu hỏi cũ, nhưng đối với người googling (như tôi), đàn hồi cây đậu phát hành phiên bản ứng dụng cán triển khai ngày hôm nay (2014/11/02).

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.rolling-version-deploy.html?sc_ichannel=em&sc_icountry=global&sc_icampaigntype=launch&sc_icampaign=em_125873140&sc_idetail=em_14124901705&ref_=pe_411040_125873140_8

này cho phép bạn cập nhật một phần của hạm đội của bạn với ứng dụng mới của bạn tại một thời điểm, đảm bảo rằng luôn có tổ chức sẵn để đưa giao thông.

+0

Điều này chỉ hoạt động nếu bạn đang chạy nhiều trường hợp đằng sau một cân bằng tải? Từ cách nó được mô tả, nó có vẻ giống như một trường hợp duy nhất sẽ vẫn đi xuống. –

+1

Yup, bạn cần nhiều hơn một ví dụ trong môi trường Cây đậu Đàn hồi của bạn để tránh thời gian chết. Điều này đúng ở mọi nơi; nếu bạn đang phân phối lưu lượng truy cập từ một máy chủ lưu trữ và bạn cập nhật máy chủ lưu trữ (ngay cả khi nó được đặt tại chỗ), bạn có thể gặp phải một số thời gian chết. – zongweil

+0

Tuyên bố trên chỉ đơn giản là không đúng sự thật. Tôi đã làm không thời gian chết triển khai trên một máy chủ duy nhất với nginx. (Không phải trên beanstalk đàn hồi.) –

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