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

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

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

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

در بخش اول، به معرفی و بررسی ویژگی‌های سیستم‌های توزیع شده پرداخته شد و مقایسه‌ی کوتاهی با سیستم‌های متمرکز ارائه شد. در بخش دوم به بررسی عمقی‌تر این سیستم‌ها با بحث در رابطه با میان‌افزار، اهداف و تئوری CAP پرداختیم. در این بخش که آخرین بخش از سری آموزش مقدماتی است به بررسی انواع سیستم‌های توزیع‌شده خواهیم پرداخت. در سری بعدی آموزش‌ها به مفاهیم پیشرفته‌تر و برخی از چارچوب‌های مناسب برای پیاده‌سازی سیستم‌های توزیع شده خواهیم پرداخت.

به طور کلی سه نوع سیستم توزیع شده وجود دارد:

  • سیستم‌های توزیع‌شده با کارآمدی بالا (High performance distributed computing)
  • سیستم‌های توزیع‌شده اطلاعاتی (Distributed information systems)
  • سیستم‌های فراگیر (Pervasive systems)

سیستم‌های توزیع‌شده با کارآمدی بالا

سیستم‌های توزیع‌شده با کارآمدی بالا خود به چند زیرمجموعه تقسیم می‌شوند که ویژگی مشترک همه‌ی آن‌ها، تجمیع و همکاری تعدادی کامپیوتر برای انجام محاسبات است که کارآمدی بسیار بالاتری نسبت به یک کامپیوتر دارند. این محاسبات می‌توانند مسائل بسیار پیچیده در علوم پایه و یا مهندسی از جمله دست یافتن به اطلاعات از آغاز هستی و یا کشف داروهای جدید برای بیماری‌های خاص باشد. حال به بررسی انواع مختلف سیستم‌های توزیع‌شده با کارآمدی بالا می‌پردازیم:

محاسبات خوشه‌ای (Cluster Computing)

محاسبات خوشه‌ای از یک مجموعه کامپیوتر مشابه به هم تشکیل شده است که در یک مکان با استفاده از شبکه پرسرعت محلی LAN به یکدیگر متصل شده‌اند. این نوع سیستم‌ها زمانی عمومی و محبوب شدند که نسبت قیمت به کارآمدی کامپیوترهای شخصی بهبود یافت و اتصال کردن چندین کامپیوتر ساده با قدرت معمولی با استفاده از شبکه داخلی پر سرعت از لحاظ مالی و فنی امکان‌پذیر شده بود و حتی منجر به کارآمدی بسیار بالا با هزینه کمتر نسبت به یک کامپیوتر قوی و بسیار گران شده بود. از محاسبات خوشه‌ای معمولاً برای اجرای یک برنامه محاسباتی بصورت موازی بر روی چندین کامپیوتر و با استفاده از برنامه‌نویسی موازی (Parallel Programming) مورد استفاده قرار می‌گیرد.

محاسبات خوشه‌ای برای اهداف مختلفی استفاده می‌شوند که به سه دسته تقسیم می‌شوند:

  • خوشه با هدف توزیع بار: همانطور که از نام این دسته مشخص است، از این روش برای توزیع بار کاری (Workload) بین چندین کامپیوتر استفاده می‌شود.
  • خوشه با هدف دسترس‌پذیری بالا: در این روش کامپیوترها یا بصورت آماده‌باش و غیرفعال در کنار کامپیوتر سرویس‌دهنده اصلی قرار دارند (Active-Passive) و یا همزمان با کامپیوتر اصلی کارهای تکراری و اضافی (redundant) را انجام می‌دهند (Active-Active) که در صورت از دسترس خارج شدن کامپیوتر اصلی، یکی دیگر از کامپیوترهای موجود در خوشه جای کامپیوتر اصلی را بگیرد و همواره سیستم در دسترس باشد. روش Active-Active را می‌توان با روش توزیع بار نیز ترکیب کرد. در رابطه با انواع روش‌های دسترس‌پذیری و پیاده‌سازی آن‌ها در مقالات بعدی توضیح خواهیم داد.
  • خوشه با هدف کارآمدی بالا. همانطور که در اول مقاله راجع به محاسبات با کارامدی بالا صحبت شد، از این دسته خوشه‌ها برای حل مسائل پیشرفته و پیچیده استفاده خواهد شد.

