Chiến lược phát hành Canary so với Blue / Green


125

Sự hiểu biết của tôi về bản phát hành canary là bản phát hành một phần cho tập hợp con các nút sản xuất có bật phiên cố định. Bằng cách đó, bạn có thể kiểm soát và giảm thiểu số lượng người dùng / khách hàng bị ảnh hưởng nếu bạn phát hành một lỗi xấu.

Sự hiểu biết của tôi về bản phát hành màu xanh lam / xanh lục là bạn có 2 môi trường sản xuất được nhân đôi ("xanh lam" và "xanh lục") và bạn đẩy các thay đổi ra tất cả các nút có màu xanh lam hoặc xanh lục cùng một lúc, sau đó sử dụng phép thuật mạng để kiểm soát người dùng được chuyển đến môi trường nào qua DNS.

Vì vậy, trước khi tôi bắt đầu, nếu bất cứ điều gì tôi đã nói cho đến nay là không chính xác, vui lòng bắt đầu bằng cách sửa chữa cho tôi!

Giả sử tôi ít nhiều đang đi đúng hướng, thì một vài câu hỏi về hai chiến lược:

  • Có tình huống nào mà chim hoàng yến được ưa thích hơn màu xanh lam / xanh lục và ngược lại không?
  • Có kịch bản nào trong đó một mô hình triển khai có thể thực hiện cả hai chiến lược cùng một lúc không?

5
Sự hiểu biết của bạn là đúng đắn, nhưng tôi sẽ không nói chiến lược xanh lam-xanh lá cây là cần phải triển khai cho tất cả các nút cùng một lúc. Bạn có thể triển khai chúng một cách nhàn nhã tùy thích - áp lực duy nhất là thời hạn của chính bạn. Ngoài ra, bạn có thể sử dụng màu xanh lam-xanh lục để chỉ thay đổi một tập hợp con các nút của bạn (ví dụ: chỉ sửa đổi một trong nhiều nhóm điểm cuối API).
Patrick M

1
Tổng hợp rất hay về những khái niệm này mà tôi thấy ở khắp mọi nơi mà không có định nghĩa rõ ràng trước tiên!
kheraud

Câu trả lời:


94

Phát hành xanh lam đơn giản hơn và nhanh hơn.

Bạn có thể phát hành màu xanh lam-xanh lục nếu bạn đã thử nghiệm phiên bản mới trong môi trường thử nghiệm và rất chắc chắn rằng phiên bản mới sẽ hoạt động chính xác trong quá trình sản xuất. Luôn sử dụng tính năng bật tắt là một cách tốt để tăng cường sự tin tưởng của bạn vào một phiên bản mới, vì phiên bản mới hoạt động giống hệt như phiên bản cũ cho đến khi ai đó lật một tính năng. Việc chia ứng dụng của bạn thành các dịch vụ nhỏ, độc lập có thể liên kết lại là một việc khác, vì có ít thứ để kiểm tra hơn và ít có thể bị hỏng hơn.

Bạn cần thực hiện phát hành canary nếu bạn không hoàn toàn chắc chắn rằng phiên bản mới sẽ hoạt động chính xác trong quá trình sản xuất. Ngay cả khi bạn là một người kiểm tra kỹ lưỡng, Internet là một nơi rộng lớn, phức tạp và luôn có những thách thức bất ngờ. Ngay cả khi bạn sử dụng tính năng bật tắt, một nút có thể được triển khai không chính xác.

Tự động hóa triển khai cần nỗ lực, vì vậy hầu hết các tổ chức sẽ có kế hoạch sử dụng chiến lược này hay chiến lược khác mọi lúc.

Vì vậy, hãy triển khai màu xanh lam nếu bạn cam kết thực hiện các phương pháp cho phép bạn tự tin làm như vậy. Nếu không, hãy gửi chim hoàng yến đi.

Bản chất của màu xanh lam là triển khai tất cả cùng một lúc và bản chất của việc triển khai canary là triển khai từng bước, vì vậy với một nhóm người dùng duy nhất, tôi không thể nghĩ ra một quy trình mà tôi sẽ mô tả là thực hiện cả hai cùng một lúc. Nếu bạn có nhiều nhóm người dùng độc lập, ví dụ như sử dụng các trung tâm dữ liệu khu vực khác nhau, bạn có thể làm màu xanh lam trong mỗi trung tâm dữ liệu và canary trên các trung tâm dữ liệu. Mặc dù nếu bạn không cần triển khai canary trong một trung tâm dữ liệu, bạn có thể sẽ không cần nó trên các trung tâm dữ liệu.


Vài lời về ý nghĩa của màu sắc: - Môi trường cũ có thể là màu xanh lam, màu xanh lá cây mới. - Trong lần phát hành tiếp theo, cái cũ sẽ là màu xanh. Wiki:> Nhiều ngôn ngữ không phân biệt giữa những gì trong tiếng Anh được mô tả là "xanh" và "xanh" và thay vào đó sử dụng một thuật ngữ bao trùm cả hai - "Grue"
kinjelom

Canary không phải lúc nào cũng nhanh hơn blue / green. Tất cả phụ thuộc vào quy trình làm việc CI và CD!
Ligemer

81

Tôi đã viết một bài luận chi tiết về chủ đề này tại đây: http://blog.itaysk.com/2017/11/20/deployment-strategies-defined

Theo tôi, sự khác biệt là phiên bản 'xanh' mới có được tiếp xúc với người dùng thực hay không. Nếu đúng, thì tôi sẽ gọi nó là Canary. Một cách phổ biến để triển khai Canary là Blue / Green thông thường với việc bổ sung định tuyến thông minh của những người dùng cụ thể vào phiên bản mới. Đọc bài đăng để so sánh chi tiết

