آشنایی با استقرار آبی-سبز و قناری

در DevOps و تحویل مداوم، سبز آبی و استقرار قناری استراتژی هایی هستند که برای کاهش زمان خرابی و به حداقل رساندن خطر در طول به روز رسانی برنامه استفاده می شوند.
1. استقرار آبی-سبز
استقرار سبز-آبی شامل حفظ است دو محیط یکسان (آبی و سبز).
چگونه کار می کند:
- این محیط آبی نسخه زنده فعلی برنامه است.
- به روز رسانی ها یا تغییرات در محیط سبز، که آینه آبی است.
- هنگامی که محیط سبز آزمایش و تایید شد:
- ترافیک است تغییر داد از محیط آبی تا سبز.
- اگر مشکلاتی پیش آمد، می توانید به عقب برگرد با تغییر ترافیک به محیط آبی.
مزایا:
- توقف صفر در طول استقرار
- برگشت آسان به نسخه قبلی
- امکان آزمایش گسترده قبل از قرار دادن کاربران در معرض تغییرات را فراهم می کند.
چالش ها:
- نیاز دارد زیرساخت را دو برابر کنید به طور موقت (هر دو محیط آبی و سبز).
- می تواند برای برنامه های کاربردی با منابع فشرده گران باشد.
2. استقرار قناری
استقرار قناری شامل ایجاد تغییرات در a زیر مجموعه کوچکی از کاربران قبل از افشای کل پایگاه کاربر.
چگونه کار می کند:
- استقرار نسخه جدید به a درصد کمی ترافیک (“قناری”).
- معیارهای کلیدی مانند:
- نرخ خطا
- تأخیر
- عملکرد
- بازخورد کاربر
- اگر مشکلی شناسایی نشد، به تدریج درصد ترافیک را به نسخه جدید افزایش دهید.
- در صورت بروز مشکل، به نسخه قبلی برگردید.
مزایا:
- عرضه تدریجی خطرات را کاهش می دهد.
- آزمایش در دنیای واقعی با حداقل نوردهی
- اجازه می دهد حلقه های بازخورد سریعتر.
چالش ها:
- در مقایسه با استقرار آبی-سبز، پیکربندی پیچیده تر است.
- به نظارت و اتوماسیون قوی برای تجزیه و تحلیل عملکرد در طول عرضه نیاز دارد.
تفاوت های کلیدی
جنبه | آبی-سبز | قناری |
---|---|---|
سبک استقرار | کل محیط عوض میشه | عرضه تدریجی به کاربران خاص. |
کاهش خطر | بازگشت کامل با تغییر ترافیک. | بازگشت فقط برای ترافیک خاص. |
زیرساخت | به محیط های تکراری نیاز دارد. | از همین زیرساخت استفاده می کند. |
استفاده از مورد | ارتقاء بدون توقف. | تست ویژگی ها/نسخه های خاص |
زمان استفاده از هر کدام
سناریو | استراتژی پیشنهادی |
---|---|
شما باید به روز رسانی های مهم را با زمان خاموشی صفر اجرا کنید. | استقرار آبی-سبز |
میخواهید ویژگیها را به صورت تدریجی در ترافیک زنده آزمایش کنید. | استقرار قناری |
سرعت بازگشت مهمتر از عرضه تدریجی است. | استقرار آبی-سبز |
شما باید تغییرات را با زیرمجموعه ای از کاربران واقعی تأیید کنید. | استقرار قناری |
مثال دنیای واقعی:
استقرار آبی-سبز:
- سناریو: یک وب سایت تجارت الکترونیک یک طراحی مجدد رابط کاربری بزرگ راه اندازی می کند.
-
اعدام:
- “آبی” نسخه زنده فعلی است.
- “سبز” شامل طراحی مجدد است.
- هنگامی که محیط سبز آزمایش شد، DNS به مسیریابی ترافیک به محیط سبز تغییر می کند.
استقرار قناری:
- سناریو: یک سرویس استریم یک الگوریتم توصیه ویدیویی جدید را آزمایش می کند.
-
اعدام:
- الگوریتم جدید در ابتدا برای 5٪ از کاربران ارائه شده است.
- بر اساس عملکرد و بازخورد به تدریج به 50٪، سپس 100٪ افزایش یافت.
وظیفه: یک استراتژی استقرار آبی-سبز را در برنامه خود پیاده کنید
اجرای گام به گام استقرار آبی-سبز
1. پیش نیازها
- یک برنامه میزبانی شده بر روی یک پلت فرم ابری (به عنوان مثال، AWS).
- زیرساخت های موجود برای استقرار برنامه (مثلاً نمونه های EC2، کانتینرها یا توابع بدون سرور).
- الف متعادل کننده بار برای هدایت ترافیک بین محیط ها.
- ابزارهای نظارتی مناسب برای ردیابی عملکرد برنامه.
2. معماری سطح بالا
- محیط آبی: نسخه زنده و پایدار برنامه شما در حال حاضر به تمام ترافیک سرویس می دهد.
- محیط سبز: نسخه جدید برنامه شما، مستقر و آزمایش شده اما هنوز فعال نشده است.
- متعادل کننده بار: جزء مرکزی که ترافیک را بین محیط های آبی و سبز تغییر می دهد.
3. پیاده سازی در AWS
در اینجا نحوه استقرار سبز-آبی با استفاده از خدمات AWS مانند Elastic Load Balancing (ELB) و نمونه های EC2 آورده شده است.
مرحله 1: محیط آبی را تنظیم کنید
- نسخه پایدار برنامه خود را در نمونه های EC2 در یک گروه مقیاس خودکار (ASG) مستقر کنید.
- نمونه های EC2 را به یک گروه هدف متصل کنید (به عنوان مثال،
blue-target-group
) پشت یک Application Load Balancer (ALB).
مرحله 2: محیط سبز ایجاد کنید
- مجموعه جدیدی از نمونه های EC2 را در یک ASG جداگانه برای محیط سبز راه اندازی کنید.
- نسخه به روز شده برنامه خود را در این موارد مستقر کنید.
- این موارد را به یک گروه هدف جدید ضمیمه کنید (به عنوان مثال،
green-target-group
) پشت همان ALB.
مرحله 3: محیط سبز را آزمایش کنید
- از شنوندگان ALB برای هدایت درصد کمی از ترافیک (یا فقط ترافیک آزمایش داخلی) به محیط سبز استفاده کنید.
- با آزمایش در برابر محیط سبز، عملکرد، عملکرد و قابلیت اطمینان برنامه را تأیید کنید.
مرحله 4: ترافیک را به محیط سبز تغییر دهید
- پس از موفقیت آمیز بودن آزمایش، قوانین شنونده ALB را به روز کنید تا 100٪ ترافیک به آن ارسال شود
green-target-group
. - معیارهای سنجش (مثلاً تأخیر، نرخ خطا و بازخورد کاربر) را برای اطمینان از عملکرد صحیح محیط سبز بررسی کنید.
مرحله 5: محیط آبی را تمیز کنید
- پس از اعتبارسنجی کافی، نمونه های EC2 را در محیط آبی خاتمه دهید.
- پیکربندی زیرساخت را برای محیط آبی به عنوان پشتیبان نگه دارید تا زمانی که مطمئن شوید که نیازی به بازگشت نیست.
اسکریپت Terraform برای استقرار آبی-سبز AWS
در اینجا یک نمونه اسکریپت Terraform برای راه اندازی استقرار سبز-آبی با نمونه های ALB و EC2 آورده شده است.
provider "aws" {
region = "us-east-1"
}
resource "aws_security_group" "app_sg" {
name = "app-sg"
description = "Allow HTTP traffic"
vpc_id = "vpc-xxxxxxxx"
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
resource "aws_lb" "app_lb" {
name = "blue-green-alb"
internal = false
load_balancer_type = "application"
security_groups = [aws_security_group.app_sg.id]
subnets = ["subnet-xxxxxxxx", "subnet-yyyyyyyy"]
enable_deletion_protection = false
}
resource "aws_lb_target_group" "blue" {
name = "blue-target-group"
port = 80
protocol = "HTTP"
vpc_id = "vpc-xxxxxxxx"
target_type = "instance"
}
resource "aws_lb_target_group" "green" {
name = "green-target-group"
port = 80
protocol = "HTTP"
vpc_id = "vpc-xxxxxxxx"
target_type = "instance"
}
resource "aws_lb_listener" "app_listener" {
load_balancer_arn = aws_lb.app_lb.arn
port = 80
protocol = "HTTP"
default_action {
type = "forward"
target_group_arn = aws_lb_target_group.blue.arn
}
}
resource "aws_instance" "blue_instances" {
count = 2
ami = "ami-xxxxxxxx"
instance_type = "t2.micro"
security_groups = [aws_security_group.app_sg.name]
tags = {
Name = "blue-instance-${count.index}"
}
}
resource "aws_instance" "green_instances" {
count = 2
ami = "ami-yyyyyyyy"
instance_type = "t2.micro"
security_groups = [aws_security_group.app_sg.name]
tags = {
Name = "green-instance-${count.index}"
}
}
resource "aws_lb_target_group_attachment" "blue_targets" {
count = 2
target_group_arn = aws_lb_target_group.blue.arn
target_id = aws_instance.blue_instances[count.index].id
port = 80
}
resource "aws_lb_target_group_attachment" "green_targets" {
count = 2
target_group_arn = aws_lb_target_group.green.arn
target_id = aws_instance.green_instances[count.index].id
port = 80
}
4. معیارهای کلیدی برای نظارت
- تأخیر: مطمئن شوید که زمان پاسخ در محدوده قابل قبول است.
- نرخ های خطا: برای افزایش خطاهای 4xx یا 5xx نظارت کنید.
- بازخورد کاربر: برای شناسایی مشکلات احتمالی بازخورد جمع آوری کنید.
5. طرح بازگشت
- اگر محیط سبز با مشکلاتی مواجه شود:
- قواعد شنونده ALB را به روز کنید تا ترافیک را به آن هدایت کنید
blue-target-group
. - بررسی و حل مسائل موجود در محیط سبز.
- قواعد شنونده ALB را به روز کنید تا ترافیک را به آن هدایت کنید
مزایای استقرار آبی-سبز
- عدم توقف در هنگام استقرار
- برگشت بدون درز در صورت خرابی.
- تست بدون خطر به روز رسانی های جدید.
یادگیری مبارک!!!