عنوان مقاله
دانلود مقاله کامل سیستمهای توزیع شده
نوع فایل |
تعداد صفحات |
---|---|
ورد – Word |
۶۴ صفحه |
پیش نمایش مقاله
مقدمه
هر سیستمی که بر روی مجموعه ای از ماشین ها که دارای حافظه اشتراکی نیستند، اجرا شده و برای کاربران به گونه ای اجرا شود که گویا بر روی یک کامپیوتر می باشند ، یک سیستم توزیع شده است. در یک سیستم توزیع شده: یک نرم افزار یا مجموعه نرم افزاری واحد و متحد الشکل بر روی هر گره اجرا می شود. همه ماشینها یک کرنل مشابه را اجرا می کند. هر کرنل منابع خود را کنترل می کند سیستم عامل توزیع شده در یک محیط شبکهای اجراء میشود. در این سیستم قسمتهای مختلف برنامه کاربر بدون آنکه خود او متوجه شود می تواند همزمان در چند کامپیوتر مجزا اجراء شده و سپس نتیجه نهایی به کامپیوتر اصلی کاربر برگردند.
سیستم های توزیع شده
یک سیستم توزیع شده در مقابل یک سیستم متمرکز(سنتی)عبارت است از تعدادی کامپیوتر مستقل که از دید کاربرانش به صورت یک سیستم واحد و یکنواخت دیده می شود.
مانند:کامپیوترهای موجود در یک شرکت،رباتهای داخل یک کارخانه + کامپیوتر اصلی،کامپیوترهای یک شبکه بانکی برای اینکه کامپیوترها و شبکه ها از انواع مختلف از دید کاربران به عنوان یک سیستم یکنواخت و واحد اداره میشود. (MiddleWare)تلقی شوند،سیستم های توزیعی به وسیله یک لایه نرم افزاری به نام میان افزار دو بعد این تعریف:
سخت افزار:ماشین ها مستقل و خودمختار هستند.
نرم افزار:کاربرها فکر می کنند که با یک ماشین واحد سرو کار دارند.
هر کامپیوتر سیستم عامل خاص خودش را دارد و وظیفه یکی شدن را نمی توانیم بر عهده یک سیستم عامل قرار دهیم پس از یک ابزار واسطه استفاده می کنیم،m.w واسط بین کاربری و os می باشد(برنامه کاربری os را نمی بیند)
اهداف سیستم های توزیع شده
• اتصال آسان منابع و کاربران((Eeasly connecting Users and Resources
• مخفی سازی(ارائه شفافیت)(Transparency)
• پشتیبانی باز بودن سیستم(openness)
• مقیاس پذیر و توسعه پذیر بودن(Scalability)
اتصال منابع و کاربران
– کاربران به راحتی بتوانند به منابع دور دست دسترسی داته باشند.
– تبادل اطلاعات آسان می شود مثلا از طریق اینترنت
– دلایل اقتصادی مثلا استفاده از یک جاپگر به جای چندین چاپگر
– قابلیت اعتماد،خرابی یکی از ده ماشین،یک دهم از بازدهی را کم می کند.
– به دلیل اینکه بعضی کارها بایستی ذاتا توزیعی شوند(شبکه فروشگاه یا بانک)با اتصال منابع و کاربران این مکان فراهم می کند.
سیر تکامل سیستم عامل های توزیع شده
در ابتدا کامپیوترها خیلی گران (در حد میلیون دلار) بودند و جای زیادی را اشغال می کردند (در حد یک اتاق بزرگ) تعداد کمی کامپیوتر وجود داشت و آنها در لابراتوارهای تحقیقاتی دانشگاهها و مراکز صنعتی بود. این کامپیوترها از یک کنسول و بوسیله یک اپراتور قابل استفاده بودند وکاربران عادی نمیتوانستند از آن استفاده کنند. برنامه نویسان، برنامههای خود را مینوشتند و آن را روی رسانهی خاصی مثل کارت پانچ به مرکز کامپیوتر تحویل میدادند تا مورد پردازش قرار گیرند. قبل از پردازش یک برنامه، اپراتور باید محیط لازم برای پردازش را آماده سازی می کرد. این آماده سازی شامل سوار کردن نوارها و بارگذاری کارتهای پانچ شده در کارت خوان و…. بود. برنامه اجرا میشود و نتایج اجرای برنامه به صورت پرینت شده به برنامه نویس برگشت داده میشد.
آماده سازی کار در کامپیوترهای اولیه یک مشکل اساسی بود و بسیاری از وقت CPU را هدر میداد. در سالهای ۱۹۵۰ تا ۱۹۶۰ مفاهیم جدیدی برای بهینه سازی صرف وقت CPU ارائه شده که از میان آنها میتوان به موارد زیر اشاره کرد:
۱- دستهبندی کارهایی که نیازهای مشابهی دارند قبل از پردازش.
۲- توالی اتوماتیک کارها.
۳- پردازش غیر بر خط بر پایه مفاهیم با فرینگ و سرکشی
۴- چند برنامگی
دستهبندی کارها اندکی استفاده از CPU را افزایش داد چرا که اپراتور تنها وقتی محیط پردازش را تغییر میداد که دسته جدیدی از کارها برای اجرا واگذار میشد. توالی اتوماتیک کارها توسط کارتهای کنترل برای تعیین آغاز و انتهای هرکار مقدار استفاده از CPU را افزایش داد و این بهینه سازی به خاطر حذف توالی کارها توسط انسان بود.
پردازش غیر برخط هم استفاده از CPU را با اجازه روی هم افتادگی عملیات CPU و دستگاههای ورودی خروجی بهبود بخشید. در این روش این دو عمل روی دو ماشین مجزا از هم اجرا میشدند ( عملیات ورودی خروجی از عملیات CPU کندتر بود) در نهایت «چند برنامگی»به وجود آمد که در این روش همیشه CPU برای اجرا دستورالعملی دارد و بیکار نیست و به این طریق استفاده از CPU حداکثر میشد. با این حال در هیچ یک از این متدها اجازه استفاده همزمان چند کاربر و تراکنش آنها با یک سیستم کامپیوتری مهیا نبود و کاربران نمیتوانستند منابع خود را به صورت همزمان به اشتراک بگذارند.بنابراین اجرای کارهای تعاملی که متشکل از اعمال کوچکی است و عمل بعدی به اجرای عمل قبلی وابسته است تبدیل به یک عمل ملال آور و زمانبر شده بود. بسط و عیبیابی برنامهها از نمونههای برنامههای تعاملی است. این عمل غیرممکن بود تا وقتی که در اوایل دهه ۱۹۷۰ که در کامپیوترها از مفهوم «اشتراک زمانی» برای قالب آمدن بر این مشکل بهره گرفته شد.
سیستم های اشتراک زمانی اولیه دارای چند ترمینال بودند که به کامپیوتر اصلی متصل بود.این ترمینالها در اطاقی متفاوت با اطاقی که کامپیوتر اصلی در آن بود قرار داشتند. حالا دیگر با استفاده از این ترمینالها کاربران متعددی می توانستند کارهای خود را به طور همزمان اجرا کنند و منابع کامپیوتر را به اشتراک بگذارند. در یک سیستم اشتراک زمانی هر کاربر این طور تصور می کرد که برای خود یک کامپیوتر مجزا دارد چرا که سیستم با سرعت خیلی زیاد از کاریک کاربر دیگر در فاصلههای زمانی کوتاه سویچ میکرد و در هر برهه زمانی که به یک کاربر اختصاص داده میشد مقداری از کار هر کار بر اجرا میشد. با این که نظریه اشتراک زمانی در اوایل دهه ۱۹۶۰ بیان گردید تا اوایل دهه ۱۹۷۰ سیستمهای اشتراک زمانی زیاد مورد استفاده نبودند و علت هم این بود که پیاده سازی آنها خیلی سخت و هزینهبر بود.
پیشرفتهای موجود در سخت افزارهای پردازش موازی باعث کاهش اندازه و افزیش سرعت پردازش کامپیوترها شد.
در نتیجه این تغییر و تحولات، کامپیوترهای کوچک و ارزان که قابلیت پردازشی زیادتری هم داشتند جایگزین کامپیوترهای بزرگ شدند و این کامپیوترهای کوچک «مینی کامپیوتر» نام گرفتند.
ظهور سیستمهای اشتراک زمانی اولین قدم به سوی سیستمهای محاسبات توزیع شده بود چرا که در این نوع سیستمها مفاهیم زیر تعریف شدند:
۱- اشتراک منابع کامپیوتر میان چندکاربر به صورت همزمان
۲- دسترسی به کامپیوترها از جایی متفاوت از اتاق کامپیوتر اصلی.
در ابتدا ترمینالهای سیستمهای اشترک زمانی «ترمینال گنگ» بودند یعنی همه پردازش توسط سیستم کامپیوتری اصلی انجام میشد. پیشرفتهای تکنولوژی ریزپردازنده در طول دهه ۱۹۷۰ این اجازه را داد تا ترمینالهای گنگ با ترمینالهای هوشمند جایگزین شوند و با این کار مفاهیم پردازش غیر آنلاین و اشتراک زمانی با هم ادغام شدند تا مزایای هر دو تکنولوژی را روی یک سیستم بتوان به وجود آورد.
تکنولوژی میکروپروسسور به سرعت پیشرفت کرد تا جایی که در اوایل دهه ۱۹۸۰ کامپیوترهای تک کاربرده که «ایستگاه کاری» نام گرفته بودند به وجود آمدند و دارای قدرت پردازشی تقریباً برابر با «مینی کامپیوتر» بودند و با هزینه اندکی کاربر می توانست آن را خریداری کند.
این ایستگاههای کاری بعدها به عنوان ترمینالها در سیستمهای اشتراک زمانی مورد استفاده قرار گرفتند. در این نوع از سیستمهای اشتراک زمانی حجم زیادی از عملیات کاربر میتوانست در ترمینال آن کاربر به خصوص اجرا نشود و در نتیجه این امکان به وجود میآمد که کامپیوتر اصلی میان تعداد زیادی کاربر به اشتراک گذاشته شود. در این سیستمها منابع به اشتراک گذاشته شده مثل فایلها، پایگاه دادهای، کتابخانه نرم افزار و … روی کامپیوتر اصلی قرار داشتند. به این سیستمها، «سیستمهای اشتراک زمانی مجتمع» اطلاق میشد.
سیستمهای اشتراک زمانی مجتمع که در بالا به آنها اشاره گردید یک محدودیت داشتند و آن محدودیت این بود که ترمینالها تا وقتی که از کابلهای معمولی برای اتصال به کامپیوتر اصلی استفاده میشد، نمیتوانست در فاصله خیلی زیادی از کامپیوتر اصلی قرار داشته باشند.
همزمان با این پیشرفتها، در اواخر دهه ۱۹۶۰ در زمینه شبکههای کامپیوتری پیشرفتهایی حاصل شد و تا اوایل دهه ۱۹۷۰ ادامه داشت و دو تکنولوژی کلیدی در ساخت و طراحی شبکههای کامپیوتری معرفی گردید:
۱- تکنولوژی (Local Area Network)LAN
۲- تکنولوژی (Wide Area Network)WAN
با استفاده از تکنولوژی LAN، کامپیوترهای موجود در یک ساختمان و یا دانشکده به هم متصل میشوند و میتوانستند اطلاعات را با سرعت تقریبی ۱۰ Mbps با هم مبادله گنند. و در سوی دیگر تکنولوژی WAN قرار داشت که کامپیوترهای موجود در شهرهای متفاوت و یا کشورها و یا قارههای جدا از هم به هم متصل می شدند و میتوانستند اطلعات را با سرعت ۵۶kbps با هم مبادله کنند.
اولین نوع از شبکههای محلی پرسرعت، اترنت بود که در زیراکس پارک در سال ۱۹۷۳ به وجود آمد و اولین نمونه از شبکههای گسترده، آرپانت بود که توسط دپارتمان گسترش دفاع ایالات متحده در سال ۱۹۶۹ درست شد. سرعت انتقال اطلاعات در شبکه ها رفته رفته زیادتر می شد تا اینکه در سال ۱۹۶۰ برای شبکههای محلی سرعت Mbps100 و برای شبکههای گسترده سرعت kbps 64 فراهم بود.
اخیراً در اوایل دهه ۱۹۹۰ یک پیشرفت عمده دیگر هم در تکنولوژی شبکه پدیدار شد که ATM نام گرفت. با استفاده از این تکنولوژی می توان شبکهای خیلی سریع را بنانهاد به طوری که میتواند در شبکههای محلی و گسترده اطلاعات را با سرعت ۱٫۲ گیگابایت در ثانیه انتقال داد. وجود این گونه شبکههای انتقال دادهای پرسرعت به سیستمهای محاسبات توزیع شده این اجازه را داده که از یک کلاس جدید از برنامههای کاربردی، پشتیبانی کنند. این کلاس جدید که برنامههای کاربردی چند رسانهای نام گرفتهاند، متشکل از ترکیبی از دادههای معمولی، صدا و تصویر هستند. این مفهوم در شبکههای LAN و WAN غیرقابل تصور بود.
ادغام تکنولوژیهای کامپیوتر و شبکه، در اواخر دهه ۱۹۷۰ به سیستمهای محاسبات توزیع شده اجازه تولد را داد.
مخفی سازی (Transparency)
چندین کامپیوتر و منابع دیگر به هم متصلند و کاربران از آنها استفاده می کنند،در واقع کاربران نبایستی متوجه این واقعیت بشوند که فرآیند انجام کارها به صورت توزیعی بر روی چندین کامپیوترها انجام میشود.
انواع مخفی سازی (access transparency)
در کامپیوترهای مختلف روش های نمایش و انتقال اطلاعات متفاوت است این واقعیت بایستی از دید کاربر پنهان بماند به عنوان مثال کامپیوتری که از نوع Intel باشد از فرمت (Little endian) برای تبادل داده استفاده می کند(اول بایت با ارزش بعد بایت کم ارزش را انتقال می دهد) و کامپیوتری از نوع Sun SPARC از فرمت (big endian) استفاده می کند(برعکس فرمت قبلی).و اگر این دو کامپیوتر با هم تبادل داشته باشند نحوه تبدیل می بایست از دید کاربر مخفی باشد.به عنوان مثال دیگر ممکن است اطلاعات روی یک ماشین به صورت ASCI و در ماشین دیگری به صورت EBCDIC باشد و هنگام مبادله اطلاعات مابین این دو ماشین بایستی نحوه تبدیل مخفی شود.
مخفی سازی محل (Location)
در واقع کاربر از محل استقرار منابع اطلاعی نداشته باشد و یا از سرویسی استفاده می کند مشخص نباشد که سرویس بر روی کدام کامپیوتر قرار داد(مخفی کردن محل)
مخفی سازی تغییر محل (migration)
مخفی کردن حرکت یک سیستم از یک محل به محل دیگر به عنوان مثال کامپیوتر yahoo که در آمریکا قرار دارد اگر به کانادا منتقل شود از دید کاربر مخفی است.
مخفی سازی تغییر محل در حین استفاده (Relocation)
این بحثمربوط به کامپیوترهای قابل حمل می باشد به عنوان مثال زمانی که از یک laptop استفاده می کنیم و این laptop در حین استفاده از یک محل به محل دیگر منتقل شود،کاربر نبایستی متوجه این تغییر محل شود یعنی با اینکه Ip منطقه ای آن عوض می شود ولی کاربر متوجه نمی شود.
مخفی سازی منابع یکسان (Replication)
وجود چند منبع از یک نوع از دید کاربر مخفی باشد.
مخفی سازی افتادگی یا خطا (failure)
اگر یک سیستم از کار بیفتد کاربر متوجه نشود که از راه Replication قابل حل است یعنی اگر سیستمی از کار افتاد از دیگری استفاده کند.یعنی تفاوت بین slow server و crash را تمییز ندهد.
مخفی سازی استفاده همزمان (concurrency)
ممکن است چند کاربر بخواهند به طور هم زمان از یک منبع استفاده کنند نبایستی متوجه رقابت هم شوند. چندین چاپگر
مخفی سازی (persistent)
برای کاربر مشخص نباشد بر روی حافظه اصلی قرار دارد یا حافظه پایدار،به عنوان مثال در object oriented database زمانی که یک متدی از یک object فراخوانی می شود می بایست این object از حافظه جانبی به حافظه اصلی کپی شود و این فرآیند کپی می بایست از دید کاربر مخفی بماند.
باز بودن (oppeness)
اگر بخواهیم نیازهای جدید یا سرویس های جدید ارائه شود middleware باید بتواند سرویس های جدید را ارائه دهد لازمه این کار این است که از یک زبان تعریف مشترک(IDL) مثل جاوا برای middleware استفاده شود. به عبارت دیگر یک برنامه کاربردی که نوشته می شود برایش مهم نباشد که بر روی linux اجرا می شود یا بر روی windows .جهت داشتن oppeness می بایست تمام تعریف ها کامل و فارغ از پیاده سازی باشد.کامل بودن خیلی مشگل است زیرا طراح یکسری مفروضاتی را داشته است و کسی که بخواهد سیستم را توسعه دهد ممکن است یکسری مفروضات دیگری نیاز داشته باشد.
برای کامل بودن و فارغ بودن از پیاده سازی (داشتن openness) بایستی ویژگی های زیر را داشته باشیم
Portable: بتواند روی هر ماشینی قابل حمل باشد.
FIexible : یک سیستم توزیع شده باز بایستی قابلیت انعطاف داشته باشد،طوری که یک سیستم را بتوان با component های مختلف از توسعه دهنده های مختلف پیکربندی کرد.به طوری که بتوان component جدید تاثیرات جانبی داشته باشد.مثلا به جای componenet، B ازa، B از b را قرار دهیم.
یک سیستم در سه بعد زیر می تواند مورد ارزیابی قرار گیرد. scalability(قابلیت توسعه)
– اندازه (size) :یعنی اینکه ما به راحتی بتوانیم کاربران یا منابع زیادی را به سیستم اضافه کنیم.
– جغرافیا (geagraphica) : ماکسیمم فاصله بین منابع و کاربران
– مدیریتی(Administrative) :یعنی اینکه سیستم با داشتن تعداد زیاد سازمان های اجرائی مستقل باز هم به راحتی قابل مدیریت باشد.
نکته قابل توجه این است که اگر سیستمی بخواهد در یکی با چند تا ابعاد گفته شده قابل توسعه باشد اغلب تا حدی از کارائی سیستم کاسته می شود.
زمانی که یک سیستم نیاز به توسعه دارد مسائل بسیار زیادی وجود دارد که بایستی حل شوند به عنوان مثال در توسعه اندازه (size) اگر کاربران یا منابع زیادی را سرویس دهیم با محدودیت های زیر مواجه خواهیم شد.
محدودیت
– سرویس های متمرکز (centralized services)
– داده متمرکز (centralized Data)
– الگوریتم های متمرکز (centralized algorithms)
از جهت Data :
اگر Data به صورت متمرکز باشد مانند دفترچه تلفن،گسترش آن مشکل می باشد به عنوان مثال برای سازمان بزرگی مانند ثبت احوال،قرار دادن تمام اطلاعات در یک جدول سبب ایجاد مشکل در توسعه می شود.
از جهت service :
الگوریتم بهینه ای برای مسیریابی،تصمیم گرفتن براساس اطلاعات تمام ماشین ها می باشد(دید سراسری) بدین معنا که عمل Routing را یک ماشین انجام می دهد و اطلاعات سراسری را از طریق تمام ماشین ها
تحویل می گیرد ولی این عمل سبب ایجاد مشگلاتی از قبیل ازدحام ترافیک می شوند.پس روش بهتر آن است که از الگوریتم های غیرمتمرکز که خصوصیات زیر را دارند استفاده کنیم.
– هیچ ماشینی اطلاعات کامل از کل سیستم را ندارند.
– ماشین ها بر مبنای اطلاعات محلی خود تصمیم می گیرند.
– از کار افتادن یک ماشین سیستم را از کار نمی اندازد.
– هیچ فرضی در مورد این که یک ساعت سراسری وجود دارد نیست.
اهمیت مورد آخر به این دلیل است که همگام کردن ساعت ها به ویژه در شبکه های بزرگ ملی امکان پذیر نیست.
محدودیت جغرافیا (geographica) :
از جهت جغرافیا مشکل تاخیر داریم،تاخیر در شبکه های محلی حدود چند صد میکروثانیه ولی در یک شبکه گسترده تاخیر در حدود چند صد میلی ثانیه می باشد.در شبکه های گسترده ارتباطات به صورت ذاتی غیر قابل اعتماد می باشد.
پس اگر مولفه های ما centralized باشند سبب به هدر رفتن منابع سیستم می شوند.
مدیریت شبکه:
اگر سیستم جدیدی به سیستم توزیع شده اضافه شود،چون هر سیستم سیاست های domain خودش را دارد،تداخل پیش می آید،برای جلوگیری از این کار می بایست domain سیستمی را که اضافه می شود سیاستی را اعمال کند که دیگر سیستم ها به اطلاعات آن به صورت read only و قابل اجرا دسترسی داشته باشند.
مشکل توزیع شده از لحاظ domain امنیت را به خطر می اندازد.
======