🔥 غیر قابل تمدید فقط تا پایان امشب، روز آخر تخفیف‌های بلک فرایدی!
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ صادق
نحوه تشخیص down شدن یه نود یا قطع شدن ارتباط شبکه نود
جامعه هوش مصنوعی ایجاد شده در ۱۴ مرداد ۱۴۰۴

با سلام

فرض کنید یه نود شبکه براش قطع بشه و ریسپانس نده به سرور‌های دیگ سیستم چطور میخواد تشخیص اون نود داون شده یا شبکش قطع شده؟ 
اگر درست فهمیده باشم چون اگر شبکه قطع شده باشه جزو partition tolerance حساب میشه ولی اگر نود داون شده باشه جزو availability حساب میشه؟

سلام بله
تئوری CAP می‌گوید در یک سیستم توزیع شده، در مواجهه با Partition (قطع ارتباط بین بخشی از نودها)، شما نمی‌توانید همزمان:

Consistency (یکسان بودن داده‌ها در همه نودها)

Availability (پاسخ‌دهی هر نود به درخواست با داده منطبق بر قوانین سیستمتان) را تضمین کنید.

به زبان ساده: وقتی Network Partition رخ دهد، سیستم باید بین پاسخ‌دادن ادامه‌دار حتی بدون همه داده‌ها (Availability) یا حفظ سازگاری کامل داده‌ها (Consistency) یکی را انتخاب کند.

حالا

چطور سیستم بفهمد که یک نود واقعاً داون شده (Crash یا خاموش شده) یا فقط ارتباط شبکه‌اش قطع شده؟

چالش اینجاست که از دید بقیه نودها نتیجه‌ی دیده‌شده یکسان است:

در هر دو حالت، آن نود هیچ پاسخی نمی‌دهد.

شبکه‌های توزیع‌شده معمولاً با ناهمزمانی و تاخیر غیرقابل‌پیش‌بینی کار می‌کنند، بنابراین نمی‌توان با قطعیت گفت مشکل از خود نود است یا از مسیر شبکه (Partition).

 

هیچ سیستم به صورت قطعی نمی‌تواند با قطعیت تشخیص دهد که نود «مرده» یا فقط «دسترس‌ناپذیر» شده — چون این دقیقاً یکی از محدودیت‌های مدل نامتقارن شبکه (Asynchronous network) و حتی قضیه FLP impossibility است.

معمولاً کارهایی که انجام می‌شود:

  1. Heartbeat / Health Check
    هر نود به صورت دوره‌ای پیام «من زنده‌ام» به بقیه می‌فرستد.
    اگر مدتی پیام نیامد، فرض بر این می‌شود که نود داون یا شبکه قطع شده.
  2. Timeout + سناریوی مشکوک
    اگر پاسخی در بازه تعیین شده نیاید، سیستم تصمیم تجاری خودش را می‌گیرد (مثلاً فرض داون و انتخاب یک Leader جدید).
  3. Gossip Protocols
    پخش اخبار وضعیت نودها بین همه اعضا برای کاهش احتمال خطای تشخیص.
  4. Failure Detectors 
    به جای تصمیم دودویی “زنده/مرده”، یک احتمال یا نمره می‌دهند که چقدر فکر می‌کنیم نود مرده.

 

از دید CAP:

اگر شبکه قطع شده باشد → این یک Partition است و شما وارد حالت P می‌شوید. باید بین C و A یکی را قربانی کنید.

اگر نود واقعاً داون شده باشد → خود نود دیگر در سیستم نیست. برای سایر نودها، از دید عملی، نتیجه مشابه Partition آن نود خواهد بود (چون دسترسی ندارند).
این موضوع عملاً Availability کل سیستم را تحت تاثیر می‌گذارد.

یعنی:

در عمل، خیلی اوقات سیستم‌ها فرق نمی‌گذارند چون از نظر دیگر نودها داون‌شدن یک نود و Partition‌شدن آن رفتار یکسانی دارد: «پاسخ نمی‌آید».

 

مسعود کاویانی ۱۶ آبان ۱۴۰۴، ۲۰:۴۲