برنامه نویسی

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

در DevOps و تحویل مداوم، سبز آبی و استقرار قناری استراتژی هایی هستند که برای کاهش زمان خرابی و به حداقل رساندن خطر در طول به روز رسانی برنامه استفاده می شوند.


1. استقرار آبی-سبز

استقرار سبز-آبی شامل حفظ است دو محیط یکسان (آبی و سبز).

چگونه کار می کند:

  1. این محیط آبی نسخه زنده فعلی برنامه است.
  2. به روز رسانی ها یا تغییرات در محیط سبز، که آینه آبی است.
  3. هنگامی که محیط سبز آزمایش و تایید شد:
    • ترافیک است تغییر داد از محیط آبی تا سبز.
  4. اگر مشکلاتی پیش آمد، می توانید به عقب برگرد با تغییر ترافیک به محیط آبی.

مزایا:

  • توقف صفر در طول استقرار
  • برگشت آسان به نسخه قبلی
  • امکان آزمایش گسترده قبل از قرار دادن کاربران در معرض تغییرات را فراهم می کند.

چالش ها:

  • نیاز دارد زیرساخت را دو برابر کنید به طور موقت (هر دو محیط آبی و سبز).
  • می تواند برای برنامه های کاربردی با منابع فشرده گران باشد.

2. استقرار قناری

استقرار قناری شامل ایجاد تغییرات در a زیر مجموعه کوچکی از کاربران قبل از افشای کل پایگاه کاربر.

چگونه کار می کند:

  1. استقرار نسخه جدید به a درصد کمی ترافیک (“قناری”).
  2. معیارهای کلیدی مانند:
    • نرخ خطا
    • تأخیر
    • عملکرد
    • بازخورد کاربر
  3. اگر مشکلی شناسایی نشد، به تدریج درصد ترافیک را به نسخه جدید افزایش دهید.
  4. در صورت بروز مشکل، به نسخه قبلی برگردید.

مزایا:

  • عرضه تدریجی خطرات را کاهش می دهد.
  • آزمایش در دنیای واقعی با حداقل نوردهی
  • اجازه می دهد حلقه های بازخورد سریعتر.

چالش ها:

  • در مقایسه با استقرار آبی-سبز، پیکربندی پیچیده تر است.
  • به نظارت و اتوماسیون قوی برای تجزیه و تحلیل عملکرد در طول عرضه نیاز دارد.

تفاوت های کلیدی

جنبه آبی-سبز قناری
سبک استقرار کل محیط عوض میشه عرضه تدریجی به کاربران خاص.
کاهش خطر بازگشت کامل با تغییر ترافیک. بازگشت فقط برای ترافیک خاص.
زیرساخت به محیط های تکراری نیاز دارد. از همین زیرساخت استفاده می کند.
استفاده از مورد ارتقاء بدون توقف. تست ویژگی ها/نسخه های خاص

زمان استفاده از هر کدام

سناریو استراتژی پیشنهادی
شما باید به روز رسانی های مهم را با زمان خاموشی صفر اجرا کنید. استقرار آبی-سبز
می‌خواهید ویژگی‌ها را به صورت تدریجی در ترافیک زنده آزمایش کنید. استقرار قناری
سرعت بازگشت مهمتر از عرضه تدریجی است. استقرار آبی-سبز
شما باید تغییرات را با زیرمجموعه ای از کاربران واقعی تأیید کنید. استقرار قناری

مثال دنیای واقعی:

استقرار آبی-سبز:

  • سناریو: یک وب سایت تجارت الکترونیک یک طراحی مجدد رابط کاربری بزرگ راه اندازی می کند.
  • اعدام:

    • “آبی” نسخه زنده فعلی است.
    • “سبز” شامل طراحی مجدد است.
    • هنگامی که محیط سبز آزمایش شد، DNS به مسیریابی ترافیک به محیط سبز تغییر می کند.

