رفتن به محتوا
بازگشت به وبلاگ
خودکارسازی

استراتژی‌های مهاجرت زیرساخت بدون Downtime

برنامه‌ریزی و اجرای مهاجرت بدون Downtime: استقرارهای Blue-Green، استراتژی‌های Cutover ترافیک، برنامه‌های Rollback و مراحل اعتبارسنجی.

آذر ۱۴۰۴
۱۴ دقیقه مطالعه

مقدمه

مهاجرت بدون خرابی (zero-downtime) به معنای جابجایی زیرساخت، دیتابیس‌ها یا اپلیکیشن‌ها بدون تجربه وقفه توسط کاربران است. این یکی از چالش‌برانگیزترین مسائل در مهندسی production است.

الگوی Blue-Green

BASH
# تغییر upstream nginx بدون restart
upstream backend_green {
    server 10.0.2.10:8080;
}

# reload بدون downtime
nginx -t && nginx -s reload

مهاجرت دیتابیس (Expand-Contract)

فاز ۱ - Expand: اضافه کردن ستون جدید
SQL
ALTER TABLE users ADD COLUMN phone_e164 VARCHAR(20) NULL;
CREATE INDEX CONCURRENTLY idx_users_phone ON users(phone_e164);
فاز ۲ - Backfill دسته‌ای
PYTHON
while True:
    cur.execute('''
        UPDATE users SET phone_e164 = normalize_phone(phone)
        WHERE id > %s AND phone_e164 IS NULL
        LIMIT 1000 RETURNING id
    ''', (last_id,))
    if not cur.fetchall(): break
    time.sleep(0.1)  # محدود کردن بار دیتابیس

Rolling Updates در Kubernetes

YAML
strategy:
  type: RollingUpdate
  rollingUpdate:
    maxUnavailable: 0   # هیچ‌وقت کمتر از replicas را کاهش ندهد
    maxSurge: 2         # تا ۲ pod اضافی مجاز است

Graceful Shutdown

PYTHON
def handle_sigterm(signum, frame):
    shutdown_requested = True
    # ۳۰ ثانیه صبر برای اتمام requestهای در حال پردازش
    time.sleep(30)

signal.signal(signal.SIGTERM, handle_sigterm)

مهاجرت بدون downtime نیازمند برنامه‌ریزی دقیق، بررسی سلامت مناسب و انتقال تدریجی ترافیک است. با blue-green برای سرویس‌های بدون حالت شروع کنید و از الگوی expand-contract برای دیتابیس‌ها استفاده کنید.