CodeShot

Blue-Green Deployment در مقابل Canary Release

Blue-Green دو محیط کاملاً یکسان (Blue و Green) نگه می‌دارد و ترافیک را یک‌باره از نسخه قدیم به نسخه جدید سوییچ می‌کند؛ Canary Release نسخه جدید را ابتدا فقط برای درصد کوچکی از کاربران فعال می‌کند و به‌تدریج ترافیک را افزایش می‌دهد تا ریسک کاهش یابد.

ویژگیBlue-Green DeploymentCanary 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.