استقرار قناری:

  • سناریو: یک سرویس استریم یک الگوریتم توصیه ویدیویی جدید را آزمایش می کند.
  • اعدام:

    • الگوریتم جدید در ابتدا برای 5٪ از کاربران ارائه شده است.
    • بر اساس عملکرد و بازخورد به تدریج به 50٪، سپس 100٪ افزایش یافت.

وظیفه: یک استراتژی استقرار آبی-سبز را در برنامه خود پیاده کنید


اجرای گام به گام استقرار آبی-سبز

1. پیش نیازها

  • یک برنامه میزبانی شده بر روی یک پلت فرم ابری (به عنوان مثال، AWS).
  • زیرساخت های موجود برای استقرار برنامه (مثلاً نمونه های EC2، کانتینرها یا توابع بدون سرور).
  • الف متعادل کننده بار برای هدایت ترافیک بین محیط ها.
  • ابزارهای نظارتی مناسب برای ردیابی عملکرد برنامه.

2. معماری سطح بالا

  • محیط آبی: نسخه زنده و پایدار برنامه شما در حال حاضر به تمام ترافیک سرویس می دهد.
  • محیط سبز: نسخه جدید برنامه شما، مستقر و آزمایش شده اما هنوز فعال نشده است.
  • متعادل کننده بار: جزء مرکزی که ترافیک را بین محیط های آبی و سبز تغییر می دهد.

3. پیاده سازی در AWS

در اینجا نحوه استقرار سبز-آبی با استفاده از خدمات AWS مانند Elastic Load Balancing (ELB) و نمونه های EC2 آورده شده است.


مرحله 1: محیط آبی را تنظیم کنید

  1. نسخه پایدار برنامه خود را در نمونه های EC2 در یک گروه مقیاس خودکار (ASG) مستقر کنید.
  2. نمونه های EC2 را به یک گروه هدف متصل کنید (به عنوان مثال، blue-target-group) پشت یک Application Load Balancer (ALB).

مرحله 2: محیط سبز ایجاد کنید

  1. مجموعه جدیدی از نمونه های EC2 را در یک ASG جداگانه برای محیط سبز راه اندازی کنید.
  2. نسخه به روز شده برنامه خود را در این موارد مستقر کنید.
  3. این موارد را به یک گروه هدف جدید ضمیمه کنید (به عنوان مثال، green-target-group) پشت همان ALB.

مرحله 3: محیط سبز را آزمایش کنید

  1. از شنوندگان ALB برای هدایت درصد کمی از ترافیک (یا فقط ترافیک آزمایش داخلی) به محیط سبز استفاده کنید.
  2. با آزمایش در برابر محیط سبز، عملکرد، عملکرد و قابلیت اطمینان برنامه را تأیید کنید.

مرحله 4: ترافیک را به محیط سبز تغییر دهید

  1. پس از موفقیت آمیز بودن آزمایش، قوانین شنونده ALB را به روز کنید تا 100٪ ترافیک به آن ارسال شود green-target-group.
  2. معیارهای سنجش (مثلاً تأخیر، نرخ خطا و بازخورد کاربر) را برای اطمینان از عملکرد صحیح محیط سبز بررسی کنید.

مرحله 5: محیط آبی را تمیز کنید

  1. پس از اعتبارسنجی کافی، نمونه های EC2 را در محیط آبی خاتمه دهید.
  2. پیکربندی زیرساخت را برای محیط آبی به عنوان پشتیبان نگه دارید تا زمانی که مطمئن شوید که نیازی به بازگشت نیست.

اسکریپت 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. طرح بازگشت

  • اگر محیط سبز با مشکلاتی مواجه شود:
    1. قواعد شنونده ALB را به روز کنید تا ترافیک را به آن هدایت کنید blue-target-group.
    2. بررسی و حل مسائل موجود در محیط سبز.

مزایای استقرار آبی-سبز

  1. عدم توقف در هنگام استقرار
  2. برگشت بدون درز در صورت خرابی.
  3. تست بدون خطر به روز رسانی های جدید.

یادگیری مبارک!!!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا