займы с плохой кредитной историей

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

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

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

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

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

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

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

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

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

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

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

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

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

همانطور که در بخش قبل گفته شد، سیستم‌های توزیع شده از اجزاء مختلف تشکیل شده‌اند که هر کدام بصورت مجزا و همروند با دیگر اجزاء در حال انجام فعالیت مربوط به خود هستند و حتی می‌توانند مستقل از بقیه خراب شوند. با توجه به این توضیح، آیا یک کامپیوتر که دارای اجزاء مختلف مثل پردازنده، گرافیک، حافظه داخلی و غیره است را می‌توان در دسته سیستم‌های توزیع شده قرار داد؟ خیر. زیرا اجزاء داخلی یک کامپیوتر، سومین ویژگی سیستم‌های توزیعی (نبود ساعت مشترک) را نقض می‌کند. تمام اجزاء توسط یک گذرگاه (Bus) به یکدیگر متصل شده‌اند و از پردازنده دستور می‌گیرند و همچنین پردازنده ساعت سیستم را جلو می‌برد و همه اجزاء خود را با این ساعت همگام می‌کنند.

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

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

برای طراحی سیستم‌های توزیع شده، باید چهار هدف مهم را در نظر گرفت. اگر این اهداف برآورده نشوند، طراحی و پیاده‌سازی سیستم به خوبی صورت نگرفته است و یا معماری توزیع‌شده مناسب نیست. این اهداف عبارت‌اند از:

  1. اشتراک‌گذاری منابع: یک سیستم توزیع‌شده باید دسترسی به منابع و استفاده از آن را به آسانی فراهم کند و باید توزیع‌شدگی و پراکنده بودن منابع در سرتاسر شبکه را از دید کاربران به خوبی پنهان کند. به عنوان مثال یک سامانه اشتراک فایل را در نظر بگیرید که کاربران فایل‌های دلخواه خود را به آن انتقال می‌دهند. این سامانه بصورت توزیع‌شده بر روی سیستم‌های ابری قرار دارد و ممکن است هر کدام از فایل‌های کاربران بر روی یک میزبان خاص قرار بگیرد. اما کاربر همواره از طریق یک آدرس و یک پنل مدیریتی ثابت باید بتواند در هر کجا که باشد و از هر دستگاهی که برای دسترسی به آن استفاده می‌کند، فایل‌های خود را به آسانی مشاهده و دریافت کند.
  2. شفافیت: همانطور که قبلا نیز گفته شده است، کاربران نباید متوجه توزیع‌شدگی منابع و پردازنده‌ها در سرتاسر شبکه شوند. بنابراین سیستم توزیع‌شده باید بتواند این توزیع‌شدگی را بصورت شفاف (ناپیدا) ارائه دهد. چندین نوع شفافیت در سیستم‌های توزیع شده وجود دارد که باید لحاظ شود. مانند، پنهان‌سازی روش دسترسی به منابع، محل منابع، تغییر مکان منابع حتی در مواقع استفاده از آن منابع توسط کاربر، تکثیر داده، همروندی و خطا و خرابی سیستم.
  3. باز بودن: یک سیستم توزیع‌شده باز سیستمی است که اجزاء آن را بتوان به راحتی در سیستم‌های دیگر استفاده کرد و همچنین معماری و پیاده‌سازی سیستم توزیع‌شده باید به شکلی باشد که بتوان به راحتی اجزاء جدید و یا اجزاء دیگر سیستم‌ها را به آن اضافه و یا حذف کرد.
  4. مقیاس‌پذیر: سیستم توزیع‌شده باید به طوری طراحی و پیاده‌سازی شده باشد که به راحتی بتوان حتی در زمان اجرا به تعداد سیستم‌ها افزود تا توزیع‌شدگی را افزایش دهیم و یا از تعداد سیستم‌ها کم کرد. مقیاس‌پذیری انواع مختلفی دارد. اگر تنها تعداد سیستم‌ها تغییر یابد، به آن مقیاس‌پذیری اندازه می‌گویند. اگر فاصله سیستم‌ها نسبت به یکدیگر کم یا زیاد شود، به آن مقیاس‌پذیری جغرافیایی می‌گویند و اگر سیستم در صورت افزایش و یا کاهش سازمان‌های مدیریتی همچنان به راحتی قابل مدیریت باشد، به آن مقیاس‌پذیری مدیریتی می‌گویند.

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

