سه شنبه , ۲۹ مرداد ۱۳۹۸
خرید فالوور اینستاگرام خرید لایک اینستاگرام
سیستم‌های توزیع شده

مقدمه‌ای بر سیستم‌های توزیع شده – بخش اول

در این مجموعه از آموزش‌ها قصد دارم شما را با سیستم‌های توزیع‌شده آشنا کنم. با دنبال کردن این مقالات شما با مفاهیم، ویژگی‌‎ها، معماری‌ها و الگوهای طراحی سیستم‌های توزیع‌شده آشنا می‌شوید و پس از آن می‌توانید وارد مباحث پیشرفته‌تر شوید و به طراحی و پیاده‌سازی سیستم‌های توزیع‌شده بپردازید. پس با ما همراه باشید!

  1. بخش اول
  2. بخش دوم
  3. بخش سوم

آقای تننبام، پژوهشگر و استاد دانشگاه که در زمینه‌های سیستم عامل و شبکه فعالیت دارند و کتاب‌های درسی در این زمینه‌ها منتشر کرده‌اند، سیستم‌های توزیع شده را بدین شکل تعریف می‌کنند:

“مجموعه‌ای از کامپیوترهای مستقل از هم که از دید کاربران به شکل یک کامپیوتر به نظر می‌رسند.”

تعریف بالا به نظر ساده می‌رسد. چندین کامپیوتر در حال همکاری با یک‌دیگر هستند و در راستای یک هدف تلاش می‌کنند تا به کاربر خدمات خود را ارائه دهند و همچنین، کاربر متوجه توزیع‌شدگی و وجود چندین کامپیوتر نخواهد شد. به عنوان مثال، یک مجموعه اعداد را در نظر بگیرید که می‌خواهید آن‌ها را پردازش کنید و نتیجه را محاسبه کنید. در معماری‌های متمرکز، تمام محاسبات بر روی یک کامپیوتر و یک پردازنده انجام خواهد شد (البته در نظر بگیرید که پردازنده می‌تواند چند هسته‌ای باشد اما همچنان محاسبات بر روی یک پردازنده انجام می‌شود). اما در معماری توزیع شده، محاسبات بر روی چندین کامپیوتر پخش می‌شود و هر کدام، بخشی از مجموعه را پردازش می‌کند. در هر دو روش، نتیجه نهایی که کاربر انتظار دیدن آن را دارد باید یکی باشد. اما اگر مجموعه بسیار بزرگ و محاسبات سنگین باشد، معماری توزیع‌شده باعث افزایش سرعت می‌شود و نتایج بسیار سریع‌تر به دست کاربر می‌رسد.

شاید با تعریف بالا به این نتیجه برسید که بهتر است در همه جا از معماری توزیع شده استفاده کنیم تا سرعت را افزایش دهیم! اما این تفکر درست نیست و باید معماری مناسب با توجه به شرایط انتخاب شود که در ادامه بیشتر به این موضوع خواهیم پرداخت.

اگر بخواهیم عمیق‌تر بررسی کنیم، برای سیستم‌های توزیع شده سه ویژگی اصلی را باید در نظر گرفت:

  1. تمام کامپیوترها بصورت مستقل و همروند فعالیت می‌کنند و منتظر یک‌دیگر نخواهند ماند.
  2. هر کدام از کامپیوترها مستقل از یکدیگر می‌توانند دچار خرابی شوند و ما نمی‌توانیم خرابی کامپیوترها را از قبل پیش‌بینی کنیم و هنگام طراحی سیستم‌های توزیع شده باید احتمال خرابی را در نظر گرفت.
  3. کامپیوترها ساعت عمومی و مشترک ندارد. هر اتفاق و پردازش در یک کامپیوتر بصورت ناهمگام با دیگر کامپیوترها اتفاق میافتد