در محاسبات خوشه‌ای، یکی از کامپیوترها به عنوان ارباب (Master) فعالیت می‌کند که کاربر با استفاده از یک واسط، کار (Job) مورد نظرش را در کامپیوتر ارباب ثبت می‌کند. در روش توزیع بار، کارهای ثبت شده در یک صف قرار می‌گیرند و هر کدام از کارها (که معمولاً از نوع محاسباتی هستند) با توجه به سیاست توزیع بار تعریف شده، به کامپیوترهای دیگر که برده (Slave) نام دارند اختصاص می‌یابند. در روش کارآمدی بالا، هر کدام از کارها می‌توانند به بخش‌های کوچکتری تقسیم شوند و بصورت موازی در کامپیوترهای مختلف محاسبه شوند. سپس جواب هر بخش به ارباب ارسال می‌شود و در آن‌جا، جواب‌ها باهم ترکیب می‌شوند و جواب نهایی به کاربر ارائه می‌شود. به روش شکستن یک مسئله به مسئله‌های کوچکتر و ارسال آن‌ها به سمت برده‌ها و در نهایت جمع‌آوری نتایج توسط ارباب، الگوی طراحی Scatter and Gather گفته می‌شود. در رابطه با الگوهای مختلف سیستم‌های مقیاس‌پذیر نیز در یک مقاله دیگر بطور مفصل بحث خواهد شد.

