قفل توزیع‌شده و انتخاب رهبر

قفل توزیع‌شده با Redis و انتخاب رهبر با Zookeeper — هماهنگی سرورها در سیستم توزیع‌شده

مشکل: دو سرور، یک کار!

«هر شب بکاپ بگیر» روی ۳ سرور زمان‌بندی شده → سه بکاپ هم‌زمان! یا: دو کاربر آخرین بلیط را هم‌زمان می‌خرند!

در تک‌پروسه: lock ساده. در سیستم توزیع‌شده؟ قفل توزیع‌شده لازم است!

قفل با Redis — SET NX

SET lock:backup "server1" NX EX 30

NX: فقط اگر وجود ندارد (atomic!)
EX 30: انقضا ۳۰ ثانیه (سرور مرد = قفل آزاد!)

خطرات ظریف

انتخاب رهبر (Leader Election)

الگوی رایج: یک «رهبر» بین نودها که کارهای هماهنگی را انجام دهد (نوشتن، زمان‌بندی). رهبر مرد؟ بقیه رهبر جدید!

با Zookeeper/etcd:

  1. هر نود یک «znode موقت» می‌سازد: /election/node-۱
  2. کوچک‌ترین شماره = رهبر!
  3. زنود موقت: اتصال قطع = خودکار حذف → بقیه متوجه مرگ رهبر!
  4. نود بعدی «مراقب» قبلی است — مرگ رهبر = ارتقای فوری

کاربردهای واقعی

الگومثال
قفل توزیع‌شدهجلوگیری از خرید دوباره بلیط، cron یکتا
رهبرKafka (controller)، دیتابیس‌ها (master)
هماهنگیخدمات کشف (service discovery)
نکته: قفل توزیع‌شده «سخت» است — اگر می‌توانید با طراحی (idempotency، صف، تراکنش DB) از قفل فرار کنید، بهتر! قفل آخرین راه است.

جمع‌بندی

این مبحث بخشی از دوره آموزش کامل طراحی سیستم (System Design) است.

ابزارهای مرتبط