مقدمه
مهاجرت بدون خرابی (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);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 برای دیتابیسها استفاده کنید.
