Blue-Green Deployment در مقابل Canary Release
Blue-Green دو محیط کاملاً یکسان (Blue و Green) نگه میدارد و ترافیک را یکباره از نسخه قدیم به نسخه جدید سوییچ میکند؛ Canary Release نسخه جدید را ابتدا فقط برای درصد کوچکی از کاربران فعال میکند و بهتدریج ترافیک را افزایش میدهد تا ریسک کاهش یابد.
| ویژگی | Blue-Green Deployment | Canary Release |
|---|---|---|
| سرعت انتشار | کامل و آنی | تدریجی و مرحلهای |
| کاهش ریسک از طریق | امکان rollback فوری | تشخیص زودهنگام مشکل |
| زیرساخت لازم | دو محیط کامل و یکسان | مسیریابی ترافیک وزندار (weighted routing) |
| رصد قبل از انتشار کامل | ندارد (سوییچ یکباره) | دارد (بر اساس معیارهای زنده) |
کِی از Blue-Green Deployment استفاده کنیم؟
وقتی به بازگشت فوری (rollback) در صورت بروز مشکل نیاز دارید و میخواهید تغییر یکباره و قابل پیشبینی باشد، از Blue-Green استفاده کنید؛ چون فقط کافی است ترافیک را به محیط قبلی برگردانید.
کِی از Canary Release استفاده کنیم؟
وقتی میخواهید ریسک انتشار نسخه جدید را با آزمایش تدریجی روی بخش کوچکی از کاربران واقعی کاهش دهید و معیارها (خطا، تأخیر) را پیش از انتشار کامل رصد کنید، از Canary استفاده کنید.
مثال Blue-Green Deployment
# Switch service selector from blue to green
apiVersion: v1
kind: Service
metadata:
name: app-service
spec:
selector:
app: myapp
version: green # was: blue
مثال Canary Release
# Canary: 10% of traffic to new version
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
spec:
http:
- route:
- destination: { host: myapp, subset: v1 }
weight: 90
- destination: { host: myapp, subset: v2 }
weight: 10
اشتباه رایج
خیلیها تصور میکنند Blue-Green خودش یعنی انتشار تدریجی، در حالی که سوییچ در Blue-Green آنی و کامل است؛ برعکس، اگر بدون رصد معیارها ترافیک Canary را سریع به ۱۰۰٪ برسانید، عملاً مزیت اصلی Canary یعنی کشف زودهنگام مشکل را از دست دادهاید.
جمعبندی
نیاز به rollback فوری و ساده → Blue-Green؛ نیاز به کاهش ریسک با آزمایش تدریجی روی کاربران واقعی → Canary.
