در بخشهای قبل، دلایل بوجود آمدن سیستمهای توزیع شده بررسی شد و تاکید کردیم که نیازمندیها، باعث تغییر و تکامل سیستمهای ما میشوند و بر همین اساس بررسی کردیم که چه نیازمندیهایی باعث میشوند که دیگر سیستمهای متمرکز به تنهایی پاسخگوی نیازهای ما نباشند و عاملی شوند برای رفتن به سمت سیستمهای توزیع شده. گفتیم که اتخاذ تصمیمات نادرست چه عواقبی را برای سیستمهای ما بوجود میآورد و بر همین اساس مهمترین فاکتورها را در انتخاب سیستمهای توزیع شده، به شما معرفی کردیم. تعاریف مختلفی از این نوع سیستمها را در اختیار شما قرار دادیم؛ خصوصیات، مزایا و معایب سیستمهای توزیع شده را به شما معرفی کردیم، تا با دید باز، یک انتخاب درست را با کمترین میزان ریسک انجام دهیم.
در این بخش ما 4 هدف اصلی را که باید در سیستمهای توزیع شده برآورده شوند، بر اساس ارزش آنها مورد بررسی قرار میدهیم. یک سیستم توزیع شده باید اولا منابع را به آسانی در دسترس کاربران قرار دهد. دوما شفاف باشد و تمام پیچیدگیهای یک سیستم توزیع شده را از دید کاربر، مخفی کند. سوما باز و قابل گسترش باشد؛ بصورتیکه به آسانی و با شفافیت کامل بتوانیم اجزای جدیدی را به آن اضافه کنیم. چهارما مقیاس پذیر باشد؛ بصورتیکه بدون اینکه مشکلی برای سیستم بوجود بیاید، بتوانیم منابع موجود سیستم را افزایش دهیم. در این بخش جزئیات هر یک از این اهداف را مورد بررسی قرار میدهیم.
اهداف سیستمهای توزیع شده
1- Connecting resources and users: مشخصترین و اصلیترین هدف سیستمهای توزیع شده، اتصال کاربران به منابع و اشتراک منابع بصورت کنترل شده با کارآیی بالا برای کاربران است. بهصورتیکه کاربران به آسانی به منابع دسترسی داشته باشند. منظور از منابع، هرچیزی در سیستمهای توزیع شده میتواند باشد. منابعی مانند دادهها، سختافزارها، فایلها، Componentها، زیرسیستمها و هر چیز دیگری که کاربران میتوانند بصورت مستقیم و غیر مستقیم به آنها دسترسی داشته باشند. یکی از مهمترین دلایل دسترسی به این هدف، مسائل اقتصادی است. بطور مثال ممکن است ما سیستم خودمان را طوری طراحی کنیم که پردازشهای بسیار مهم و پیچیده در تعدادی از سخت افزارهای بسیار پر هزینه انجام شوند. به این صورت ما این سخت افزارها را برای سایر قسمتهای سیستم، به اشتراک میگزاریم و از طریق دیگر قسمتهای سیستم، دسترسی آن را به کاربران میدهیم. در این حالت دیگر نیازی نیست هر قسمت جداگانه در سیستم، سخت افزاری بسیار قوی را برای خودش نیاز داشته باشد. یا زمانیکه ما یک زیرسیستم را یکبار پیاده سازی میکنیم و دسترسی آن را به سایر قسمتها میدهیم، سایر سیستمها، دیگر نیازی نیست آن زیرسیستم را برای خودشان پیاده سازی کنند و تنها از زیرسیستم موجود استفاده میکنند. دسترسی به این هدف باعث میشود تا کاربران به راحتی به تمام منابع موجود در سیستمهای توزیع شده دسترسی داشته باشند.
2- Distribution transparency: بدلیل پیچیدگیهای بسیار زیاد در سیستمهای توزیع شده، شفافیت، کمک بسیار بزرگی به سادگی نحوه تعامل کاربر با سیستمهای توزیع شده میکند. شفافیت در سیستمهای توزیع شده بدین معنا است که سیستم باید تمام پیچیدگیهای خود را از دید کاربر مخفی کند و پیاده سازی سیستم بصورت توزیع شده نباید هیچ پیچیدگی را در نحوه تعامل کاربر با سیستم بوجود بیاورد.
درواقع در سیستمهای توزیع شده، درخواست دریافت شده، در بین منابع سیستم توزیع میشود. تمام منابع با همکاری که با یکدیگر انجام میدهند، درخواست مورد نظر را پردازش کرده و پاسخ لازم را به کاربر ارائه میدهند. در این بین ممکن است منابع موجود در سیستم، رفتارهای متفاوتی را داشته باشند؛ مثلا هر زیرسیستم در سخت افزار و سیستم عامل جداگانهای اجرا شود که باعث میشود حتی نحوه دستیابی به فایلها یا دادههای هر زیرسیستم نیز با سایر زیرسیستمها متفاوت باشد. شفافیت در سیستمهای توزیع شده بدین معنا است که یک سیستم توزیع شده باید خود را بهصورت یک سیستم واحد که در یک سخت افزار ارائه میشود، ارائه دهد تا کاربران هیچ نگرانی در نحوه تعامل با سیستم نداشته باشند. شفافیت در سیستمهای توزیع شده جنبههای مختلفی دارد که در این قسمت آنها را بررسی میکنیم.
جنبههای مختلف شفافیت در سیستمهای توزیع شده
1- Access Transparency: شفافیت در دسترسی به منابع یا مخفی کردن پیچیدگیها و روشهای مختلف دسترسی به منابع. زیر سیستمهای متفاوت ممکن است در سیستم عاملهای متفاوتی نیز اجرا شوند و همانطور که میدانید هر سیستم عامل ممکن است نحوه دسترسی به منابعش با سایر سیستم عاملها متفاوت باشد. در اینجا ما باید زیر سیستمهای خود را طوری طراحی کنیم تا این تفاوتهای در نحوه دسترسی به منابع را از دید کاربر مخفی کنند و این حس را به کاربر بدهد که سیستم، یک روش واحدی را برای دسترسی به منابع دارد.
2- Location Transparency: شفافیت در مکان منابع و مخفی کردن اینکه منابع در سطح شبکه توزیع شدهاند. این جنبه بیان میکند که کاربران نمیتوانند بگویند که منابع بصورت فیزیکی در سخت افزارهای متفاوتی توزیع شدهاند.کاربران هیچ درکی از اینکه ممکن است منابع حتی بصورت جغرافیایی در مکانهای بسیار دوری از یکدیگر قرار گرفتهاند، ندارند.
3- Migration Transparency: مخفی کردن اینکه ممکن است مکان منابع تغییر یابند. در یک سیستم توزیع شده ممکن است به هر دلیلی، مکان منابع تغییر کند. بطور مثال ممکن است با افزایش دادهها نیاز به افزودن Node جدیدی به سیستم باشد تا قسمتی از دادههای سیستم از این پس از طریق این Node در دسترس باشند. این جابجایی منابع نباید هیچ تاثیری در نحوهی تعامل کاربر داشته باشد.
4- Relocation Transparency: مخفی کردن اینکه منابع ممکن است در زمان استفاده، تغییر مکان دهند. در این حالت دقیقا در زمانیکه شخص در حال استفاده از منابع است ممکن است منابع جابجا شوند که این جابجایی در زمان استفاده از منابع نباید هیچ تاثیری در نحوه تعامل کاربر با سیستم داشته باشد. بطور مثال زمانیکه دو کاربر از طریق تلفن همراه در حال ارسال اطلاعات برای یکدیگر هستند، جابجایی هر یک از این دو کاربر، نباید تاثیری در جریان ارتباطی آنها داشته باشد.
5- Replication Transparency: مخفی کردن اینکه منابع در چند جا کپی شدهاند. در یک سیستم توزیع شده برای بهبود کارآیی و دسترسی ممکن است منابع در چند جای مختلف کپی شوند و شفافیت در Replication میگوید ما باید این واقعیت را که ممکن است منابع ما در سخت افزارهای مختلفی کپی شده باشند، از دید کاربر مخفی کنیم.
6- Concurrency Transparency: مخفی کردن اینکه ممکن است منابع، بین چند کاربر مشترک باشند. بدلیل بالا بودن تعداد کاربران در سیستمهای توزیع شده، همزمانی در دسترسی به منابع مشترک، بسیار بیشتر اتفاق میافتد و این مهم است که هیچ یک از کاربران ندانند که کاربر دیگری بصورت همزمان در حال استفاده از آن داده است.
7- Failure Transparency: مخفی کردن خرابی و بازیابی منابع یک سیستم توزیع شده، از کاربر. در یک سیستم توزیع شده ممکن است منابع به هر دلیلی از دسترس خارج شوند. در این صورت نباید از دسترس خارج شدن منابع و بازیابی آنها هیچ تاثیری در جریان تعامل کاربر با سیستم داشته باشد.
البته این نکته را نیز بگویم اگرچه شفافیت یکی از اهداف بسیار مهم سیستمهای توزیع شدهاست و ما نیز باید سیستمی را طراحی کنیم که تا حد امکان به این هدف دست پیدا کند، اما بدلیل این که گاهی ممکن است شفافیت تاثیر مخربی بر روی کاربر داشته باشد، باید درجههایی را برای آن در نظر بگیریم. بطور مثال زمانیکه دو کاربر از طریق تلفن همراه خود با یکدیگر در ارتباطند، نیازی به مخفی کردن موقعیت مکانی آنها نیست. یا در سیستمهای موقعیت یاب، اصل بر این است که موقعیت منابع مختلف مشخص باشند. یا زمانیکه قرار است یک درخواست را برای یک چاپگر ارسال کنیم بهتر است درخواست ما به نزدیکترین چاپگر به ما ارسال شود تا اینکه به یک چاپگر در جایی دیگر ارسال شود. منظور از دستیابی به این هدف این است که پیچیدگی سیستمهای توزیع شده باید از دید کاربر مخفی بماند تا تاثیر مخربی بر روی کاربر نداشته باشد؛ در صورتیکه نیاز کاربر به عدم شفافیت برخی از قسمتهای سیستم باشد بهتر است درجههایی را برای سیستمهای توزیع شده در نظر بگیریم.
3- Openness: باز بودن یا قابل گسترش بودن سیستمهای توزیع شده یکی دیگر از اهداف بسیار مهم این سیستمها میباشد. به این صورت که یک سیستم در حال اجرا باید توانایی اضافه کردن منابع جدید را داشته باشد. بطور مثال با افزوده شدن نیازمندیهای جدید، نیاز میشود که یک زیر سیستم جدید یا Component جدید را پیاده سازی کنیم. قسمت جدید به راحتی و بدون تاثیر در جریان تعامل کاربر باید بتواند به سیستم اضافه شود. در اکثر موارد این هدف با استفاده از یکسری قراردادهای مشخص که تمامی زیر سیستمها آنها را میشناسند و رعایت میکنند، محقق میشود.
4- Scalability: مقیاس پذیری سیستمهای توزیع شده بدین معنی است که با رشد مواردی مانند تعداد پردازش و درخواست یا موقعیت جغرافیایی کاربران، سیستم قادر باشد بدون تاثیر بر جریان تعامل کاربر با سیستم، آنها را پوشش دهد. یعنی بطور مثال زمانیکه تعداد درخواستهای کاربران سیستم افزایش مییابد، با Replicate قسمتهای موجود سیستم در سخت افزارهای جدید میتوانیم بار پردازشی را بین تعداد بیشتری از Nodeها تقسیم کنیم. به این صورت سیستم میتواند بدون از دسترس خارج شدن، تعداد بیشتری از درخواستهای کاربران را پوشش دهد. یا زمانیکه قرار است موقعیتهای جدید جغرافیایی را سیستم پوشش دهد، با اضافه کردن منابع مورد نیاز، در آن موقعیت جغرافیایی، سیستم قادر است نیاز کاربران آن مکان جغرافیایی را برآورده کند.
تا به این قسمت از سری مقالات سیستمهای توزیع شده، هدف من این بوده که با چرایی وجود این نوع از سیستمها و نحوهی انتخاب آنها و اهداف سیستمهای توزیع شده آشنا شوید. در بخشهای بعد، روشهای مختلف طراحی و پیاده سازی سیستمهای توزیع شده را مورد بررسی قرار میدهیم و میبینیم که چه ابزارهایی برای پیاده سازی سیستمهای توزیع شده در NET. وجود دارند و با توجه به نوع کارآیی هر یک از این ابزارها، آنها را بصورت جداگانه مورد استفاده قرار میدهیم تا با مزایا و معایب هریک آشنا شویم. البته این را نیز ذکر کنم که با توجه به تعاریف سیستمهای توزیع شده، انواع مختلفی از سیستمهای توزیع شده وجود دارند که ما از قبل با برخی از آنها آشنا هستیم؛ معماریهایی مانند Client/Server یا N-Tier نمونههایی از سیستمهای توزیع شده هستند که در آنها وظایف، در سخت افزارهای متفاوتی تقسیم شده و ارتباط هر قسمت از طریق سرویسهایی که ما پیاده سازی میکنیم، صورت میپذیرد و به دلیل اینکه مطمئنا همه شما با نحوه طراحی و پیاده سازی آنها و نحوه ارتباط قسمتهای مختلف آنها آشنا هستید، در سری مقالات سیستمهای توزیع شده در NET.، دیگر نیازی به توضیحی در مورد آنها نمیباشد. هدف من از قسمتهای مرتبط با پیاده سازی سیستمهای توزیع شده، چگونگی تکامل معماریهایی مانند N-Tier بوسیله ابزارهایی است که با هدف دستیابی به خصوصیات و اهداف سیستمهای توزیع شده بوجود آمدهاند.