با استفاده از استاندارد ارتباطی “واسط تبادل پیام”، (MPI (Message Passing Interface، که به عنوان یک کتابخانه برای زبان‌های ++C، C و Fortran موجود است می‌توان از قابلیت پردازش موازی در خوشه با هدف کارآمدی بالا استفاده کرد. به عنوان مثال با استفاده از MPI می‌توان یک برنامه نوشت که با الگوی طراحی Scatter and Gather یک مسئله را بشکند و هر بخش را بصورت موازی بر روی یکی از برده‌ها اجرا کند. از این واسط ارتباطی و کتابخانه‌ی آن برای حل مسائل پیچیده در صنعت و علوم پزشکی استفاده می‌شود.

 

محاسبات توری (Grid Computing)

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

“تور” در اینجا به معنی مجموعه و ترکیبی از ماشین‌ها (یا گره‌ها)، منابع، اعضا، میزبان‌ها و … است که به روش خود و با هر ترکیبی از منابع در شبکه مشارکت می‌کنند. منابع می‌توانند بصورت آزاد در دسترس همه باشند و یا محدودیت‌های دسترسی خاصی بر روی آن‌ها اعمال شده باشد. به طور معمول، کارها و وظایف مختلفی بر روی شبکه اجرا می‌شود که مخصوص این شبکه توری طراحی شده است. اما از طرفی همه‌ی اجزاء شبکه می‌توانند در راستای یک هدف برای حل مسائل پیچیده‌ای که امکان حل آن بر روی یک ابرکامپیوتر تنها امکان‌پذیر نیست نیز کار کنند.

محاسبات توری توسط انجمن Global Grid با ارائه پروتکل‌های خاص و معماری Open Grid Service Architecture به یک استاندارد تبدیل شد. برای پاسخگویی به الزامات محاسبات خوشه‌ای طبق یک استاندارد خاص، نیاز به چارچوبی برای سیستم‌های توزیع شده و پشتیبانی مناسب از یکپارچگی، مجازی‌سازی و مدیریت احساس می‌شد. تولید چارچوبی بدین شکل نیازمند یک مجموعه امکانات هسته‌ای از جمله واسط ارتباطی، مدل‌سازی منابع و … است.

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

با اینکه در آن سال‌ها اهداف و ایده‌های محاسبات توری بسیار جذاب بود و حتی شرکت‌های بسیار بزرگی مانند Sun Microsystems، IBM و HP تلاش‌های بسیاری در این راستا کردند، اما محاسبات توری همه‌گیر نشد و در ورود به شرکت‌ها به عنوان یک تکنولوژی اصلی و فراگیر شکست خورد. اما این بدین معنی نیست که محاسبات توری قدرتمند نیست و دیگر استفاده نمی‌شود. همانطور که گفته شد، محاسبات توری همچنان در مراکز تحقیقات علمی که نیاز به ایجاد یک فدرال و توزیع حجم‌های عظیمی از داده‌های علمی و دسترسی آسان به منابع از مکان‌های مختلف است و همینطور در دولت‌ها استفاده می‌شود. و مهم‌تر از همه، محاسبات توری زمینه را برای رفتن به سمت تحول بعدی در دنیای سیستم‌های توزیع شده که محاسبات ابری نام دارد فراهم کرد و در آن از بسیاری از ایده‌های محاسبات توری استفاده شده است!

محاسبات ابری (Cloud Computing)

در حالی که محققان در حال تلاش برای بهبود محاسبات توری بودند، شرکت‌ها در حال تلاش برای یافتن راه حلی برای در دسترس گذاشتن راحت‌تر منابع مراکز داده (Data Center) خود به مردم بودند. در نهایت، این تلاش منجر به پیداش مفهوم Utility Computing شد که با استفاده از آن مشتریان می‌توانند عملیات‌های مورد نیاز خود را در مرکز داده اختصاصی بارگذاری کنند و تنها به میزان استفاده از منابع توسط آن عملیات هزینه بپردازند. Utility Computing در نهایت به محاسبات ابری تبدیل شد.

خصوصیت اصلی محاسبات ابری، دسترسی آسان به منابع مجازی‌سازی شده است. مکان و نحوه دسترسی به منابع را می‌توان بصورت پویا تنظیم کرد که پایه و اساس مقیاس‌پذیری را در محاسبات ابری ایجاد می‌کند. اگر عملیات‌های بیشتری باید انجام شود، مشتری می‌تواند منابع بیشتری را در اختیار خود قرار دهد. بنابراین محاسبات ابری از مدل پرداخت به اندازه استفاده (pay-per-use و یا pay-as-you-go) استفاده می‌کند و یک قرارداد سطح سرویس (Service Level Agreement) بین تأمین کننده و مشتری تنظیم می‌شود که این مدل و همچنین دیگر خصوصیات مهم محاسبات ابری را توسط تأمین کننده گارانتی می‌شود.

به طور کلی محاسبات ابری به چهار لایه تقسیم می‌شود:

  1. سخت‌افزار: پایین‌ترین لایه در محاسبات ابری که برای مدیریت سخت‌افزارهای مهم مانند پردازنده، مسیریاب‌های شبکه، سیستم سرمایشی و … مورد استفاده قرار می‌گیرد. این لایه در مراکز داده پیاده‌سازی می‌شود و معمولاً مشتریان مستقیم با این لایه ارتباط ندارند.
  2. زیرساخت: این لایه ستون فقرات سامانه‌های محاسبات ابری را شکل می‌دهد. تکنیک‌های مجازی‌سازی برای ارائه منابع محاسباتی و ذخیره‌سازی مجازی‌سازی شده به مشتریان در این لایه صورت می‌پذیرد.
  3. پلتفرم: این لایه همان امکاناتی که یک سیستم‌عامل به توسعه‌دهندگان برنامه‌های کاربردی ارائه می‌دهد را در اختیار مشتریانی که می‌خواهند برنامه‌های مورد نیاز خود را در محیط ابری توسعه، پیکربندی و اجرا کنند قرار می‌دهد. در حقیقت می‌توان گفت که مجموعه‌ای از APIهای مورد نیاز مشتری در اختیارش قرار می‌گیرد.
  4. برنامه کاربردی: در این لایه، خود برنامه‌های کاربردی در اختیار مشتریان قرار می‌گیرند.

تأمین کنندگان محاسبات ابری این لایه‌ها را با استفاده از واسط‌های مختلف به مشتریان خود ارائه می‌دهند (مانند ابزارهای command-line، واسط‌های برنامه‌نویسی و وب) که به سه دسته اصلی از انواع سرویس‌ها تقسیم می‌شوند:

  • زیرساخت به عنوان سرویس (Infrastructure-as-a-Servce IaaS): دربرگیرنده سخت‌افزار و لایه زیرساخت
  • پلتفرم به عنوان سرویس (Platform-as-a-Service PaaS): دربرگیرنده لایه پلتفرم
  • نرم‌افزار به عنوان سرویس (Software-as-a-Servicec SaaS): دربرگیرنده برنامه‌های کاربردی ارائه شده بر روی ابر

در شکل زیر لایه‌ها، امکانات ارائه شده در هر لایه و مثال‌های از این امکانات نشان داده شده است.

سیستم‌های توزیع‌شده اطلاعاتی

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

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

سیستم‌های فراگیر

تا اینجا ویژگی اصلی سیستم‌های توزیع شده که معرفی کردیم، پایداری آن‌ها بود. سیستم‌ها در شبکه ثابت هستند و به شبکه دائمی و پرسرعت متصل‌اند. بعد از ورود موبایل‌ها و سیستم‌های تعبیه شده (Embedded systems) به زندگی انسان‌ها، مفهوم سیستم‌های فراگیر شکل گرفت که این سیستم‌ها ذاتاً توزیع شده هستند. چیزی که این سیستم‌ها را نسبت به بقیه انواع سیستم‌های توزیع‌شده متمایز می‌کند، ارتباط بیشتر و نزدیکتر کاربران با اجزاء این سیستم است. معمولاً یک سیستم ثابت با واسط ثابت وجود ندارد. به عنوان مثال این سیستم‌ها از تعداد بسیاری حسگر که رفتارهای کاربر را دریافت می‌کند تشکیل شده است و یا همانند موبایل‌های هوشمند در دسترس کاربران قرار دارد.

ویژگی اصلی سیستم‌های فراگیر معمولاً کوچک بودن، قابل حمل و دارای باتری هستند که دارای ارتباط بی سیم هستند. این نوع سیستم‌ها در سال‌های اخیر تحت عنوان اینترنت اشیاء (Internet of Things) بسیار مورد استقبال قرار گرفته است که در آینده بطور کامل در رابطه با آن‌ها بحث خواهیم کرد.

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


منابع:

  1. Distributed Systems Principles and Paradigms by Andrew S. Tanenbaum and Maarten Van Steen
  2. Introduction to Grid Computing – IBM
 

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

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

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

avatar
  مشترک شدن  
اطلاع‌رسانی