همه‌ی شما با گوگل آشنا هستید. همان صفحه‌ی سفید و ساده با یک جعبه در وسط آن برای نوشتن متن جست‌وجو. با نوشتن متن دلخواه، درخواست خود را به میزبان گوگل ارسال می‌کنید و جواب را دریافت می‌کنید که در اولین نگاه شبیه یک معماری ساده مشتری / سرویس‌دهنده است. اما پشت این ظاهر ساده، یک شبکه‌ی پیچیده از کامپیوترهای میزبان قرار دارد که درخواست شما و میلیون کاربر دیگر را با سرعتی بالا و بی‌درنگ پردازش می‌کنند که شما متوجه آن نمی‌شوید! گوگل با استفاده از قدرت سیستم‌های توزیع شده، معماری‌های پیچیده محاسبات موازی، الگوریتم‌های همگام‌سازی پیشرفته و استفاده بهینه و حداکثری از منابع میزبان‌های موجود می‌تواند درخواست‌های پیچیده کاربران را در کمترین زمان ممکن پاسخ دهد.

بسیاری از سایت‌های معروف دیگر مانند آمازون، فیسبوک، توییتر و … نیز به همین روش کار می‌کنند. به دلیل اینکه تعداد کاربران این سایت‌ها بسیار زیاد است، یک کامپیوتر میزبان نمی‌تواند پاسخگوی نیاز کاربران باشد. بنابراین باید از قدرت چندین کامپیوتر در کنار یکدیگر استفاده کرد.

استفاده از سیستم‌های توزیع شده در همه جا مناسب نیست و ارتباط بین کامپیوترها و هماهنگی بین آن‌ها باعث ایجاد سربار اضافی می‌شود. بنابراین باید در شرایطی استفاده شود که بار کاری کامپیوتر و پردازش بسیار بالاست و معماری‌های متمرکز پاسخگوی نیاز نیستند. از دیگر ویژگی‌های سیستم‌های توزیع شده می‌توان به موارد زیر اشاره کرد:

  • دسترس‌پذیری بالا. رخداد خرابی میزبان در معماری متمرکز، باعث از کار افتادن کل سامانه می‌شود. در معماری توزیع‌شده در صورت خرابی یک کامپیوتر، دیگر کامپیوترها وظیفه پردازشی را بر عهده می‌گیرند. این ویژگی سیستم‌های توزیع شده را تحمل‌پذیر در برابر خطا می‌کند و به راحتی می‌توان خطا و خرابی را مدیریت کرد و به حالت قبل از خرابی بازگشت.
  • مقیاس‌پذیری. در صورت استفاده از معماری توزیع‌شده، در صورت افزایش بار کاری و نرخ درخواست می‌توان به راحتی و در زمان اجرا چندین کامپیوتر دیگر به سامانه افزود تا توزیع بار به خوبی صورت پذیرد