Xanh lam / xanh lục: nhập mô tả hình ảnh ở đây

Canary: nhập mô tả hình ảnh ở đây


4
Hình minh họa của bạn thật tuyệt, tôi có thể cân nhắc nhúng chúng vào câu trả lời của bạn ở đây, nhưng giữ liên kết để tìm hiểu sâu hơn với các giải thích.
quickshiftin

Cảm ơn. Đã thêm chúng
itaysk

4
Giải thích rất tốt. Nhưng sẽ tốt hơn nếu hiển thị mẫu phần trăm tải của người dùng trên minh họa chim hoàng yến.
nikli

Sự khác biệt giữa "trong khi" và "sau" trong sơ đồ phát hành Canary là gì? Tôi mong đợi "sau" để trông giống như của phiên bản màu xanh / màu xanh lá cây
Kes115

cả hai phương pháp đều nhằm giảm thiểu rủi ro bằng cách đánh giá phiên bản mới. trong thời gian có nghĩa là phiên bản mới được triển khai nhưng vẫn chưa đưa ra quyết định về cách tiến hành. after nghĩa là sau khi một quyết định tích cực được đưa ra để tiếp tục.
itaysk

6

Mặc dù cả hai thuật ngữ này trông khá gần nhau, nhưng chúng có sự khác biệt tinh tế. Một người đặt niềm tin vào bản phát hành chức năng của bạn và người kia đặt niềm tin vào cách bạn phát hành.

Chim hoàng yến

  1. Bản phát hành canary là một kỹ thuật để giảm nguy cơ giới thiệu phiên bản phần mềm mới trong quá trình sản xuất bằng cách từ từ triển khai thay đổi cho một nhóm nhỏ người dùng trước khi triển khai cho toàn bộ cơ sở hạ tầng.

  2. Nó sắp có ý tưởng về cách phiên bản mới sẽ hoạt động (tích hợp với các ứng dụng khác, CPU, bộ nhớ, sử dụng đĩa, v.v.).

Xanh lam / xanh lục:

  1. Đó là về bản phát hành có thể dự đoán trước với việc triển khai thời gian chết bằng không.
  2. Hoàn trả dễ dàng trong trường hợp thất bại.
  3. Quy trình triển khai hoàn toàn tự động

4

Dưới đây là một số định nghĩa nội tuyến -

  • Triển khai Blue-Green - Khi triển khai phiên bản mới của ứng dụng, môi trường thứ hai sẽ được tạo. Khi môi trường mới được thử nghiệm, nó sẽ tiếp quản phiên bản cũ. Sau đó có thể tắt môi trường cũ.

     

  • Thử nghiệm A / B - Hai phiên bản của một ứng dụng đang chạy cùng một lúc. Một phần của các yêu cầu được chuyển đến mỗi. Các nhà phát triển sau đó có thể so sánh các phiên bản.  
  • Canary Release - Phiên bản mới của một microservice được bắt đầu cùng với các phiên bản cũ. Sau đó, phiên bản mới đó có thể nhận một phần yêu cầu và nhóm có thể kiểm tra cách phiên bản mới này tương tác với hệ thống tổng thể.

3

Một khởi đầu tốt của các định nghĩa. Tôi nghĩ rằng nó cũng hữu ích trong việc đưa ra quyết định cho chiến lược của bạn nếu bạn tách định nghĩa "phát hành" thành "triển khai" và "phát hành (chức năng)".

Triển khai (nhị phân)

Hành động triển khai nhị phân sản phẩm của bạn tới một hệ thống (sản xuất).

Phát hành (chức năng)

Hành động quản lý tính khả dụng của chức năng đối với (nhóm) người dùng.

Tại sao? Bạn thường có (nhiều) hai mối quan tâm khi "phát hành": 1) Lỗi / tương thích ngược / v.v. 2) Xác minh tính hợp lệ / khả năng sử dụng của các tính năng mới

Sau đó, hãy tự hỏi bản thân trước khi chọn chiến lược chế độ Canary hoặc Blue / xanh lá cây hoặc bất kỳ chế độ xám / hỗn hợp nào: Chúng tôi có (những) lo lắng nào khi phát hành / triển khai phiên bản mới? Và chỉ sau đó nếu bạn biết mối quan tâm của mình, hãy chọn chiến lược của bạn.

Ngoài ra, có thể thực hiện các chiến lược Triển khai / Phát hành phức tạp hơn. Ví dụ: trong một số đám mây / cơ sở hạ tầng, có thể có nhiều máy chủ sản xuất và chuyển tiếp tải theo các tỷ lệ khác nhau đến các máy chủ và phiên bản khác nhau của sản phẩm của bạn, đồng thời theo dõi độ ổn định trước khi mở rộng bản phát hành / triển khai cho tất cả người dùng.

Gắn cờ tính năng

Hành động "định cấu hình" (lạnh, hoặc thậm chí nóng) chức năng nào (không) khả dụng cho (nhóm) người dùng

Nếu bạn cũng làm điều gì đó như "gắn cờ tính năng", bạn có thể triển khai trước, đo lường tính hợp lý của bản phát hành của bạn ở góc độ tương thích ngược / lỗi và phát hành dần dần chức năng mới cho những người dùng khác nhau hoặc ngược lại (thu nhỏ hoặc thậm chí khôi phục chức năng và / hoặc mã nhị phân ). Tính năng gắn cờ cho phép tách tính khả dụng của chức năng khỏi việc triển khai các tệp nhị phân và đưa ra quyết định chi tiết hơn nhiều khi chỉ "triển khai / quay lại"

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.