دربارهٔ این فصل
یادداشتِ همراه نواروقتی کامپیوتر شخصی شما کاملاً سالم کار میکند یا ناگهان صفحهٔ آبی مرگ را نشان میدهد، تکلیف روشن است؛ اما آیا میدانید چرا ساختن نرمافزار روی چند کامپیوتر متصل به شبکه دنیایی کاملاً متفاوت و پر از ابهام است؟
این موضوع در فصل هشتم کتاب «طراحی برنامههای دادهگرا» اثر «مارتین کلپمن» بررسی شده و نشان میدهد چرا فرض اینکه همهچیز ممکن است خراب شود در سیستمهای توزیعشده یک ضرورت است.
اولین چالش جدی، غیرقابلاعتماد بودن شبکههاست. در سیستمهای توزیعشده، ماشینها از طریق شبکه با هم ارتباط دارند و شبکه تضمینی نمیدهد که پیامی برسد یا چه زمانی برسد. وقتی پیامی میفرستید و پاسخی نمیگیرید، نمیتوانید تشخیص دهید که آیا درخواست شما گم شده، گره مقابل از کار افتاده یا پاسخ در راه برگشت تأخیر داشته است. راه حل معمول استفاده از زمانسنج timeout است؛ اما تعیین یک مقدار ثابت برای آن دشوار است زیرا تأخیرهای شبکه به دلیل ازدحام صفها متغیر هستند.
دومین مشکل به ساعتهای سیستم مربوط میشود. ماشینهای مختلف ساعتهای سختافزاری مستقل دارند که سرعتشان با هم فرق میکند و به مرور زمان دچار انحراف میشود. حتی با پروتکل همگامسازی زمان Network Time Protocol (NTP)، ساعتها ممکن است ناگهان بپرند یا عقب بمانند. استفاده از ساعتهای دیوارنگاره time-of-day clock برای مرتبسازی تراکنشها خطرناک است، زیرا اگر ساعت یک گره جلوتر باشد، ممکن است نوشتههای جدیدتر را به اشتباه حذف کند.
سومین مسئله، وقفههای پردازش process pauses است. یک گره ممکن است وسط اجرای کار به خاطر مکث زبالهروب حافظه garbage collection متوقف شود، بدون اینکه خودش بفهمد. در این فاصله، سایر گرهها فکر میکنند او مرده و گره دیگری را به جایش انتخاب میکنند؛ اما وقتی گره متوقفشده بیدار میشود، همچنان فکر میکند رهبر است و دست به عملیات خطرناک میزند.
چهارمین ایده به حقیقت و اجماع مربوط میشود. در یک سیستم توزیعشده، هیچ گرهی نمیتواند به تنهایی همهچیز را درست تشخیص دهد، چون شبکه و زمان قابلاعتماد نیستند. به همین دلیل تصمیمگیریها به رأیگیری اکثریت quorum نیاز دارد تا مشخص شود کدام گره واقعاً زنده یا رهبر است. برای جلوگیری از خرابکاری گرههایی که به اشتباه فکر میکنند هنوز رهبرند، میتوان از توکنهای حصارکشی fencing tokens استفاده کرد تا سیستم ذخیرهسازی درخواستهای قدیمی با توکن کهنه را رد کند.
پیشنهاد من به عنوان طراح سیستم این است که هیچگاه به شبکه پایدار، ساعتهای دقیق و اجرای بدون وقفه پردازندهها اعتماد نکنید و همیشه فرض کنید بدترین اتفاقات ممکن است رخ دهند.
امیدواریم این بررسی برای شما مفید بوده باشد. تا اپیزود بعدی، پیروز و پایدار باشید.