به افزایش تعداد میزبان‌ها برای دستیابی به توزیع‌شدگی و توزیع بار، مقیاس‌پذیری افقی گفته می‌شود. ساده‌ترین راهکاری که در مواجهه با بار کاری و پردازش بالا مرسوم است، ارتقاء سخت‌افزار کامپیوتر میزبان است که به این روش مقیاس‌پذیری عمودی گفته می‌شود. این روش مشکلاتی دارد که به توضیح آن‌ها می‌پردازیم:

  • افزایش هزینه. ارتقاء سخت‌افزار از یک حدی بیشتر باعث افزایش بسیار زیاد هزینه‌ها بصورت نمایی می‌شود. در صورتیکه اگر از معماری توزیع‌شده استفاده کنیم، می‌توان از قدرت چندین کامپیوتر کم قدرت‌تر استفاده کرد تا به نتیجه دلخواه رسید. در بسیاری از شرکت‌های کامپیوتری تعدادی کامپیوتر میزبان وجود دارد که برنامه‌های شرکت بر روی آن‌ها اجرا می‌شوند. در صورت استفاده از معماری توزیع‌شده می‌توان از قدرت همه‌ی میزبان‌ها استفاده کرد اما اگر معماری متمرکز باشد، باید یکی از میزبان‌ها را ارتقاء داد ولی امکان دارد بقیه میزبان‌ها بار بسیار پایین و کمتری روی آن باشد و بیشتر مواقع بیکار باشند درصورتیکه می‌توان از قدرت آن‌ها نیز استفاده کرد.
  • فرسودگی. زمانیکه یکی از میزبان‌ها بار بسیار زیادی را نسبت به بقیه تحمل کند، زودتر از بقیه دچار فرسودگی و خرابی می‌شود. به عنوان مثال یک پایگاه داده را در نظر بگیرید که بر روی میزبانی با حافظه SSD قرار دارد. همانطور که می‌دانید، SSD قیمت بالا و عمر به نسبت کوتاه‌تری نسبت به دیسک‌های سخت دارد اما سرعت آن بسیار بالاتر است. بنابراین باید سعی شود که تا حد امکان تعداد نوشتن‌ها به SSD محدود شود. اگر تعداد نوشتن‌ها توسط پایگاه‌داده بسیار بالا باشد حافظه این میزبان به شدت درگیر خواهد بود و زودتر خراب خواهد شد. اما اگر از چندین میزبان استفاده شود، بار بر روی حافظه تمام میزبان‌ها توزیع و متعادل می‌شود.

با استفاده از روش‌های مختلف توزیع بار، می‌توان درخواست‌های کاربران را به میزبان‌های مختلف ارسال کرد تا همه‌ی میزبان‌های موجود یک میزان بار را تحمل کنند. روش‌های مختلفی برای ارسال درخواست‌ها به چندین کامپیوتر وجود دارد. از جمله، ارسال بصورت تصادفی، ارسال به کامپیوتر با کمترین بار کاری، ارسال بصورت نوبه‌ای و … که هر کدام از این روش‌ها معایب و مزیت‌های خود را دارد و در شرایط مناسب باید استفاده شود.

در این مقاله مفاهیم پایه در سیستم‌های توزیع‌شده بررسی شد و با تفاوت‌های آن با معماری متمرکز آشنا شدید. در بخش‌های بعدی به بررسی عمیق‌تر و مفاهیم بیشتر مانند میان‌افزار، اجماع، الگوهای طراحی و انواع معماری‌های توزیع‌شده مانند خوشه، شبکه توری و ابری خواهیم پرداخت.
لطفا سوالات و نظرات خود را در بخش دیدگاه‌ها با ما به اشتراک بگذارید 🙂

 

درباره ی سینا نوریان

Avatar
کارشناسی ارشد نرم‌افزار از دانشگاه علم و صنعت ایران، برنامه‌نویس ارشد شرکت فناوران دانشگر. علاقه‌مند به سیستم‌های توزیع شده، معماری‌های مایکروسرویس و واکنشی، پردازش موازی و داده‌های جریانی. زبان‌های مورد علاقه: Scala, Go, Java

2
دیدگاه بگذارید

avatar
1 موضوع دیدگاه‌ها
1 موضوع پاسخ‌ها
1 دنبال‌کنندگان
 
بحث‌برنگیزترین دیدگاه
داغ‌ترین دیدگاه
2 نویسنده‌های دیدگاه
سینا نوریاننوید غلامی آخرین نویسنده‌های دیدگاه
  مشترک شدن  
جدیدترین قدیمی‌ترین بیشترین امتیاز
اطلاع‌رسانی
نوید غلامی
Guest
نوید غلامی

علاوه بر مطالب مفیدی که منتشر می کنید ، اینکه میبینم یک سری از دوستان قدیمی ، موفق و شایسته من جزو گردانندگان این وب سایت هستند ، جذابیت مطالب رو دو برابر میکند .
با تشکر و آرزوی موفقیت .