تئوری CAP بیان می‌کند که به ازای هر جفت درخواست (درخواست نوشتن، و سپس خواندن)، سیستم می‌تواند تنها دو شرط از سه شرط مهم مطرح شده توسط این تئوری را ضمانت کند و شما نمی‌توانید هم‌زمان هر سه شرط را داشته باشید و باید یکی از آن‌ها را فدا کنید! این شرط‌ها عبارت‌اند از:

  • سازگاری (Consistency): این شرط تضمین می‌کند داده‌ای را که کاربر می‌خواند، حتما آخرین به‌روزرسانی آن داده باشد و همچنین همه‌ی سیستم‌های موجود در شبکه باید جدیدترین نسخه از آن داده را ببینند. حتی اگر عملیات خواندن و نوشتن آن داده در سیستم‌های مختلف انجام شود، باز هم آخرین و جدیدترین مقدار داده باید به کاربران نمایش داده شود.
  • دسترس‌پذیری (Availability): این شرط تضمین می‌کند که سیستم‌ها همواره به درخواست‌های کاربر جواب مناسب و در زمان مناسب را خواهد داد و هیچگاه جواب اشتباه و یا خطا به کاربر گزارش نمی‌شود. این شرط به هر دو درخواست خواندن و نوشتن اعمال می‌شود و دستور نوشتن همواره داده را به‌روزرسانی می‌کند و دستور خواندن همواره مقدار درست را به کاربر برمی‌گرداند. حتی اگر یکی از سیستم‌ها در شبکه از دسترس خارج شود، دیگر سیستم‌ها باید بتوانند همواره پاسخ درست و مناسب را به درخواست‌ها بدهند.
  • تحمل افراز (Partition Tolerance): این شرط تضمین می‌کند که در صورت وقوع خرابی در شبکه و ارتباط بین سیستم‌ها (مانند قطع ارتباط بین دو سیستم و یا تأخیر بیش از اندازه ارسال و دریافت بسته‌ها در شبکه) سیستم به کار خود بدون مشکل ادامه دهد. قطع یک ارتباط بین دو شبکه می‌تواند شبکه را به چند قسمت مجزا تقسیم کند (به عنوان مثال شبکه به دو بخش مجزا تقسیم شود که هر بخش بصورت جدا سیستم‌ها با هم در ارتباط هستند). این قطعی و خرابی می‌تواند تنها بین دو سیستم منزوی شود، و یا بخش بیشتری از شبکه گسترش یابد.

همانطور که می‌دانید، شبکه هیچگاه ۱۰۰ درصد قابل اطمینان نیست و امکان دارد دچار خرابی شود. برای تحمل خرابی شبکه، شرط تحمل افراز باید همواره در سیستم‌های توزیع شده تضمین شود. بنابراین باید بین دو شرط باقیمانده، یعنی سازگاری و دسترس‌پذیری، یکی را انتخاب کنیم. به احتمال زیاد برای شما سوال پیش آمده است که اصلا چرا باید حتما دو شرط را انتخاب کنیم و چرا نمی‌شود هر سه را انتخاب کرد؟! پس بیایید با استفاده از یک مثال به اثبات این تئوری بپردازیم.

فرض کنید دو سیستم A و B در شبکه موجود باشند و یک داده با مقدار D1 بر روی هر دو سیستم قرار دارد. کاربر می‌خواهد این داده را به‌روزرسانی کند و در حالی که به A متصل است، مقدار داده را به D2 تغییر می‌دهد. B باید این مقدار جدید را از A دریافت کند تا هر دو سیستم جدیدترین نسخه از داده را در خود نگه دارند. به‌روزرسانی مقدار داده در B می‌تواند به دو شکل اتفاق بیافتد:

  • بعد از نوشتن مقدار جدید داده در A، در همان لحظه B مقدار داده خود را نیز به‌روز کند
  • B منتظر درخواست کاربر شود و زمانی‌که کاربر مقدار این داده را درخواست کرد، سپس مقدار جدید را از A دریافت کند و به کاربر نمایش دهد.

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

  • سیستم B همان مقدار قدیمی داده را به کاربر نمایش می‌دهد. در این روش دسترس‌پذیری تضمین شده است اما سازگاری نقض شده است.
  • سیستم B یک پیام خطای شخصی‌سازی شده و یا خطار عدم پاسخگویی در زمان مشخص (timeout) را به کاربر نشان می‌دهد. در این روش سازگاری تضمین شده است اما دسترس‌پذیری نقض شده است.

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

  • سیستم‌های توزیع‌شده با کارآمدی بالا (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) بسیار مورد استقبال قرار گرفته است که در آینده بطور کامل در رابطه با آن‌ها بحث خواهیم کرد.

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

займ на карту онлайн срочный займ на карту займ на карту срочно без отказа