اغلب سیستم های نرم افزاری که در دنیای امروز مورد استفاده قرار میگیرند، به اینترنت متصل هستند و از منابع سرشار موجود در آن استفاده میکنند.
همانطور که میدانید، یک معماری سیستم های موجود، معماری سرویس گیرنده – سرویس دهنده است که در آن، سرویس گیرنده سرویسی را درخواست میکند و سرویس دهنده آن سرویس را ارائه میکند.
سرویس دهنده و سرویس گیرنده دور از هم قرار دارند و سرویس دهنده شامل سرویس ها و منابع مورد نیاز سرویس گیرنده است.
اما تمام اطلاعات مربوط به سرویس گیرنده در یک جا مستقر نیست، بلکه در نقاط مختلفی وجود دارند. به عبارت دیگر، ممکن است یک یا چند نسخه از سرویس دهنده وجود داشته باشد و سرویس گیرنده از نزدیک ترین سرویس دهنده استفاده نماید.
بنابراین سیستم های توزیع شده، امروزه نقش مهم و کلیدی دارند و به طور مداوم در حال تغییر و تحول هستن
یک تعریف مختصر و کلی تر برای سیستم های توزیع شده، تعریفی است که در زیر آورده شده است:
سیستم های توزیع شده، کلکسیونی از کامپیوترهای مستقل است که از دیدگاه کاربران مثل یک سیستم منسجم عمل میکند.
این تعریف چندین جنبه مهم دارد. اولین جنبه این است که سیستم توزیع شده شامل قطعاتی (کامپیوترهایی) است که خودمختار (Autonomous) هستند.
جنبه دوم این است که کاربران (برنامه ها یا انسان ها) فکر میکنند که آنها تنها با یک سیستم سروکار دارند.
این بدان معناست که قطعات خودمختار باید همکاری داشته باشند. چگونگی انجام این همکاری، قلب توسعه سیستم های توزیع شده است.
توجه کنید که هیچ فرضیه ای درباره نوع کامپیوترها وجود ندارد! در اصل، حتی فقط در یک سیستم، آنها میتوانند از کامپیوترهای بزرگ با کارآیی بالا تا گره های کوچکی در شبکه های سنسور باشند.
به همین ترتیب، هیچ فرضیه ای درباره روش اتصال کامپیوترها وجود ندارد
یک ویژگی مهم این است که تفاوت های بین کامپیوترها و روش اتصال بین آنها، اغلب از دید کاربران پنهان است. همین موضوع برای سازمان داخلی سیستم توزیع شده صادق است.
ویژگی مهم دیگر این است که کاربران و کاربردها (برنامه های کاربردی یا Applications) میتوانند به طور یکنواخت و سازگار، با سیستم توزیع شده تعامل داشته باشند و مهم نیست که این تعامل در کجا و در چه زمانی انجام میگیرد.
در اصل، بسط و توسعه سیستم های توزیع شده باید آسان باشد. این ویژگی، نتیجه مستقیم وجود کامپیوترهای مستقل و مخفی بودن چگونگی اتصال آنها و تشکیل یک سیستم کل است
کاربران و کاربردها، به این موضوع کار ندارند که بخش هایی جایگزین یا تعمیر شده اند یا بخش های جدیدی اضافه شده اند تا به کاربران و کاربردهای دیگری سرویس دهند.
به منظور از پشتیبانی از کامپیوترها و شبکه های غیر یکسان و نیز ارائه دیدگاه تک سیستمی، سیستم های توزیع شده معمولاً به وسیله لایه ای از نرم افزار، سازماندهی میشوند؛ یعنی، به طور منطقی بین لایه بالاتر که شامل کاربران و کاربردهاست و لایه زیرین که شامل سیستم عامل و امکانات ارتباطی پایه است قرار میگیرد.
لازم به ذکر است که لایه میان افزار، در چند ماشین بسط می یابد و برای هر کاربرد، نرم افزار یکسانی را ارائه میکند
این بدان معناست که قطعات خودمختار باید همکاری داشته باشند. چگونگی انجام این همکاری، قلب توسعه سیستم های توزیع شده است.
توجه کنید که هیچ فرضیه ای درباره نوع کامپیوترها وجود ندارد! در اصل، حتی فقط در یک سیستم، آنها میتوانند از کامپیوترهای بزرگ با کارآیی بالا تا گره های کوچکی در شبکه های سنسور باشند.
به همین ترتیب، هیچ فرضیه ای درباره روش اتصال کامپیوترها وجود ندارد.
که تفاوت های بین کامپیوترها و روش اتصال بین آنها، اغلب از دید کاربران پنهان است. همین موضوع برای سازمان داخلی سیستم توزیع شده صادق است.
ویژگی مهم دیگر این است که کاربران و کاربردها (برنامه های کاربردی یا Applications) میتوانند به طور یکنواخت و سازگار، با سیستم توزیع شده تعامل داشته باشند و مهم نیست که این تعامل در کجا و در چه زمانی انجام میگیرد.
در اصل، بسط و توسعه سیستم های توزیع شده باید آسان باشد. این ویژگی، نتیجه مستقیم وجود کامپیوترهای مستقل و مخفی بودن چگونگی اتصال آنها و تشکیل یک سیستم کل است.
سیستم توزیع شده دائماً مهیاست، گرچه ممکن است بخشی از آن موقتاً از دور خارج شده باشد.کاربران و کاربردها، به این موضوع کار ندارند که بخش هایی جایگزین یا تعمیر شده اند یا بخش های جدیدی اضافه شده اند تا به کاربران و کاربردهای دیگری سرویس دهند.به منظور از پشتیبانی از کامپیوترها و شبکه های غیر یکسان و نیز ارائه دیدگاه تک سیستمی، سیستم های توزیع شده معمولاً به وسیله لایه ای از نرم افزار، سازماندهی میشوند؛ یعنی، به طور منطقی بین لایه بالاتر که شامل کاربران و کاربردهاست و لایه زیرین که شامل سیستم عامل و امکانات ارتباطی پایه است قرار میگیرد
هدف اصلی سیستم توزیع شده این است که کاربران (و کاربردها) به راحتی به منابع راه دور دسترسی داشته باشند و آنها را به روش کنترل شده و موثر به اشتراک بگذارند.
منابع مذکور میتوانند هر چیزی باشند، ولی نمونه هایی از آنها عبارتند از چاپگرها، کامپیوترها، امکانات ذخیره سازی، داده ها، فایل ها، صفحات وب و شبکه ها.
دلایل زیادی برای اشتراک منابع وجود دارد. یک دلیل روشن، صرفه جویی اقتصادی است.
به عنوان مثال اشتراک یک چاپگر بین چندین کاربر در یک اداره، اقتصادی تر از این است که برای هر کاربر یک چاپگر خریداری شود.
یک هدف مهم سیستم توزیع شده، پنهان سازی این حقیقت است که فرآیندها (Processes) و منابع آن، به طور فیزیکی در چندین کامپیوتر توزیع شده اند.
سیستم توزیع شده ای که قادر است خودش را طوری به کاربران و کاربردها ارائه کند که گویی فقط یک سیستم کامپیوتری است، شفاف (Transparent) نام دارد.
برای بررسی کلی این موضوع می بایست در ابتدا بررسی کنیم که چه نوع شفافیت هایی در سیستم توزیع شده وجود دارد و پس از آن بایستی به این پرسش عمومی بپردازیم که آیا همیشه نیاز به شفافیت وجود دارد یا خیر.
بررسی این دو موضوع بسیار طولانی و خارج از بحث ماست. البته سعی میکنیم در آینده و در صورت نیاز کاربران این موضوع را نیز به طور کامل و مفصل مورد بررسی قرار دهیم.
هدف مهم دیگر سیستم های توزیع شده، باز بودن است.
سیستم توزیع شده باز، سیستمی است که سرویس را بر اساس قوانین استانداردی ارائه میکند که نحو (Syntax) و معنای آن سرویس ها را توصیف میکند.
به عنوان مثال، در شبکه های کامپیوتری، قوانین استاندارد، فرمت، محتویات و معنای پیام های ارسالی و دریافتی را اداره میکند. این قوانین در پروتکل ها قرار میگیرند.
در سیستم های توزیع شده، سرویس ها معمولاً از طریق واسط ها (Interface) مشخص میشوند که اغلب در زبان تعریف واسط (IDL) تشریح میشوند.
تعریف های واسط که در IDL نوشته شدند، تقریباً همیشه نحو سرویس ها را مشخص میکنند. به عبارت دیگر، آنها دقیقاً اسامی توابعی را مشخص میکنند که به همراه انواع پارامترها، مقادیر برگشتی، استثناهایی که قابل صادر شدن هستند و … فراهم میشوند.
بخش دشوار، بیان دقیق عملکرد سرویس ها، یعنی معنای واسط هاست.
در عمل، این مشخصات توسط یک زبان طبیعی به صورت رسمی بیان میشود
نظر به جهانی بودن اتصال از طریق اینترنت، توسعه پذیری (Scalability)، یکی از مهمترین اهداف طراحی سازندگان سیستم های توزیع شده است.
توسعه پذیری سیستم را حداقل در سه بعد مختلف میتوان اندازه گیری کرد.
اولاً، سیستم میتواند از نظر اندازه قابل توسعه باشد، یعنی به راحتی میتوان کاربران و منابعی را به آن اضافه نمود.
ثانیاً، سیستمی با قابلیت توسعه جغرافیایی، سیستمی است که در آن، کاربران و منابع میتوانند از یکدیگر فاصله بسیار زیادی داشته باشند.
ثالثاً، سیستم میتواند از نظر سرپرستی قابل توسعه باشد، یعنی حتی اگر بسیاری از سازمان های سرپرستی مستقل را دربر گیرد، مدیریت آن آسان می باشد.
متأسفانه، سیستمی که در یک یا چند بعد از این ابعاد توسعه پذیر باشد، با توسعه سیستم، کارآیی آن کاهش می یابد.