استقرار سبز-آبی و قناری: شیرجه ای عمیق به استراتژی های استقرار مدرن

استقرار نرم افزار به طور قابل توجهی از روزهای توقف برنامه ریزی شده و انتشار بیگ بنگ تکامل یافته است. کاربران امروزی انتظار دارند که خدمات 24 ساعته در دسترس باشد و کسب و کارها باید ویژگی های جدید و اصلاحات را به طور مداوم بدون ایجاد اختلال در عملکرد خود به کار گیرند. در این پست میخواهم دو استراتژی پیچیده استقرار را بررسی کنم که به دستیابی به این اهداف کمک میکند: استقرار سبز-آبی و قناری.
استقرار آبی-سبز: رویکرد دو محیطی
تصور کنید که در حال انجام عمل جراحی قلب هستید، اما به جای عمل بر روی قلب تپنده، می توانید قلب جدیدی را در کنار قلب موجود بسازید و به سادگی پس از آماده شدن آن را تغییر دهید. این اساساً همان کاری است که استقرار سبز-آبی برای برنامه شما انجام می دهد.
مکانیسم اصلی
در یک راه اندازی آبی-سبز، می توانید دو محیط تولید یکسان را حفظ کنید: آبی و سبز. در هر زمان معین، تنها یک محیط در خدمت ترافیک تولید است. فرض کنید محیط آبی در حال حاضر زنده است. وقتی می خواهیم نسخه جدیدی را اجرا کنیم، ما:
- نسخه جدید را در محیط سبز مستقر کنید
- تست ها را اجرا کنید و محیط سبز را بررسی کنید
- مسیریاب/تعادل کننده بار را برای هدایت ترافیک به سمت سبز تغییر دهید
- در صورت نیاز، رنگ آبی را برای بازگشت سریع به عقب نگه دارید
در اینجا یک مثال کد وجود دارد که نشان می دهد چگونه می توان این کار را با استفاده از Kubernetes پیاده سازی کرد:
# Blue deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-blue
spec:
replicas: 3
selector:
matchLabels:
app: myapp
version: blue
template:
metadata:
labels:
app: myapp
version: blue
spec:
containers:
- name: myapp
image: myapp:1.0
---
# Green deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-green
spec:
replicas: 3
selector:
matchLabels:
app: myapp
version: green
template:
metadata:
labels:
app: myapp
version: green
spec:
containers:
- name: myapp
image: myapp:2.0
---
# Service (router)
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
selector:
app: myapp
version: blue # Switch this to 'green' to route traffic
ports:
- port: 80
targetPort: 8080
استقرار قناری: انقلاب تدریجی
در حالی که استقرار سبز-آبی یک تغییر همه یا هیچ است، استقرار قناری رویکردی تدریجی دارد. این اصطلاح از رویه تاریخی استفاده از پرندگان قناری در معادن زغال سنگ برای تشخیص گازهای خطرناک گرفته شده است – اگر قناری می مرد، معدنچیان می دانستند که باید تخلیه شوند.
جزئیات پیاده سازی
در استقرار قناری، ما:
- نسخه جدید را در کنار نسخه قدیمی قرار دهید
- درصد کمی از ترافیک را به نسخه جدید هدایت کنید
- اگر معیارها خوب به نظر می رسند، به تدریج ترافیک را افزایش دهید
- اگر مشکلاتی را تشخیص دادیم، برگردید
در اینجا نمونه ای از استفاده از سرویس مجازی Istio برای پیاده سازی مسیریابی قناری آورده شده است:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: myapp-vsvc
spec:
hosts:
- myapp.example.com
http:
- route:
- destination:
host: myapp-stable
subset: v1
weight: 90
- destination:
host: myapp-canary
subset: v2
weight: 10
مقایسه استراتژی ها
هر دو استراتژی جایگاه خود را در شیوه های استقرار مدرن دارند. استقرار سبز-آبی سادگی و بازگشت سریع را ارائه می دهد اما به منابع بیشتری نیاز دارد. استقرار قناری کنترل دقیق و مدیریت ریسک را فراهم می کند اما به نظارت و مدیریت ترافیک پیچیده تری نیاز دارد.
استفاده از استقرار سبز-آبی را در نظر بگیرید زمانی که:
- شما نیاز به ارتقاء اتمی دارید
- درخواست شما بدون تابعیت است
- شما می توانید دو برابر زیرساخت را بپردازید
استقرار قناری را زمانی انتخاب کنید که:
- شما می خواهید ویژگی های جدید را با کاربران واقعی آزمایش کنید
- شما به کنترل دقیقی بر روی عرضه نیاز دارید
- شما قابلیت نظارت قوی دارید
نگاه کردن به جلو
همانطور که به سمت استراتژیهای استقرار پیچیدهتر پیش میرویم، شاهد ظهور رویکردهای ترکیبی هستیم. به عنوان مثال، استفاده از استقرار قناری در یک تنظیمات سبز-آبی، یا اجرای پرچمهای ویژگی در کنار این استراتژیهای استقرار برای کنترل دقیقتر.
آینده احتمالاً دارای استراتژیهای استقرار خودکار و هوشمندتر است، احتمالاً با استفاده از یادگیری ماشینی برای شناسایی و پاسخگویی خودکار به مسائل استقرار، و تصمیمگیری برای استقرار بر اساس رفتار کاربر در زمان واقعی و معیارهای سیستم.
نکته کلیدی این است که این استراتژیهای استقرار فقط پیادهسازی فنی نیستند – آنها بلوکهای اساسی ارائه نرمافزار مدرن هستند که به کسبوکارها امکان میدهند با حفظ ثبات سریعتر حرکت کنند. درک و اجرای موثر آنها برای هر سازمانی که تحویل مستمر را انجام می دهد بسیار مهم است.