گزارش-فنی-Grid-Computing-(docx) 78 صفحه
دسته بندی : تحقیق
نوع فایل : Word (.docx) ( قابل ویرایش و آماده پرینت )
تعداد صفحات: 78 صفحه
قسمتی از متن Word (.docx) :
دانشگاه فنی مهندسی
گزارش فنی
موضوع:
چکیده
Grid Computing
هدف Grid Computing به اشتراک گذاری منابع در یک محیط پویا و احتمالاً ناهمگن است . این منابع با سیاستهای مختلف در دسترس هستند . این "به اشتراک گذاری" عمدتاً برای اهداف محاسباتی برای مقاصد علمی است اما در موارد اقتصادی نیز کاربرد دارد . این منابع می توانند منابع گوناگونی از جمله CPU ، هارد دیسک ، نرم افزار و سنسورها باشند .
در این گفتار مفاهیم ، مزیت ها و کاربردهای Grid را بررسی می کنیم ، یک معماری برای Grid معرفی می کنیم و مدل OGSA را بررسی می کنیم . یک مدل کلی برای برنامه نویسی تحت Grid بیان می کنیم و جزئیات این مدل را برای مسائل Back-track بررسی می کنیم و درخت خاکستری را معرفی می کنیم . در نهایت مسئله ی N – وزیر را در محیط Grid حل می کنیم و برای نشان دادن قدرت محاسبه ی موازی ، نتایج عمل ضرب ماتریس با استفاده از ده ماشین را بیان می کنیم .
واژه های کلیدی
Grid ، Grid Computing ، مجازی سازی ، سازمان مجازی ، مسائل NP ، درخت خاکستری ، N- وزیر، OGSA ، پردازش موازی ، ریزکار .
فهرست مطالب
عنوانصفحه
مقدمه.............................................................................................................................................................
فصل یکم – Grid Computing چیست ؟.........................................................................................
فصل دوم – مزیت های Grid Computing ....................................................................................
2-1- استفاده موثر از منابع.................................................................................................................
2-2- قابلیت محاسبه موازی.................................................................................................................
2-3- منابع مجازی و سازمان های مجازی ........................................................................................
2-4- دسترسی به منابع اضافه ................................................................................................................
2-5- متعادل سازی استفاده از منابع...................................................................................................
2-6- قابلیت اطمینان ............................................................................................................................
2-7- مدیریت .............................................................................................................................................
فصل سوم- مفاهیم و معماری...........................................................................................................................
3-1- سازمان های مجازی و Grid...........................................................................................................
3-1-1- چالش های تکنیکی در به اشتراک گذاشتن ..........................................................................
3-1-2-سیر تکامل تکنولوژی Grid..........................................................................................................
3-2- معماری Gri........................................................................................................................................
3-2-1- Fabric : رابط هایی برای کنترل های محلی .....................................................................
3-2-2- Connectivity : برقراری ارتباط ساده و امن ...................................................................
3-2-3 Resource : به اشتراک گذاشتن یک منبع .....................................................................
3-2-4- Collective : هماهنگی چندین منبع ...................................................
3-2-5- Application......................................................................................................................
3-3- پیاده سازی معماری Grid .........................................................................................................
3-3-1-Globus Toolkit v2.0 ...................................................................................................
3-3-1-1- Fabric............................................................................................................................
3-3-1-2- Connectivity............................................................................................................
3-3-1-3- Resource......................................................................................................................
3-3-1-4- Collective......................................................................................................................
3-3-2- Open Grid Services Architecture ...............................................................
فصل چهارم – مدلی برای برنامه نویسی ...............................................................................................
4-1 تعریف محیط و هدف ..................................................................................................................
4-2- المان ها .........................................................................................................................................
4-2-1- کار..............................................................................................................................................
4-2-2- قسمت کردن ...........................................................................................................................
4-2-3- ریزکار.........................................................................................................................................
4-2-4- منبع محاسباتی......................................................................................................................
4-2-5- زمانبند.........................................................................................................................................
4-2-6- ذخیره کننده ...........................................................................................................................
4-3- مدل برنامه نویسی ، به صورت شبه کد .................................................................................
4-3-1 – طرف منابع محاسباتی ...........................................................................................................
4-3-2- طرف زمانبند ............................................................................................................................
4-3-3- تقسیم کننده ..............................................................................................................................
4-4- فلوچارت و کمی از جزئیات برنامه نویسی ..................................................................................
4-4-1- فلوچارت طرف زمانبند ...............................................................................................................
4-4-2- فلوچارت طرف منبع محاسباتی .............................................................................................
4-5- روشی برای تقسیم کردن در مسائل Back-track..............................................................
4-5-1- ساختمان داده ی گره ...............................................................................................................
4-5-2- درخت خاکستری .....................................................................................................................
4-5-3- قطع کردن درخت ......................................................................................................................
4-5-4 زمانبندی ......................................................................................................................................
4-5-5- نکات تکمیلی ..........................................................................................................................
فهرست شکلها
عنوان صفحه
شکل 1-1 – مراحل مجازی سازی.................................................................................................
شکل 2-1- Grid منبع نامتجانس و از نظر جغرافیایی از هم جدا را مجازی سازی می کند
شکل 2-2- کارها به جاهایی که بار کمتری دارند برده می شوند .............................................
شکل 2-3- پیکر بندی Grid در مواقع بحرانی ...........................................................................
شکل 2-4- مدیران می توانند سیاست های خاصی را تنظیم کنند ............................................
شکل 3-1- یک سازمان مجازی..............................................................................................................
شکل 3-2- سیر تکامل تکنولوژی Grid...............................................................................................
شکل 3-3- لایه های معماری Grid...................................................................................................
شکل 3-4- مثالی از مکانیزم Globus Toolkit................................................................................
شکل 4-1-المان های سیستم ................................................................................................................
شکل 4-2- قسمت های مختلف سیستم ..............................................................................................
شکل 4-3 – قسمتی از فلوچارت طرف زمانبند...................................................................................
شکل 4-4- فلوچارت طرف زمانبند........................................................................................................
شکل 4-5- طرف منبع محاسباتی.........................................................................................................
شکل 4-6- درخت متقارن و منابع متقارن...........................................................................................
شکل 4-7- درخت متقارن و منابع نامتقارن.........................................................................................
شکل 4-8- درخت نامتقارن و منابع متقارن........................................................................................
شکل 4-9- درخت نامتقارن و منابع نامتقارن......................................................................................
شکل 4-10- مراحل زمانبندی ...............................................................................................................
شکل 4-11 مراحل زمانبندی.....................................................................................................................
مراجع و منابع.........................................................................
مقدمه
واژه ی Grid Computing در اواخر دهه نود در مورد ایجاد قابلیت دسترسی ساده به منابع محاسباتی مانند آنچه در مورد انرژی الکتریسیته در شبکه برق وجود دارد توسط آقایانIan Foster وCarl Kesselman در کتاب “ The Grid : Blue print for new computing infrastructure ” مطرح شد . آنها در آن کتاب در مورد Grid این طور نوشتند :
" Grid محاسباتی یک زیر ساخت نرم افزاری و سخت افزاری است که قابلیت استفاده از تجهیزات محاسباتی را قابل اطمینان ، به صورت کم خرج ، فراگیر و سازگار فراهم می آورد .
در سال 2000 آنها با همکاری Steve Tuecke مقاله ای با عنوان “The anatomy of the grid” نوشتند و در آنجا هدف از Grid را اینگونه معرفی کردند :
" به اشتراک گذاری متوازن منابع برای حل مسئله در یک محیط پویا ، شامل یک سازمان مجازی تشکیل شده صنعت "
و بعد اضافه کردند که :
" به اشتراک گذاری منابع که ما از آن صحبت می کنیم ، مبادله ی فایل نیست . بلکه منظور ما دسترسی مستقیم به کامپیوترها ، نرم افزارها ، داده ها و دیگر منابع است . این به اشتراک گذاری تحت کنترل کامل صاحب منبع است . مجموعه ای از افراد و یا شرکت ها که این نوع به اشتراک گذاری را داشته باشند ، سازمان مجازی خوانده می شود "
بعداً آقای Foster در مقاله ی “ What is the grid ?”، Grid را سیستمی تعریف می کند
که سه ویژگی زیر را داشته باشد .
مجموعه ای از منابع هماهنگ که دارای یک مدیریت مرکزی نیستند .
از Interface ها و پروتکل های استاندارد ، باز و عام – منظوره بهره می برند .
کیفیت سرویسی که کل سیستم ارائه می دهد بزرگتر از کیفیت سرویس هر کدام از منابع است .
تمام مفاهیم بالا در واقع Grid را از زاویه دید مختلفی بررسی می کنند ولی بصورت ساده هدف Grid به اشتراک گذاری منابع بصورت هماهنگ در یک محیط ( احتمالاً ) ناهمگن و پویا است .
فصل یکم : Grid Computing چیست ؟
Grid Computing می تواند معنی های مختلفی برای افراد مختلف داشته باشد . تصور مشهور در مورد Grid ، چیزی شبیه شبکه ی برق ( Power Grid ) است که کاربران ( استفاده کنندگان از وسایل برقی ) بدون توجه به اینکه این برق از کجا می آید ، الکتریسیته را از پریز می گیرند .
با این دید در مورد Grid Computing ، می توان " Computing " را به عنوان قدرت ( انرژی برق در نظر گرفت و کاربران ( یا برنامه ها ) به منابع محاسباتی ( پردازنده ها ، ذخیره کننده ها ، داده ها ، برنامه ها و غیره ) دسترسی پیدا می کند و اهمیتی ندارد که این منابع از نظر فیزیکی کجا قرار گرفته اند و یا تکنولوژی مورد استفاده در آنها ، سخت افزار و نرم افزار آنها چیست .
این دید از Grid Computing می تواند خلاقیت کسی را برانگیزد و در نهایت این ایده به حقیقت بپیوندد ولی در این راه مشکلات تکنیکی زیادی وجود دارد که باید حل شود . اگر این هدف به عنوان هدف نهایی در نظر گرفته شود ، مراحل کوچکتر زیادی باید طی شود و هر کدام از این مراحل مزیت های خود را دارند و تا اندازه ای ما را به هدف نزدیک می کنند .
پسGrid Computing را می توان مانند یک مسیر جذاب از تکنولوژی ها و راهکار های مختلف دید که طی کردن این مسیر ما را به هدف نهایی نزدیکتر می کند . قسمت مهم این پیشرفت در محاسبات توزیع شده است که امکان پیاده سازی برنامه ها در سیستمی که از سازمان های مختلف تشکیل شده است برای به اشتراک گذاشتن منابع را فراهم می آورد . به طور خلاصه امکان" مجازی سازی" را فراهم می آورد . مجازی سازی در زمینه تکنولوژی ، Platform ها و سازمانها . این مجازی سازی فقط با استـاندارد های بـاز امکان پذیر است . استـاندارد های بـاز کمک می کنند که مطمئن
برنامه ها می توانند بصورت شفاف سیستم حاوی منابع را ببینند . [kessel 2004] .
محیطی که می خواهد قابلیت استفاده از منابع بصورت شفاف در یک محیط توزیع شده و نامتجانس را فراهم کند ، نه فقط نیاز دارد که منابع را مجازی سازی کند ، بلکه تکنولوژی و استانداردهایی برای زمان بندی ، مدیریت ، امنیت و موارد دیگر نیاز دارد . Grid Computing می تواند در هر مرحله ای از مجازی سازی تعریف شود . اینکه مجازی سازی تا چه مرحله ای انجام شود ، به نظر استفاده کننده بستگی دارد ولی حتی در یک مرحله ی پایین مجازی سازی نیز می توان گفت که یک سیستم مبتنی بر Grid تولید شده است .
این مراحل در شکل 1-1 نشان داده شده است . از قسمت پایین سمت چپ ، مجازی سازی از ساختن چندین ماشین مجازی بر روی منحنی حرکت می کنیم به سیستم هایی شامل چند کامپیوتر متجانس و توزیع شده می رسیم . مجازی سازی فقط به سرورها و CPU ها محدود نمی شود . بلکه تا حافظه ها ، شبکه ها و یا حتب برنامه ها نیز گسترده می شود . وقتی بر روی منحنی حرکت را ادامه می دهیم به مجازی سازی بر روی منابع غیر مشابه می رسیم . مرحله ی بعد مجازی سازی شرکت ها ست ، نه فقط بر روی مراکز داده و دپارتمان ها ، بلکه بر روی سازمان های توزیع شده و بعد مجازی سازی در خارج از سازمان و در سطح اینترنت .
شکل 1-1- مراحل مجازی سازی
پیاده سازی های قبلی در زمینه Grid Computing به صورت داخل شرکتی وجود داشت ولی اکنون این پیاده سازی ها به سمت بیرونی شدن و در سطح چندین شرکت پیش می رود .
تفاوت Grid های درون شرکتی و Grid هایی که در سطح چندین شرکت وجود دارند مربوط به دامنه های امنیتی ، درجه ی ایزوله سازی ، نوع سیاست و حوزه ی آن می شود . اینگونه مسائل ، طبیعتاً مسائل بنیادی معماری نیستند بلکه مربوط به شرکت ها می شوند . آنها می خواهند مطمئن شوند که شکافی بین مدلهای محاسبات توزیع شده در بین شرکت های شرکت کننده و زیر ساختهای IT داخلی وجود ندارد .
Grid Computing استانداردهای باز ی وب سرویس ها را توسعه داده است تا با استفاده از آنها بتوان منابع محاسباتی را روی بستر اینترنت ارائه کرد . خیلی کم اتفاق می افتد که Grid بر روی یک محیط همگن پیاده سازی شود و معمولاً ما یک محیط ناهمگن سر و کار داریم .
اگر بیشتر بر روی راهکارهای محاسبات توزیع شده متمرکز شویم می توانیم Grid Computing را محاسبات توزیع شده بر روی منابع مجازی سازی شده تعریف کنیم . هدف ساختن یک کامپیوتر پر قدرت مجازی است . این کامپیوتر با استفاده از تعدادی منابع محاسباتی به هم پیوسته و احتمالاً ناهمگن ساخته شده است .
فصل دوم – مزیت های Grid Computing
در این فصل مزیت هایی که Grid Computing این است که برنامه ای که معمولاً روی ماشین خاصی اجرا می شود ، در شرایطی خاص به خاطر این که آن ماشین مشغول است ، در ماشین دیگری که کمتر مشغول است اجرا گردد .
برای این چندین سناریویی دو پیش نیاز وجود دارد . اول این که برنامه قابلیت اجرا در ماشین راه دور را داشته باشد . به عنوان مثال نباید به داده های روی ماشین اصلی وابسته باشد . دوم این که ماشین دوم ویژگی های سخت افزاری و نرم افزاری که در مورد نیاز آن برنامه است را داشته باشد .
برای مثال برنامه ای که بیشتر وقت خود را صرف محاسبه بر روی داده های ورودی می کند و خروجی تولید می کند احتمالاً ساده ترین و ایده آل ترین برنامه ای است که می توان با این Grid استفاده کرد . اگر مقدار ورودی و خروجی زیاد باشد ، باید فکر بیشتری شود که این برنامه بتواند به صورت موثر بر روی Grid اجرا شود . به نظر نمی رسد که از واژه ی " پردازنده ی راه دور " در Grid استفاده شود . چون معمولاً با تاخیر بسیار زیادی برای رساندن داده ها به پردازنده روبرو هستیم .
در بیشتر سازمان ها تعداد بسیار زیادی منابع محاسباتی وجود دارد که از توان آنها به درستی استفاده نمی شود . معمولاً بیشتر ماشین های رومیزی در یک روز کاری ، کمتر از 5 درصد مشغول هستند . در برخی از سازمان ها ماشین های سرور نیز در بیشتر اوقات بی کار هستند .Grid Computing بستری برای استفاده موثر از این منابع به وجود می آورد .
منابع محاسباتی تنها منابعی نیستند که ممکن است از آنها کم استفاده شود . ممکن است ماشینها
مقدار زیادی فضای استفاده نشده بر روی دیسک خود داشته باشند . Grid Computing ( به طور خاص Data Grid ) این فضاها را به فضای مجازی بزرگ ، " مجازی سازی " می کند و در نتیجه بستری برای استفاده موثر از فضاهای استفاده نشده فراهم می آورد .
اگر یک پردازش دسته ای به مقدار زیادی داده نیاز داشته باشد ، این داده ها می توانند در نقاط استـراتژیک مختلف پخش شوند و بنابـراین اگر این پردازش بخواهد در ماشین دیگری اجرا شود ، داده ها در آنجا هستند و نیازی نیست که به جای دیگری منتقل شود . این کار باعث افزایش کارایی می شود و نیز می توان از نسخه های گوناگون به عنوان نسخه ی پشتیبان برای وقتی که نسخه ی اصلی از بین رود استفاده کرد . این کار مزیت دیگر Grid ، متعادل کردن استفاده از منابع است .
ممکن است برای سازمانی یک پردازش غیر منتظره پیش آید و ماشینی که قرار است پردازش را انجام دهد بسیار مشغول باشد ، اگر این پردازش بتواند در بستر Grid اجرا شود ، می توان آن را به ماشین دیگری انتقال داد تا استفاده از منابع به صورت متعادل انجام گیرد . این متعادل سازی استفاده از منابع می تواند برای CPU ، حافظه و یا هر منبع دیگر موجود در Grid استفاده شود .
[jaco 2005]
2-2- قابلیت محاسبه ی موازی
محاسبات بزرگ قابلیت موازی سازی دارند یکی از مواردی است که Grid کاربرد گسترده ای دارد عـلاوه بر کـارهای تحقیقـاتی و علمـی این دید از Grid Computing در بیولـوژی ، مدل سـازی اقتصادی ، یافتن نفت ، انیمیشن سازی و غیره نیز کاربرد دارند .
ویژگی مشترک این کاربرها این است که برنامه را می توان به صورت موازی بر روی CPU های مختلف اجرا کرد . یک برنامه ای که می تواند تحت Grid اجرا شود و مقدار زیادی Grid نیاز دارد را می توان به عنـوان چندین ریز کار کوچک دید . اگر این ریز کـارها نیازی به مبادله ی اطلاعات با هم نداشته باشند و در واقع به هم وابستگی نداشته باشند ، در بهترین حالت به وسیله ی N پردازنده ( کامپیوتر ) با سرعت N برابر بیشتر از حالتی که به وسیله یک پردازنده پردازش می شود ، اجرا می گردد . به این نوع پردازش ها ، پردازش های قابل رشد گفته می شود .
اما موانعی بر سر راه قابل رشد بودن ، وجود دارد . اولین مشکل مربوط به الگوریتم کار می شود . اگر با توجه به الگوریتم مجبور باشیم که کار را فقط به تعداد محدودی ریز کار بشکنیم ، و در صورتی که بیشتر از آن تعداد CPU داشته باشیم ، نمی توانیم از تمام قدرت استفاده کنیم و این اولین مشکل است .
دومین مشکل مربوط به وقتی می شود که کارها به هم وابسته باشند . این منجر به رقابت می شود و قابلیت رشد را کم می کند . به عنوان مثال اگر تمام ریزکار ها مجبور باشند از یک فایل و یا پایگاه داده بخوانند و در آن بنویسند ، سرعت آن منبع داده عامل محدود کننده می شود .
فاکتـورهای دیگـر نیز باعث تاخیر مـی شوند . و در عمل از سرعت اجـرا می کاهند . برای مثال می توان به پهنای باند شبکه ، سرعت جابجایی پیام ، پروتکل های همزمان سازی ، پهنای باند منابع ذخیره سازی و تاخیرهای دیگر اشاره کرد . عوامل زیادی برای برنامه ای که قرار است بر روی Grid اجرا شود ، در نظر گرفته شود . باید به این نکته توجه کرد که هر برنامه ای را نمی توان موازی سازی کرد و آن را بر روی Grid اجرا کرد .
در حال حاضر هیچ ابزار کاربردی برای تبدیل کردن یک برنامه در حالت کلی به برنامه ی موازی وجود ندارد . ابزارهایی وجود دارد که به برنامه نویسان برای نوشتن برنامه های موازی کمک می کند ولی هنور هیچ ابزاری برای تبدیل برنامه ها وجود ندارد و این تبدیل اتوماتیک دانشی است که بر روی آن مطالعه می شود و اگر پیاده سازی آن ممکن باشد ، نیازمند مهارت برنامه نویسی و ریاضی زیادی است .
2-3- منابع مجازی و سازمان های مجازی
موارد دیگری که به وسیله ی Grid Computing ممکن می شود ، فراهم آوردن محیطی برای همکاری بین شرکت هاست . در گذشته محاسبات توزیع شده تا حدودی به این هدف نزدیک شده است ولی با Grid Computing این قابلیت می تواند گسترده تر نیز شود . چون Grid اسـتانداردهایی را برای اشتـراک گذاشتن منـابع در یک محیط نامتجـانس فـراهم می آورد . با استفاده از Grid یک سیستم محاسباتی بزرگ مجازی ، با منابع گوناگون تولید می شود .
سازمان های گوناگون ، منابع خود را به اشتراک می گذارند و سازمان مجازی می سازند تا با هم همکاری کنند و به هدف خاصی برسند . این سازمان ها هر کدام دارای ویژگی ها و سیاست های خاص خود هستند . این موضوع در شکل 2-1 نشان داده شده است .
به اشتـراک گذاری با داده ها شـروع مـی شود . این داده ها بصورت فایل و یا در پایگاه داده ذخیره اند . یک Data Grid استفاده از داده ها را یصورت موثرتری ممکن می سازد . فایل ها و پایگاه های داده می توانند از ماشین های زیادی استفاده کنند و در نتیجه فضای زیادی را بوجود آورند که از یک ماشین تنها کاراتر است . این پخش کردن داده ها مزیت های دیگری نیز دارد . از آن جمله می توان به افزایش پهنای باند و در برخی موارد نگه داشتن نسخه های پشتیبان اشاره کرد .
ولی به اشتراک گذاشتن فقط محدود به فایل ها نیست ، بلکه شامل دیگر منابع نیز می شود . به عنوان مثـال مـی توان به دستـگاه های خاص ، نرم افزارها ، سرویس ها و غیره اشاره کرد . ایـن منابع
" مجازی سازی " می شوند تا به یک شکل واحد در Grid نامتجانس ارائه شوند .
شکل 2-1- Grid منبع نامتجانس و از نظر جغرافیایی از هم جدا را مجازی سازی می کند .
2-4- دسترسی به منابع اضافه
همانطور که اشاره شد به غیر از CPU و حافظه ، Grid می تواند امکان استفاده از منابع دیگر را نیز فراهم کند . به عنوان مثال اگر کاربردی به پنای باند بیشتری برای استفاده از اینترنت ، برای پیاده سازی یک موتور جستجوی Data Mining داشته باشد ، کار می تواند به ریزکارها تقسیم شود و به ماشینهای دیگری که هر کدام اتصال جدایی به اینترنت دارند ، فرستاده شوند . اگر این ماشین ها از یک ارتباط به اشتراک گذاشته برای اینترنت استفاده کنند ، کارایی سیستم زیاد نخواهد بود .
ممکن است بعضی از ماشین ها دارای نرم افزار های گران قیمتی باشند ، اگر کابران به آنها نیاز داشته باشند ، Grid می تواند به آنها کمک کند تا کار خود را بر روی آن ماشین اجرا کنند .
بعضی از ماشین های Grid ممکن است دستگاه خاصی داشته باشند . خیلی از ما از چاپگرهای به اشتراک گذاشته شده استفاده کرده ایم ؛ به روشی مشابه ، Grid می تواند استفاده از دیگر دستگاه ها را برای کاربران ممکن کند . به عنوان مثال این دستگاه می تواند یک دستگاه DVD Writer سریع و گران قیمت باشد . بعضی از ماشین های روی Grid ممکن است به میکروسکپ های الکترونی مجهز باشند که قابلیت کنترل با کامپیوتر را دارند . در این موارد زمان بندی و مدیریت منابع موجود در Grid اهمیت زیادی پیدا می کند .
این دستگاه ها می توانند پیچیده تر نیز باشند مثل دستگاه عمل جراحی از راه دور . امروزه شاهد چاپگر هایی هستیم که به اشتراک گذاشته شده اند و در آینده شاهد استاندارد سازی روی دستگاه ها و منابع دیگر نیز خواهیم بود . تمام اینها باعث می شود که Grid مثل مجموعه ای از منابع دیده شود
2-5 متعادل سازی استفاده از - منابع
یک Grid منابع توزیع شده را که بر روی ماشین های جداگانه قرار گرفته اند ، متحد می کند تا یک سیستم یکپارچه بوجود آورد . مکانیزمی برای متعادل سازی استفاده از این منابع در Grid وجود دارد .
این مکانیزم زمانبندی است که ریزکارها را بر روی منابع بصورت متعادل توزیع می کند . همان طور که شکل 2-2 نشان می دهد این مکانیزم برای توزیع بار در یک سازمان بزرگ بسیار لازم است . این کار به دو روش انجام می شود .
قسمت پرکار می تواند به ماشین های تقریباً بیکار هدایت شود .
اگر تمام امکانات Grid مشغول باشد ، کارهای با اولویت پایین تر می توانند متوقف شوند تا فضا و امکانات کافی برای کارهای با اولویت بالاتر بوجود آید .
بدون زیر ساخت Grid این کار مشکل می گردد . باید توجه داشت که Grid نمی تواند معجزه کند ولی اگر کار قابل قسمت کردن باشد و تعداد کافی پردازنده وجود داشته باشد ، می توان گفت که Grid قدرت محاسباتی بالایی فراهم می کند .
شکل2-2- کارها به جاهایی که بار کمتری دارند برده می شوند
زمانبندی های پیشرفته نیز می تواند وجود داشته باشد تا به عنوان مثال مقدار ترافیک شبکه کاهش یابد یا پیام ها از راه های کوتاه تری هدایت شوند .
2-6- قابلیت اطمینان
سیستم های محاسباتی پیشرفته از سخت افزار های گران قیمت بهره می برند تا بتوانند قابلیت اطمینان بالاتری ارائه دهند . آنها با استفاده از سخت افزارها و مدارهای منطقی ساخته می شوند که در صورت بروز خطا و از کار افتادن ، قابلیت بازیابی دارند . همچنین ماشین هایی با چند پردازنده وجود دارد که در صورت بروز خطا و از کار افتادن یکی از پردازنده ها ، پردازنده ی دیگری می تواند جایگزین آن شود . برق برخی از سیستم ها از دستگاه های خاصی کنترل می شود و در صورت بروز مشکل ، ژنراتوری برای برق رسانی فعال می شود . تمام اینها یک سیستک مطمئن را بوجود می آورند ، ولی با هزینه ی زیاد .
در آینده شاهد دیدگاه جدیدی در قابلیت سیستم ها خواهیم بود که مبتنی بر سخت افزار و نرم افزار است . Grid شروع این تکنولوژی است . یک سیستم Grid می تواند به نسبت ارزان تر و از نظر جغرافیایی نیز گسترده باشد . بنابراین اگر مشکل از کار افتادن برق یا چیز دیگری در قسمتی ازسیستم پیش آید احتمالاً قسمت های دیگر تحت تاثیر قرار نخواهند گرفت . نرم افزار مدیریت Grid می تواند آن کار را به قسمت دیگری محول کند .
در شرایط بحرانی ، چندین نسخه از یک کار می تواند در ماشین های مختلف اجرا شود ، همانطور که در شکل 2-3 دیده می شود ، و بعد نتیجه می تواند برای بروز خطا یا موارد دیگر کنترل شود .
شکل 2-3 – پیکر بندی Grid در مواقع بحرانی
سخت افـزارهای کنونی از قابلیـت اطمینـان بـالایی برخوردار هستند و ایـن قابلیت اطمینان با Grid می تواند کامل تر شود .
2-7- مدیریت
مجازی سازی منابع در Grid و کنترل یک سیستم ناهمگن بزرگ ، موقعیت بهتری برای مدیریت زیرسـاخت های IT فراهم می آورد . مجـازی سازی منـابع ، مدیریت منـابع را در یک سیستم بزرگ ساده تر می سازد . در گذشته سازمان ها مسئول زیر ساخت های IT خود بودند و آنها را کنترل می کردند ولی با بوجود آمدن سـازمان های مجازی و ترکیب شدن Grid های سازمان های مختلف ، کنترل و مدیریت منابع ساده تر می گردد .
شکل 2-4- مدیران می توانند سیاست های خاصی را تنظیم کنند .
فصل سوم – مفاهیم و معماری
در این فصـل به هدف ، سیر تکامل ، معماری و پیـاده سازی یک سیستم Grid مـی پردازیم . واژه یGrid در اواخر دهه ی 1990 در مورد محاسبات توزیع شده برای مصارف علمی و فنی – مهندسی استفاده شد . از آن زمان به بعد این موضوع پیشرفت های زیادی داشته است . واژه ی Grid با موضوع های زیادی در ارتباط است ، از آن جمله می توان به شبکه های پیشرفته ، محاسبات خوشه ای و هوش مصنوعی اشاره کرد .
مفاهیم Grid در ابتدا برای به اشتراک گذاشتن منابع برای مصارف تحقیقاتی بوجود آمد . امروزه کاربردهای Grid از محاسبات پیشرفته و آنالیز کردن داده ها تا پایگاه های داده ی توزیع شده و همچنین به هم پیوسته ساختن تجهیزات علمی و کامپیوترها برای ذخیره سازی ، گسترده است . اما چیزی که این کاربردها را با هم مرتبط می سازد " نیاز" به اشتراک گذاشتن منابع و حل مشکلات به صورت پویا و در محیطی " نا متجانس" است .
به تازگی مشخص شده است که کاربرده های Grid فقط به مصارف علمی و تحقیقاتی محدود نمی شود ، بلکه در مورد اقتصادی نیز کاربرد دارد . با گسترش وب به عنوان یک تکنولوژی برای ارتباط ، تکنولوژی Grid نیز پیشرفت کرده است . هدف اولیه ی فن آوری اطلاعات این بوده است که مردم را در انجام دادن کارهای روزمره شان به صورت ساده تر ، یاری کند . با توجه به اینکه خیلی از کارهای روزمره با همکاری دیگران انجام می شود ، Grid می تواند نقش موثری در این همکاری ایفا کند .[grama 2003]
موفقیتGrid در دوره ی کنونی مدیون مفاهیم معماری خوب ، استاندارد سازی در نرم افزارهایی که در آن اجرا می شوند ، هماهنگ سازی با نیاز های امروز و گروهی از برنامه نویس های پویا از سراسر دنیاست که به پیشرفت این مفهوم کمک می کند . ترکیب این فاکتورها باعث شده که تجربیات جدیدی در این زمینه بوجود آید و این تجربیات باعث بوجود آمدن تعریف معماری سرویس گرای Grid ، OGSA شده است . تا کنون پروژه های مختلف هم در زمینه های اقتصادی و هم در زمینه ی علمی با استفاده از این معماری پیاده سازی شده است .
3- 1- سازمان های مجازی و Grid
سناریوهای زیر را در نظر بگیرید :
شرکتی می خواهد در مورد مکان یکی از قسمت های خود که قرار است پیش بینی های پیچیده ی اقتصادی را انجام دهد ، تصمیم بگیرد . در این راه از شرکت ASP کمک می گیرد . شرکت مورد نظر اطلاعات تاریخی کافی و همچنین چیزهای مورد نیاز را در اختیار ASP قرار می دهد . در طول جلسه ی تصمیم گیری ، گفتگوهای مختلفی انجام می شود ولی اعضا ی جلسه در شهرهای مختلف قرار دارند .
یک کنسرسیوم فنی می خواهد تحقیقاتی روی نسل جدید هواپیماهای مافوق صوت انجام دهد . برای این کار باید شبیه سازی دقیقی در مورد کل قسمت های هواپیما انجام شود . این برنامه ی شبیه سازی از قسمت های مختلفی که هر کدام را شرکت خاصی در کنسرسیوم نوشته است ، تشکیل شده است . هر قسمت از شبیه سازی بر روی کامپیوتر های شرکتی که آن را نوشته است ، اجرا می شود و به اطلاعات طراحی و داده های دیگر که توسط دیگر اعضاء پدید آمده است ، دسترسی دارد .
یک تیم مدیریت بحران مسئول رسیدگی به پخش شدن مواد شییایی شده است . آنها با استفاده از وضعیت آب و هوای محلی مدل های خاک ، پیشرفت پخش شدن ماده ی شیمیایی را پیش بینی می کنند . آنها اثرات این پخش شدن را با استفاده از بررسی های جمعیتی و همچنین بررسی های جعرافیای مثل رودخانه ها و منابع آب محاسبه می کنند و طرحی کتاه مدت برای کم کردن اثرات مخرب آن طراحی می کنند . این تیم کار خود را با تخلیه ی محل و خبر دادن به بیمارستان ها و نهاد های مربوطه ادامه می دهند .
هزاران فیزیک دان در صدها آزمایشگاه در سراسر دنیا گرد هم آمده اند تا یک حسگر را طراحی کنند ، بسازند و آزمایش و آنالیز کنند . این کار برای موسسه ی اروپایی CERN که در زمینه ی انرژی فعالیت می کند انجام می شود . در فاز آنالیز کردن ، آنها امکانات محاسباتی ، حافظه ها و شبکه های خود را به اشتراک می گذارند تا یک Data Grid بسازند که بتواند اطلاعات در حد پتا بایت را آنالیز کنند .
یک زیست شناس می خواهد بداند که دارویی خاص ، چه تاثیری بر روی اتصالات بین عصب ها می گذارد و نیز می خواهد بداند تاثیر کلی آن بر کارکرد و کارایی مغز به چه صورت است . برای یافتن چوب جواب او باید شبیه سازی های سطح پایینی انجام دهد ، نتایج را به سطوح بالاتر نیز منتقل کند و شبیه سازی را در آنجا ادامه دهد . این شبیه سازی به اطلاعات زیادی نیاز دارد که در پایگاه داده های مختلف ذخیره شده است .
این مثال ها در موارد گوناگونی با هم متفاوت هستند : تعداد و نوع طرف های شرکت کننده ؛ نوع فعالیت ، طول و مقدار عملیات ، منابعی که به اشتراک در آمده اند . ولی چیز مشترکی نیز وجود دارد : در همه ی آنها ، منابع به اشتراک گذاشته می شوند و همچنین این به اشتراک گذاشتن خیلی بیشتر از مبادله ی پرونده و فایل است . در این مثال ها ، دسترسی مستقیم به برنامه ها ، کامپیوترها ، داده ها ، حسگرها و دیگر منابع وجود دارد . به عنوان مثال اعضای کنسرسیوم ، می توانند دسترسی کنترل شده ای به برنامه ها و داده های مشخصی را برای دیگر اعضا فراهم کنند و یا قدرت محاسباتی کامپیوتر های خود را به اشتراک بگذارند .
به صورت خلاصه تر چیزی که به صورت مشترک در این مثال ها دیده می شود " اشتراک منـابع
بصورت هماهنگ و متعادل ، و حل مسائل بصورت پویا در سازمان های مجازی " است . این به " اشتراک گذاشتن " که از آن صحبت می شود تنها به اشتراک گذاشتن فایل نیست ؛ بلکه دسترسی مستقیم به کامپیوترها ، نرم افزارها ، داده ها و دیگر منابع است که در صنعت و علم کاربرد دارد .
این به اشتراک گذاشتن با اجازه و کنترل صاحب منبع انجام می شود . او مشخص می کند که دقیقاً چه چیزی به اشتراک گذاشته می شود و چه کسی می تواند از آن استفاده کند . معنی واژه ی " سازمان مجازی" اینجـا مشخص مـی شود . سـازمان مجـازی به مجموعه ای از سـازمان ها گفته می شود که منابع خود را به اشتراک گذاشته اند تا به هدفی مشخص برسند . همانطور که مثال های بالا مشخصی می سازند ، سازمان های مجازی می توانند در مورد مختلفی بسیار متفاوت باشند ، در هدف حوزه ی کاری ، انـدازه ، مدت زمان ، سـاختار و بسـیاری چیزهای دیـگر ولی با وجود ایـن تفاوتها می توانیم ببینیم که در موارد بسیاری نیز شباهت دارند . بصورت کلی سیستمی برای به اشتراک گذاشتن بصورت خیلی انعطاف پذیر وجود داشته باشد . سیستم های ارتباطی می توانند شکل های گوناگونی داشته باشند ؛ از سیستم های Client-Server تا سیستم های Peer – to – Peer . و همچنین امکاناتی برای کنترل دقیق و پیشرفته بر روی مسائل و سیاست های مروط به اشتراک گذاشتن . برای دیدن منبع بصورت یک "سرویس" . در این صورت قابلیت های منبع می تواند بصورت استاندارد ارائه شود و استفاده از منبع ساده تر می گردد و نیازی نیست که کاربر بداند منبع از نظر فیزیکی در کجا قرار گرفته است یا نوع پیاده سازی منبع به چه صورتی است . این منابع میتوانند بصورت های گوناگونی مورد استفاده قرار گیرند ؛ بصورت چند کاربره یا تک کاربره .
اشتراک منـابع و سـازمان های مجازی چیزهای جدیدی نیستند . همچنین سیستم های توزیع شده ، شبکه ها ، سیستم های عامل و سیستم های امنیت اطلاعات بیش از 30 سال است که در جـریان هستند . ملی چیزی که جدید است ، گستـرش اینتـرنت و فن آوری شبکه است که بـاعث می شود به واقع بتوانیم در مورد به اشتراک گذاشتن منابع صحبت کنیم و بتوانیم سازمان های مجازی را در ابعادی بزرگ پیاده سازی کنیم .
3-1-1- چالش های تکنیکی در به اشتراک گذاشتن
سازمان مجازی که از آن صحبت کردیم می تواند کوچک یا بزرگ ، با طول عمر کم یا زیاد ، تشکیل شده از یک یا چند صنعت ، همگن یا ناهمگن باشد . یک سازمان مجازی خاص ممکن است بصورت سلسله مراتبی از سیستم های کوچک تر ساخته شده باشد . بعلاوه جدا از این تفاوت ها ، برنامه نویسان سازمان های مجازی با چیزهای مشترکی سرو کار دارند . همه قصد دارند که " کیفیت سرویس " بالاتری ارائه دهند . این کیفیت سرویس می تواند با معیارهای مختلفی سنجیده شود . به عنوان مثال این کیفیت می تواند با معیارهای امنیت سیستم ، توانایی تصحیح خطا و تحمل در برابر خطا یا کیفیت مدیریت منابع سنجیده شود .
از مثالی که در شکل 3-1 آمده است برای تشریح پیچیدگی هایی که برای توسعه ی برنامه ها در سازمان های مجازی با آنها روبرو هستیم ، استفاده می کنیم . شکل سه سازمان فیزیکی جدا از هم را نشان می دهد ؛ AirCar ، Goeing ، CycleRus . هر کدام از آنها می توانند در سازمان های مجازی مختلفی وجود داشته باشند و قدرت محاسباتی یا منابع دیگر را به اشتراک بگذارند .
AirCar و Goeingکه در زمینه ی هوا – فضا فعالیت می کنند ، هر دو عضو یک سازمان مجازی بین المللی هستند و نام این سازمان VO-Space است و در زمینه ی ساخت ماشین های فضایی پیشرفته فعالیت می کند . بعلاوه Goeing در یک کنسرسیوم برای به اشتراک گذاشتن Cycle شرکت دارد . نام آن VO-Cycles است و Cycle های استفاده نشده را به اشتـراک میگذارد و این کار برای انجام محاسبات پیشرفته استفاده می شود .
اشتراک منابع معمولاً بصورت شرطی انجام می شود : صاحب منبع تعیین می کند که چه زمانی منبع موجود است و می توان از آن استفاده کرد و چه کاری می توان با آن انجام داد . در شکل ، جملاتی که در گیومه آمده است ، شرایط استفاده از منبع یا سرویس را مشخص می کند . برای مثال
AirCar ممکن است به همکارانش در VO- Space فقط اجازه دهد که از امکانات محاسباتی شرکت فقط برای شبیه سازی های "ساده" استفاده کنند . همچنین مصرف کننده های یک سرویس یا منبع می توانند شرط هایی برای استفاده از آن داشته باشند . به عنوان مثال کاربران VO-Cycles ممکن است فقط منابع محاسباتی را قبول کنند که " امن" باشد . باید مشخص باشد که استفاده کننده از منبع چه کسی است و باید نوع عمل نیز مشخص باشد .
شکل 3-1- یک سازمان مجازی
رابطه ی " به اشتراک گذاشتن " می تواند با گذشت زمان و بصورت پویا تغییر کند . این تغییرات می تواند بر روی درگیر بودن منابع ، طبیعت دسترسی ها و طرفی که دسترسی برایش فراهم شده است ، انجام شود . لازم نیست که دسترسی ها بصورت مشخص برای کاربری خاص گفته شود بلکه می تواند بصورت تلویحی گفته شود . برای نمونه CycleRUS می تواند امکان دسترسی به منبع را فقط برای کاربری که " مشتری " باشد فراهم کند . پس ما به مکانیزمی که برای قرار دادن افراد در گروه های مختلف نیاز داریم . همچنین به عنوام مثال کسی که عضو VO-Cycles است باید بتواند بفهمد که به چه منابعی دسترسی دارد و نیز ممکن است بخواهد بداند که " کیفیت " آن چقدر است
برخی از اوقات این " به اشتراک گذاشتن " به صورت Client-Server نیست ، بلکه ممکن است
به صورت Peer-to-Peer انجام شود . در این شرایط ، فراهم آورندگان منبع می توانند مصرف کننده نیز باشند و این رابطه ی " به اشتراک گذاری " می تواند بین هر زیر مجموعه ای از طرف ها وجود داشته باشد . این روابط می توانند ترکیب شوند تا استفاده از منبع را متعادل کنند . هر کدام از این منابع توسط سازمانی فراهم شده اند ؛ به عنوان مثال در VO-Cycles یک محاسبه بر روی منبع شروع می شود و بعد بر روی منبع در جای دیگر ادامه می یابد .
یک منبع مشخص همگن است در جاهای مختلف و به روش های مختلف استفاده شود . به عنوان مثال یک کـامپیوتر ممکن است فقط برای یک قطعه خاص نرم افـزاری در نظر گرفته شده باشد .
این گونه شرط ها بر روی منابع ، محدودیت هایی را برای استفاده کنندگاه بوجود می آورد که باید در نظر گرفته شود . علاوه بر مواردی که در مورد امنیت و سیاست های دسترسی گفته شد ، موضوع دیگری نیز وجود دارد . استفاده کنندگان از منابع در سازمان مجازی ، معمولاً دنبال کیفیت سرویس خاصی هستند . و با کنار هم قرار گرفتن قسمت های مختلف در سازمان مجازی و رشد آن اهمیت زیادی پیدا می کند .
در گذشته معمولاً محاسبات در مراکز محاسبات خیلی به هم پیوسته صورت می گرفت ولی گسترش اینترنت و تجارت الکترونیک باعث شد زیر ساخت های فن آوری اطلاعات . در زمینه ی اقتصاد ، تجزیه شود . هم بصورت خارجی ( چون با گسترش فن آوری اطلاعات ، شبکه های خارجی ، منابع و سرویس ها را احاطه کردند ) و هم بصورت داخلی ( همانطور که تجهیزات IT بیشتر ناهمگن و بیشتر توزیع شدند ) . نتیجه ی نهایی ، تجزیه ی تجهیزات IT که خیلی به هم پیوسته بودند به تجهیزات توزیع شده تر و نامتجانس تر بود . شرکت ها باید این سرورهای توزیع شده و منابع داده را با هم جمع کنند تا بتوانند مشکلات هدایت کردن ، امنیت در سیستم توزیع شده و پراکنده کردن داده ها در تشـکیلات را حل کنند . در این راسـتا ، شـرکت ها شبـکه ها و منـابع خود را گسترش می دهند تا بتوانند خدمات بهتری ارائه دهند . در نتیجه ، کارهایی که قبلاً باید توسط سیستم های بزرگ و Mainframe انجام می شد ، اکنون برای هدایت شرکت ها ضروری است . در خیلی از موارد این یعنی استفاده ی موثر از تجهیزات و قدرت و به اشتراک گذاشتن منابع و این یعنی Grid !
3-1-2- سیر تکنولوژی Grid
تکنولوژی Grid ، مکانیزم هایی برای به اشتراک گذاشتن و هماهنگ کردن استفاده از منابع مختلف فراهم می آورد . Grid باعث می شود که سازمان هایی که از نظر جغرافیایی و ساختار سازمانی از هم جدا هستند با هم یک سازمان مجـازی بوجود آورند تا بتوانند کیفیت سـرویس خاصی را ارائه دهند .[foster 2006]
این تکنولوژی شامل این موارد است : راهکار های امنیتی که دسترسی مدیریت شده را پشتیبانی می کنند ؛ مدیریت منابع ، پروتکل ها و سرویس ها که ارتباط راه دور امن را پشتیبانی می کنند ؛ سرویس هایی برای مشخص شدن وضعیت منابع ؛ سرویس هایی برای جابجایی داده ها .
تکنولوژی Grid در طی ده ها سال تحقیق و توسعه هم در قسمت های تحقیقاتی و علمی ، و هم
در زمینه های صنعتی پدیدار شده است و اکنوان نیز ادامه می یابد . همان طور که شکل 3-2 نشان می دهد ، چهار فاز را برای این تکامل می توان در نظر گرفت که در ادامه به آنها می پردازیم .
شکل 3-2- سیر تکاملی تکنولوژی Grid
راه حل های سفارشی : در اوایل 1990 ، با پروژه هایی مثل Metacomputing و موارد مشابه ، توسعه ی Grid Computing آغاز شد . بیشتر تاکید بر این بود که کارها انجام شود و بر این که ببینند چه کارهایی می توانند با Grid انجام دهند . برنامه ها مستقیماً بر روی پروتکل های اینترنتی قرار می گرفتند و معمولاً کارهای کمی در مورد امنیت سیستم ها انجام می گرفت و کمتر مهم بود که برنامه ها بر روی هر کامپیوتری با هر سیستم سخت افزاری و نرم افزاری اجرا شود .
Globus Toolkit : از 1997 به بعد نسخه ی دوم Globus Toolkit که نرم افزاری متن – باز بود به عنوان استانداردی برای Grid Computing مورد استفاده قرار می گرفت . GT بر روی قابل استفاده بودن و به محیط خاصی وابسته نبودن ، تمرکز داشت . در این راستا GT2 پروتکلها ، API ها و سرویس هایی که در اکثر پروژه ها مورد استفاده قرار می گیرد را پیاده سازی کرد . با فراهم آوردن سرویس هایی برای شناسایی ، سرویسی برای پیدا کردن سرویس ها و منابع دیگر ، دسترسی به داده های سرویس های مختلف ، GT2 توسعه ی برنامه های مبتنی بر Grid را تسریع بخشید . همچنین با استاندارد سازی پروتکل ها ،GT باعث پیشرفت زیادی در برنامه نویسیGrid شده است .GT از استانداردهای اینترنت استفاده کرده و آنها را توسعه داده تا احتیاج های یک پروژه ی Grid را برطرف نماید . ولی بعضی از سرویس ها هم وجود دارند که توسـط GT بوجود آمده اند . از آن جمله می توان به GridFTP که برای جابجایی داده استفاده می شود اشاره کرد .
غیر از GT ، نرم افزارهای دیگری نیز وجود دارند از آن جمله می توان به Conder که یک برنامه برای محاسبات با بهره ی بالا است اشاره کرد .
Open Grid Service Architecture : در سال 2002 معماری سرویس گرای OGSA استاندارد سازی شد و پیاده سازی هایی از آن انجام شد که از آن جمله می توان به GT3 اشاره کرد که در سال 2003 به وجود آمد . GT3 مفاهیم و تکنولوژی های موجود در GT2 را توسعه داد و آنها را بر اساس معماری OGSA قرار دارد . OGSA قالبی برای قرار دادن سرویس های مختلف بوجود آورد .
سیستم های مدیریت شده و به اشتراک گذاشته شده ی مجازی : تعریف تکنیکی اولیه ی OGSA یک گام مهم به جلو است ولی هنوز کارهای زیادی باید انجام شود تا دید کامل Grid درک شود . با درست کردن برنامه ها بر روی زیر ساخت سرویس گرای OGSA ، سرویس های زیادی دیده می شوند که وابسته به Platform ای که روی آن اجرا می شوند ، نیستند . این سرویس ها می توانند در سیستم های بزرگ هم وجود داشته باشند ، فرم های غنی تری از به اشتراک گذاری را پشتیبانی کنند و کیفیت سرویس بالاتری را فراهم آورند که این کار با مدیریت های مختلف بر روی فعالیت ها صورت می گیرد . اینها باعث پیشرفت های زیادی در زمینه ی Grid می شود .
ما Grid را به عنوان یک سیستم شامل منابع توزیع شده ی هماهنگ که می توان توسط پروتکلهای استاندارد ، باز و عام– منظوره با آن ارتباط برقرار کرد و کیفیت سرویس خاصی را دریافت کرد ، تعریف می کنیم . در پایین المان های کلیدی را توضیح می دهیم :
منابع توزیع شده ی هماهنگ : یک Grid از منابعی هماهنـگ و کاربرانی که در دامنه های مختلـف با کنترل های مختلـف زندگی می کنند تشکیل شده است . به عنوان مثال کاربران کامپیوتر
رومیزی در مقابل کاربران یک مرکز محاسباتی ، قسمت های مدیریت مختلف یک شرکت و یا شرکت های مختلف و همچنین Grid قسمت هایی برای رفع مشکلات امنیت ، سیاست ، پرداخت ، عضویت و غیره دارد . در غیر این صورت ما با یک سیستم مدیریت محلی در ارتباط هستیم .
استفاده از پروتکل ها و Interface های باز ، استاندارد و عام – منظوره : یک Grid از پروتکل ها و Interface های چند منظوره تشکیل شده است وکه می توانند مسائل بنیادی شناسایی و تصدیق کاربر ، پیدا کردن منبع و دسترسی به منابع را حل کنند . همانطور که گفتیم خیلی مهم است که این پروتکل ها و Interface ها استاندارد و باز باشند . در غیر این صورت ما با یک سیستم خاص – منظوره در ارتباط هستیم
کیفیت سرویس : Grid اجازه می دهد که منابع به صورت هماهنگ با هم کار کنند تا بتوانند کیفیت سرویس مختلفی را ارائه می دهند . به عنوان مثال این کیفیت سرویس ها می توانند مربوط به زمان پاسخ ، توان عملیاتی ، موجود بودن سرویس و امنیت آن باشند .
اشتراک گذاشتن منابع" می دهد . بدون این استاندارد ها ، کدهای ما یکبار – استفاده خواهند بود
و امکان برقراری ارتباط این کدها با دنیای خارج مشکل می شود . و نیز توسعه ی برنامه ها بر روی Grid مشکل می شود . در حال حاضر Global Grid Forum ( GGF ) به همراه طرف های دیگر مشغول تکمیل این استانداردها و پروتکل های درونی هستند .
در اینترنت ، غیر معمول نیست که مجوعه ی خاصی از Host ها از شبکه جدا شوند و این جدا شدن به خاطر سیاست هاست ، نه به خاطر پیاده سازی . در حالت کلی ، همه ی کامپیوترهای شبکه از TCP/IP و پروتکل های مربوط استفاده می کنند و با وجود سیاست های محدود کننده ما هنوز از یک اینترنت صحبت می کنیم .
به طور مشابه ، ما از The Grid به عنوان یک ماهیت یاد می کنیم . حتی اگر سازمان ها و نهادهای مختلف با استفاده از پروتکل های Grid ، چندین Grid غیر متصل به هم بسازند . مثل اینترنت ، هاست که آنها را از هم جدا ساخته ، نه مسائل پیاده سازی .
3-2- معماری Grid
گفتیم که برقراری ، مدیریت و شناسایی پویای روابط به اشتراک گذاشته شده در یک سازمان محازی ، تکنولوژی جدید نیاز دارد . در اینجا یک معماری برای Grid ارائه می شود که قسمت های بنیادی سیستم را تعریف می کند ، عملکرد این قسمت ها را مشخص می کند و همچنین مشخص می کند که این قسمت ها چگونه با دیگر قسمت ها ارتباط برقرار می کنند .
هدف ما مشخص کردن تمام قسمت های مورد نیاز نیست ، بلکه می خواهیم قسمت هایی را معرفی کنیم که عموماً در پروژه ها استفاده می شوند . حاصل ، یک معماری باز و قابل توسعه است که می تواند برای برطرف کردن نیازهای یک سازمان مجازی مورد استفاده قرار گیرد . لایه های مختلف این معماری در شکل 3-3 مشخص شده است . در ادامه این لایه ها را بررسی می کنیم . اعضای هر لایه به خاطر ویژگی های مشترکی که دارند ، در آن لایه گرد هم آمده اند و از قابلیتهای لایه پایینی خود بهره می برند . این معماری بر اساس مدل ساعت شنی است که در آن قسمت باریک ساعت شنی ، مجموعه ی کوچکی از پروتکل ها و قسمت های اصلی معماری را در بر می گیرد . بر روی این قسمت باریک و پروتکل های اصلی ، قسمت بالایی ساعت شنی قرار می گیرد که در آن جا قسمت های سطح بالاتر قرار گرفته اند و با استفاده از آن پروتکل های بخش باریک با قسمت های سطح پایین تر که در قسمت پایین ساعت شنی قرار دارد ارتباط برقرار می کنند .با توجه به تعریف ، قسمت هایی که در بخش باریک وجود دارند ، باید کم باشند . در این معماری ، در قسمت باریک ، منبـع ارتباطـی قرار گرفته اند که از آنها برای به اشتراک گذاشتن منـابع استفاده می شود . قسمت های موجود در بخش بالایی ساعت شنی ، از منابع گوناگونی که در بخش پایین ( لایه یFabric ) قرار دارد استفاده می کند و می توانند برای ساخت برنامه های سطح بالاتر استفاده شوند .
شکل 3-3 لایه های معماری Grid
3-2-1- Fabric : رابط هایی برای کنترل های محلی
در لایه Fabric منابعی که می توانند به اشتراک گذاشته شوند ، وجود دارند . این منابع می توانند منابع منطقی نیز باشند . به عنوان مثال یک سیستم توزیع شده ی فایل خوشه ای از کامپیوتر ها با تعدادی کامپیوتر توزیع شده . در اینگونه از موارد ، احتمالاً در پیاده سازی از پروتکل های داخلی استفاده شده است . برای نمونه ممکن است برای دسترسی به فایل در سیستم توزیع شده ی فایل از پروتکل NFS استفاده شده باشد . ولی این موارد برای معماری Grid اهمیتی ندارد .
قسمت های Fabric ، عمل های خاصی برای هر منبع بصورت محلی پیاده سازی می کنند . این عمل ها فقط مخصوص آن منبع خاص هستند و فقط بر روی آن اجرا می شوند و این منبع می تواند فیزیکی یا منطقی باشد . پس یک وابستگی بین توابعی که در لایه ی Fabric پیاده می شوند در یک طرف ، و اعمالی که به اشتراک گذاشته می شوند در طرف دیگر ، وجود دارد . توانایی بیشتر لایه ی Fabric ، باعث پیچیده و قوی تر شدن اعمالی که به اشتراک گذاشته می شود ، می گردد . و در عین حال اگر شرط هایی را بر روی منابعی که در این لایه قرار دارند ، اعمال کنیم ، استفاده از این زیر ساخت ساده تر می شود . به عنوان مثال ، عمل رزرو کردن پیشرفته می تواند مفید باشد . این بدین معنی است که کسی که می خواهد در آینده از منبع استفاده کند ، بتواند علاقه ی خود را در این زمینه اعلام کند . ولی خیلی از منابع این رزرو کردن را پشتیبانی نمی کنند .
تجربه نشان می دهد که منابع باید حداقل دو نوع قابلیت را داشته باشند . اول مکانیزمی برای باخبر شدن از وضعیت داخلی منبع ، حـالت و قابلیتهای کنونی آن ( به عنوان مثال اینکه آیا این منبع
قابلیت رزرو کردن را پشتیبانی می کند یا نه ) و دوم امکاناتی برای مدیریت که با استفاده از آن بتوانیم کیفیت سرویس خاصی را دریافت کنیم .
مثال های زیر موضوع را روشن تر می سازند .
منابع محاسباتی : مکانیزم هایی برای شروع کردن برنامه و نظارت بر اجرای آن نیاز است . مکانیزم هایی که اختصاص منبع به پردازش های مختلف را مدیریت می کند و همچنین امکان رزرو کردن می تواند مفید باشد . روش هایی برای نظارت کردن بر موقعیت داخلی منبع ، وضعیت سخت افزار و نرم افزار ، میزان فعلی بار نیاز است .
منبع ذخیره سازی : مکانیزم های قرار دادن و گرفتن فایل باید وجود داشته باشد و همچنین توانایی جابجایی با کارایی بالا مفید است . ممکن است روش هایی برای نوشتن در بخشی از فایل و خواندن از قسمتی از فایل و انتخاب بخشی از داده ها به کار آید . مکانیزم های مدیریتی برای اختصاص منابع مربوط به انتقال داده ( فضا ، پهنای باند دیسک ، پهنای باند شبکه و CPU ) و همچنین امکان نظارت بر وضعیت داخلی منبع ، وضعیت سخت افزاری و نرم افزاری و مقدار بار ، لازم است که وجود داشته باشد .[ibm 2009]
منابع شبکه : امکانات مدیریتی مربوط به نظارت بر مقدار منبع تخصیص یافته برای انتقال اطلاعات در شبکه می تواند مفید باشد . امکانات نظارتی بر روی وضعیت شبکه و نیز مقدار باید وجود داشته باشد .
انواع دیگری از منابع نیز وجود دارد ؛ به عنوان مثال پایگاه های داده و یا حسگرهای مختلف .
3-2-2- Connectivity : برقراری ارتباط ساده و امن
لایه ی Connectivity ، پروتکل های اصلی برای مبادله داده و همچنین تصدیق فرستنده و گیرنده را فراهم می آورد . این پروتکل ها در شبکه هایی که Grid بر روی آن کار می کند استفاده می شوند . پروتکل های انتقال ، مبادله ی اطلاعات بین منابـع مختلف لایه ی Fabric را فراهم می آورند . پروتکل های تصدیق که بر روی سرویس های انتقال قرار گرفته اند ، مکانیزمی امن مبتنی بر الگوریتم های رمز نگاری برای شناسایی و تصدیق کاربران و منابع را فراهم می آورند .
نیازمندی های انتقال شامل جابجایی اطلاعات ، مسیریابی و نامیدن می شود . در حال حاضر معمولاً از TCP/IP استفاده می شود و بطور دقیق از اینترنت ( ICMP و IP ) ، انتقال ( TCP و UDP ) و کاربرد (OSPF و DNS و RSVP و غیره ) . ولی این به این معنی نیست که Grid فقط به همین پروتکل ها محدود است . به عنوان مثال در آینده ممکن است از شبکه های پیشرفته تر نیز استفاده شود .پیچیدگی مسئله ی امنیت ایجاب می کندکه هر لایه ای که برای انتقال داده به کار برده می شود از استانداردهای موجود استفاده کند . در پایین به موارد مهمی که در مسئله ی امنیت نیاز است اشاره می کنیم .
یکبار وارد شدن ( Single Sign-on) : یک کاربر Grid ممکن است بارها بخواهد از یک منبع محاسباتی استفاده کند . اگر او مجبور باشد برای هر بار استفاده Sign-on کند ، کارایی سیستم پایین می آید . بجای این کار باید امکانی فراهم شود که کاربر فقط یکبار Sign-on کند .
وکالت دادن (Delegation) : کاربر باید بتواند به یک برنامه این قابلیت را بدهد ( وکالت دارد ) که از طرف او اجرا شود . با این کار برنامه می تواند به منابعی که کاربر می تواند از آنها استفاده کند ، دسترسی داشته باشد . همچنین برنامه می تواند در صورت لزوم بخشی از اختیارات خود را به برنامه ی دیگری بدهد .
مجتمع سازی باراهکارهای امنیت محلی : در یک Grid نامتجانس ، هر منبع ممکن است دارای راهکارهای امنیتی مختص خود باشد . راهکار امنیتی Grid باید بتواند با آن کار کند . تا نیازی به پیاده سازی چیز جدیدی نباشد .
رابطه ی اعتماد بر کاربر : برای کاربری که می خواهد از منابعی استفاده کند که توسط ارائه دهنده های جدا از هم ارائـه شده اند ، سیسـتم امنیتی باید طـوری باشد که برای هر منبـع و هر ارائه
دهنده ی منبع بصورت جداگانه از کاربر برای دسترسی اجازه نخواهد . مثلاً فرض کنید که کاربری اجازه ی دسترسی به سایت A و B را دارد . حال اگر او بخواهد به سایت A و B بصورت همزمان دسترسی پیدا کند ، سیستم نباید برای هر کدام بصورت جداگانه دسترسی های امنیتی را کنترل کند . همچنین این راهکارها باید قابل انعطاف باشد .
3-2-3- Resource : به اشتراک گذاشتن یک منبع
بعد از اینکه کاربران Grid هویت خود را اثبات کردند ، آنها می خواهند با منابع و سرویس ها ارتباط برقرار کنند . این وظیفه ی لایه ی Resource است که بر روی لایه ی اتصال و پروتکل های تصدیق هویت قرار گرفته است . این لایه وظیفه ی برقراری اتصال امن با منبع ، راه اندازی ، نظارت و کنترل بر منبع را بر عهده دارد . این لایه از طریق Connectivity با منابع ارتباط برقرار می کند . چیزهایی که در این لایه وجود دارد ، بصورت جداگانه مربوط به هر منبع است و این لایه به وضعیت کلی تمام منابع با زیر مجموعه ای از آنها نمی پردازد . این وظیفه ی لایه ی Collective است که در قسمت بعد به آن می پردازیم .
پروتکل های اطلاعات : این پروتکل ها برای گرفتن اطلاعات در مورد ساختار و حالت کنونی منبع استفاده می شود . به عنوان مثال مقدار بار کنونی و سیاست های استفاده .
پروتکل های مدیریتی : این پروتکل ها برای دسترسی به منبع ها استفاده می شود . برای مثال ، نیازمندی های منابع ( شامل رزرو کردن پیشرفته و کیفیت سرویس ) و عمل هایی که منبع باید انجام دهد . همچنین ممکن است پروتکل هایی برای نظارت بر روی حالت عملی که در حال انجام است و کنترل آن عمل ( برای مثال نابود کردن عمل ) وجود داشته باشد .
هر چند خیلی از این پروتکلها را می توان تصور کرد ولی چون این لایه و لایه ی Connectivity
در قسمت باریک مدل ساعت شنی قرار گرفته اند ، باید این توابع و پروتکل ها فقط به پروتکل های اصلی محدود شوند . این پروتکل ها فقط باید پروتکل های بنیادی باشند و تعداد آنها نیز باید کم باشد . برای نمونه ، پروتکل های زیادی را می توان برای مدیریت محلی منابع متصور شد ، اما فقط پروتکل های اصلی در این لایه قرار دارند و پروتکل های دیگر درلایه های بالاتر قرار می گیرند .
لیست عملکرد هایی که برای لایه ی Fabric اشاره شد ، مشخص می کند که در لایه ی منبع چه چیزهایی باید وجود داشته باشد . در این لایه هر عملی که در لایه ی Fabric اشاره شد ، فقط به یک شکل وجود دارد و مکانیزم های گزارش خطا برای وقتی که عمل نتواند با موفقیت به پایان برسد وجود دارد .
3-2-4- Collective : هماهنگی چندین منبع
لایه ی Collective ، شامل پروتکل هایی است که مربوط به یک منبع مشخص نمی شود ، بلکه مربوط به مجموعه ای از منابع است . با توجه به اینکه لایه ی Collective بر روی قسمت باریک ساعت شنی قرار گرفته است ، می توان اعمال زیادی را در این لایه پیاده سازی کرد و این در حالی است که نیازی به پشتیبانی های جدید در لایه ی پایینی وجود ندارد .
سرویس راهنما ( Directory Service ): به اعضای سازمان مجازی اجازه می دهد که منبع های سازمان مجازی را پیدا کنند و همچنین ویژگی های آنها را ببینند . یک سرویس راهنما می تواند این امکان را برای کاربرانش فراهم کند که آنها بتوانند با استفاده از نام یا با استفاده از ویژگی ، منبع مورد نظر خود را پیدا کنند .
سرویس های زمانبندی و اختصاص دادن منابع (Coallocation , Scheduling and Brokering service ) : به اعضای سازمان مجازی امکان می دهد که یک منبع را برای هدفی خاص دریافت کنند و کارها را بر روی آن منبع زمانبندی کنند .
سرویس نظارت و تشخیص خطا : این سرویس بر خطاهای صورت گرفته در منابع سازمان مجازی نظارت می کند .
سرویس های داده ( Data replication service ) : این سرویس ها ، مدیریت منابع ذخیره سازی ( و شاید منابع شبکه و محاسباتی ) را در سازمان مجازی بر عهده دارد و وظیفه ی آن ماکزیمم کردن کارایی دسترسی به داده هاست و منظور از " کارایی" در اینجا معیارهایی مانند زمان پاسخ گویی ، قابلیت اطمینان و هزینه است .
مدل ها و ابزارهای برنامه نویسی معمولاً از توابع لایه یCollective استفاده می کنند و یا در صورت لزوم توابع مورد نیاز خود را تعریف می کنند . همچنین سرویس های لایه Collective باید به مسائل امنیت و سیاست ها نیز بپردازند .
این مثال ها ، سرویس ها و توابع گوناگونی را نشان می دهد که در عمل در این لایه استفاده می شوند . توجه به این نکته لازم است که هر چند سرویس هایی که در لایه ی Resource وجود دارد بسیار عمومی هستند وی سرویس ها و توابعی که در لایه یCollective قرار دارند بسیار خاص – منظوره هستند و همه چیز به کاربرد مربوط می شود و حتماً از یک سازمان مجازی به سازمان دیگر متفاوت خواهد بود .
توابعی که در لایه ی Collective وجود دارند هم می توانند بصورت توابعی که به تنهایی قابل اجرا هستند باشند و یا اینکه در کتابخانه هایی باشند که با برنامه لینک می شوند . در هر دو صورت پیاده سازی آنها می توانند بر روی لایه ی Resource باشد و یا بر روی یک لایه ی Collective دیگر ، و می توانند از پروتکل ها و API های لایه ی پایینی بهره ببرند . به عنوان مثال می توانیم یک تابع رزرو کردن پیاده کنیم که با استفاده از تابع رزرو کردنی که در لایه Resource وجود دارد کار کند و می توانیم قابلیت های بیشتری به آن بدهیم . این قابلیت ها مـی توانند قابلیت کنتـرل خطا ، تصدیق هویت و گزارش گیری باشد . حال برنامه ی کاربردی که در لایه ی Application وجود دارد می تواند از این تابع استفاده کند و قابلیت های بیشتری را ببیند .
قسمت هایی که در لایه ی Collecive وجود دارند خیلی خاص – منظوره هستند و به کاربرد خاص مربوط می شوند و با توجه به نیازهای سازمان مجازی تولید می شوند . اما بعضی از این توابع عمومی هستند و عموماً در همه ی کاربردها دیده می شوند . خیلی مهم است که این توابع بصورت استاندارد پیاده سازی شوند .[ogf 2009]
3-2-5- Applicartion
لایه ی آخری که وجود دارد لایه ی Applicartion است . این همان لایه ای است که کاربر با آن در تماس است و برنامه ی کاربردی که در سازمان مجازی کار می کند در آن لایه قرار دارد .
برنامه ها می توانند هر سرویس که در هر لایه قرار گرفته است را استفاده کنند . در هر لایه پروتکل ها و API های خاص و استانداردی قرار گرفته است . لازم به ذکر است که Applicartion می تواند خیلی بزرگ باشد و همچنین می توان Framework ای در این لایه پیاده سازی کرد که برنامه های اصلی روی آن اجرا شوند .
3-3- پیاده سازی معماری Grid
همانطور که در ابتدای این فصل اشاره شد ، Grid دارای پیاده سازی های منطقی است . بعد از استاندارد سازی و بوجود آمدن GT2 و بعد از آن با ارائه ی مدل OGSA ، GT3 مبتنی بر این مدل به وجود آمد و پیاده سازی های دیگری نیز به وجود آمدند .
در این قسمت به اختصار ویژگی های GT2 را مرور می کنیم و می گوییم که چگونه این قابلیتها
در معماری Grid قرار می گیرند . بعد از آن OGSA را معرفی می کنیم ؛ در ادامه Grid Service را معرفی می کنیم و در فصل بعد جزئیات کلی از OGSA ارائه می دهیم .
موفقیت GT2 نه فقط به خاطر ساده کردن پیاده سازی برنامه ها برای Grid یا معرفی ابزارهای مختلف بود ، بلکه به این خاطر بود که در GT2 خیلی از چیزها استاندارد شدند که این پروتکل های یکسان در به هم پیوستن Grid های مختلف بسیار می تواند مفید باشد .
3-3-1- Globus Toolkit v2.0
GT2 یک برنامه ی متن باز با یک معماری باز است که کتابخانه های آن کار ساخت برنامه های مختلف تحت Grid را ساده می کند . GT2 به مسائل امنیت ، یافتن اطلاعات ، مدیریت منابع ، مدیریت داده ، انتقال داده ، پیدا کردن خطا و غیره پرداخته است . GT2 زیر ساختی برای هزاران پروژه ی Grid در سراسر دنیا بوده است .
3-3-1-1- Fabric
GT2 در ابتدا سعی داشت که پروتکل های Grid را پیاده سازی کند نه Behavior های در سطح Fabric . فرض بر این بود که برنامه هایی در سطح Fabric برای این کار وجود دارد . به عنوان مثال زمانبند محلی CPU ، مدیریت فایل و نظارت بر سیستم . در عین حال Toolkit شامل قسمت هایی برای ارتباط برقرار کردن با منابع بود . به عنوان مثال این نرم افزار دارای قابلیتی برای پیدا کردن ساختار و وضعیت داخلی خیلی از منابع بود . برای نمونه کامپیوترها ( نسخه ی سیستم عامل ، پیکر بندی سخت افزار ، بار ) سیستم های ذخیره سازی ( مقدار حافظه ی موجود ) و شبکه ها ( بار فعلی و بار پیش بینی شده در آینده ) و همچنین مکانیزم هایی برای رساندن این اطلاعات به لایه های بالاتر وجود داشت .
عموماً مدیریت منابع به صورت محلی فرض می شود . اما با این وجود امکاناتی برای رزرو کردن وجود دارد این امکان GAR ( یعنیGeneral - purpose architecture for reservation and allocation ) نامیده می شود .
3-3-1-2- Cennectivity
لایه ی Cennectivity از رمزنگاری کلید عمومی استفاده می کند . GT2 شامل GSI به معنی Grid security infrustructure ) ( است که کار تصدیق کاربر ، امنیت اطلاعات در جابجایی و ... را انجام می دهد . در این لایه از پروتکل های استاندارد اینترنت استفاده شده است .
یکبار Sign - on : به کاربر اجازه می دهد که فقط با یکبار Sign - on بتواند به منبع مورد نیاز خود دسترسی داشته باشد . بعد از Sign - on ، یک Proxy credential ساخته می شود و برنامه می تواند با استفاده از آن به جای کاربر وارد شود . یک Proxy credential یک مدرک است که بصورت دیجیتالی امضاء شده است و به دارنده ی آن اجازه می دهد که به جای امضاء کننده عمل کند و معمولاً برای امنیت بیشتر ، برای مدت زمان محدودی معتبر است و این کار بسیار حیاتی است و به کاربر اجازه می دهد که تنها یکبارSign-on کند و بعد از آن برای مدت محدودی می تواند با همان Sign-on و با توجه به Proxy credential ساخته شده از منابع مجاز استفاده کند . با توجه به اینکه معمولاً در یک کاربرد از تعداد زیادی منبع استفاده می شود ، این کار بسیار مفید است وکالت دادن : با ابن کار کاربر می تواند به یک برنامه که به فرض در کامپیوتر دیگری است و در فاصله ی دوری قرار گرفته است ، وکالت دهد که به جای او کار انجام دهد و معمولاً این وکالت با محدودیتهایی همراه است .
GSI برای اینکه به محیط خاصی محدود نشود و در سخت افزارهایی مختلف و با امکانات نرم افزاری مختلف اجرا شود ، فرمت خاصی برای این وکالت ها و Proxy credential ها استفاده می کند . فرمت credential از X.509 Certificate استفاده می کند و در حال حاضر این فرمت بیشترین کاربرد را در اینترنت دارد . وکالت دادن راه دور از پروتکل TLS ( که مخفف Transport Layor Security است ) استفاده می کند . همچنین در GSI ، API های سطحی وجود دارد که با استفاده از آن می توان کارهای مربوط به تصدیق در الگوریتم کلید عمومی را انجام داد .
3-3-1-3- Resource
در این قسمت به الگوریتم های لایه ی resource در GT2 می پردازیم .
پروتکل GRAM ( Grid Resource Allocation and Management ) یک راهکار امن و مطمئن برای ساخت و مدیریت محاسبات راه دور فراهم می کند . پیاده سازی پروتکل GRAM از یک gate-keeper کوچک و مطمئن برای شروع یک محاسبه ی راه دور استفاده می کند و job-manager برای مدیریت آن محاسبه و از GRAM-reporter برای نظارت و دریافت حالت آن استفاده می کند .
MDS-2 ( Monitoring and Discovery Service ) یک قالب یکسان برای پیدا کردن و دسترسی به پیکر بندی و اطلاعات حالت مثل پیکربندی سرور محاسباتی ، وضعیت شبکه و قابلیت ها و سیاست های روی سرویس ها فراهم می کند .
سومین قسمت از GT2 که در اینجا معرفی می شود GridFTP است که نسخه ی توسعه نیافته ی پروتکل انتقال فایل (FTP) است و به عنوان یک پروتکل مدیریتی برای دسترسی به داده ها استفاده می شود . GridFTP از پروتکل های امن لایه ی Connectivity استفده می کند ، قابلیت دسترسی به بخشی از فایل را فراهم می کند و نیز قابلیت مدیریت استفاده ی موازی برای انتقال با سرعت بالا را فراهم می آورد .
شکل 4-4 پروتکل های معرفی شده را در عمل نمایش می دهد . در این شکل مشاهده می شود که در ابتدا کاربر شناسایی می شود و یک Proxy credential برای آن ساخته می شود و با این کار به پردازش 1 اجازه می دهد که بجای کاربر کار انجام دهد . بعد آن پردازش از GRAM استفاده می کند و پردازشی را در مکانی دیگر می سازد . این کار با استفاده از Gate-keeper که در GRAM وجود دارد انجام می شود و پردازش 2 به همراه یک Proxy credential جدید ساخته می شود . این پردازش برای دسترسی به منابع و سرویس ها از این Proxy استفاده می کند . ویژگی های پردازش جدید با استفاده از MDS-2 ذخیره می گردد .
شکل 3-4 – مثالی از مکانیزم Globus Tooklit
3-3-1-4- Collective
لایه ی Collective در GT2 شامل تعداد محدودی از قابلست هاست و بقیه باید توسط برنامه نویس نوشته شود . یکی از قابلیت هایی که در لایه Collective وجود دارد کتابخانه DUROC است که برای در اختیار گرفتن منابع می تواند استفاده شود .
3-3-2- Open Grid Seivices Architecture
در سال 2001 و با رشد استفاده از تکنولوژی Grid ، نیاز به استاندارد سازی Globus Toolkit
احساس شد . بعد از بوجود آمدن OGSA ، پروتکل های Globus Toolkit بر مبنای این استاندارد به روز شد . در ادامه به مختصری از تغییرات انجام شده اشاره می کنیم .
بازسازی قسمت های مختلف : پروتکل هایGT2 مثل GRAM کارهای زیادی انجام می دادند و قسمت هایی که درGRAM وجود داشتند و کارهای بزرگ تر بر اساس آنها انجام می شد برای سرویس هاس دیگر مثل GridFTP غیر قابل دیدن بودند . یکی از اهداف OGSA این بود که توابع مهم Grid مشخص شوند و توابع سطح بالاتر بر اساس آنها نوشته شوند تا دیگر قسمت ها هم بتوانند از توابع مهم استفاده کنند .
سرویس گرایی : یک سرویس موجودی است که می تواند در شبکه آدرس دهی شود و Interface خوش تعریفی دارد و برخی توانایی ها را ارائه می دهد . چون در GT2 ، Interface های سرویس ها برای نوع خاصی از منابع مطرح بودند ( مثلاً GRAM برای منابع محاسباتی ) ، GT2 عملاً سرویس گرا نبود . یکی از اهداف OGSA این بود که واقعاً معماری سرویس گرا داشته باشد و Interface های سرویس ها در یک غالب باشند و به عنوان مثال سرویس هایی که در لایه ی Fabric وجود دارند از همان استاندارد برای Interface استفاده کنند که سرویس ها در لایه ی Collective استفاده می کنند .
هماهنگی با وب سرویس ها : GT2 بر روی یک سری پروتکل سطح پایین قرار گرفته بود و هیچ چیری برای Interface های استاندارد نداشت . با گسترش وب سرویس ها ، OGSA با توجه به استاندارد وب سرویس ها ساخته شد . ( زبان توصیف وب سرویس ها ،WSDL ) .
با تغییراتی که بر روی پروتکل ها در GT2 بوجود آمد ، GT3 ساخته شد و هم اکنون در بسیاری از پروژه ها مورد استفاده قرار گرفته است .
فصل چهارم – مدلی برای برنامه نویسی
در این فصل مدلی برای برنامه نویسی برنامه های محاسباتی تحت Grid مطرح می شود . این مدل ، مدلی بسـیار عام است و هدف از آن طـراحی یک مدل کلی بـرای برنامه های محاسباتی تحت Grid است .
در این فصل ابتدا محیطی که برنامه ی ما روی آن باید ایجاد شود را توضیح می دهیم و شرایط آن را بررسی می کنیم . در واقع این محیط همان Grid است ! بعد از آن واژه هایی که در این فصل با آن کار می کنیم را شرح می دهیم و قسمت های اصلی محیط را توضیح می دهیم . در ادامه مدل برنامه نویسی را به صـورت فلوچارت و شبه کد شرح می دهیم و ارتباط قسمت های مختلف با هم را بیان می کنیم . برای اینکه این مدل به دنیای عمل نزدیک شود ، در بخش بعدی قدری به جزئیات برنامه نویسی آن می پردازیم .
تا اینجا همه چیز را در حالت کلی بررسی کردیم . با توجه به اینکه این مدل می تواند برای مسائل گونـاگون استفاده شود ، بـرای روشن تر شدن کارکرد این مدل در عمـل ، در بخش بعد توابـع Back Track را با استفاده از این مدل در محیط Grid بررسی می کنیم .
4-1- تعریف محیط و هدف
هدف از Grid Computing ، استفاده ی موثر از منابع محاسباتی و ذخیره سازی است . برای برنامه نویسی Grid ابتدا باید محیط و شرایط آن را بدانیم . در ادامه این شرط ها را عنوان می کنیم .
محیط ، محیطی پویا است . بدیت معنی که اگر در حال حاضر منبعی وجود دارد ، ممکن است در چند لحظه ی بعد وجود نداشته باشد و ممکن است مدتی بعد ، دوباره به محیط برگردد . این اتفاق زمـانی رخ می دهد که یک ماشین ( منبع محاسباتی ) در یک سازمان از کار بیفتد یا صاحب آن ( صاحب منبع ) ، آنرا خاموش کند و مثلاً مدتی بعد دوباره آن را روشن کند و یا بعد از رفع مشکل دوباره به سیستم باز گردد .
ممکن است محیط ناهمکن باشد . ( و شاید همگن باشد ) این به این معنی است که منابع محاسباتی ، ذخیره سازی و یا هر منبع دیگر ؛ می توانند یکسان نباشند و به بیان دیگر کامپیوترهای موجود در سازمان های مجازی می توانند با سخت افزارها و نرم افزارهای متفاوت برپا شده باشند . در اینجا اهمیت مجازی سازی روشن می شود . مجازی سازی باعث می شود که ، به عنوان مثال ، تمام منابع محاسباتی را به یک شکل واحد ببینیم و همه ی آنها تنها از یک Interface استاندارد استفاده کنند . مجازی سازی باعث می شود که با اینکه منابع محاسباتی با معماری های گوناگون پیاده سازی شده اند ، اما برای استفاده ، تنها یک رابط استاندارد دارند و لزومی ندارد که کاربر حتی پیاده سازی داخلی و معماری آن را بداند . تنها کافی است که استاندارد Interface و کیفیت سرویس آن منبع را بداند . در مورد منابع محاسباتی این "کیفیت سرویس" می تواند عواملی مانند سرعت پردازش ، قابلیت اطمینان و موارد دیگر در بر داشته باشد .
منابع با سیاست های مختلف در دسترس ما هستند . بری روشن شدن این مفهوم ، با یک مثال ساده شروع می کنیم : فرض کنید صاحب یک منبع محاسباتی در یک سازمان مجازی ، قدرت محاسباتی ماشین خود را به اشتراک گذاشته باشد . او به عنوان صاحب منبع می تواند سیاست های دسترسی بر روی منبع خود اعمال کند . مثلاً می تواند تعیین کند که کاربرتن فقط ازمقدار بیکار این منبع می توانند بهره ببرند . این سیاست ها می توانند موارد گوناگونی را در بر بگیرند ، مثلاً برای منابع محاسباتی : نوع برنامه ای که حق اجرا بر روی منبع را دارد . و یا برای منابع ذخیره سازی : چه کسی می تواند از اطلاعات استفاده کند ، چه کسی می تواند آنها را تغییر دهد . این سیاست ها می توانند بسیار گسترده باشند .
به بیان ساده تر و غیر رسمی ، تعدادی کامپیوتر متصل به هم ، با منابع مختلف و گوناگون ،
که صاحبان منابع خود را به اشتراک بگذارند به همراه سه شرط بالا یک Grid را تشکیل می دهند .
هدف ما استفاده ی موثر از منبع درGrid برای انجام دادن یک "کار" است . درادامه المان های مختلف این محیط را معرفی می کنیم .
4-2- المان ها
در این بخش المان ها ، واژه ها و مفاهیمی که در ادامه با آنها سروکار داریم را معرفی می کنیم . در این بخش تقریباً ایده ی کار مدل برنامه نویسی که در ادامه آن را کامل می کنیم ، مشخص می شود . این المان ها به صورت شماتیک در شکل 5-1 نیز آمده اند .
4-2-1- کار
تمام هدف ما این است که یک "کار" انجام دهیم و می خواهیم این کار را طوری انجام می دهیم که از منابع محاسباتی بهترین استفاده شود . این کار معمولاً یک کار محاسباتی است . ابن کار می تواند محاسبه ی عدد پی یا عدد نپر تا چندین رقم اعشار و با دقت بالا باشد ، محاسبه ی ان – وزیر ، محاسبه ی معکوس یک ماتریس ، آموزش یک شبکه ی عصبی ، انجام یک پردازش بزرگ در زمینه ی بینایی ماشین ، یافتن طولانی ترین دور در یک گراف و یا انجام شبیه سازی پیچیده باشد .
در بهترین حالت با داشتن N منبع محاسباتی می توانیم این کار را N برابر سریع تر انجام دهیم . ولی هیچ وقت نمی توانیم به این مقدار برسیم . نوع شبکه ، پهنای باند شبکه ، پهنای باند و سرعت منابع ذخیره سازی و تاخیرها باعث می شود که به این سرعت ایده آل نرسیم .
سوالی که اینجا مطرح می شود این است که آیا هر کاری را می توان با سرعتی تقریباً نزدیک به سرعت ذکر شده انجام داد ؟ پاسخ این سوال " خیر" است . غیر از پارامترهای محدود کننده ی ذکر شده ، نوع مسئله نیز جزء عوامل محدود کننده است . این به پارمتر " رشد پذیری " مربوط می شود . همان طوری که در فصل دوم ذکر شد ، هر چه قابلیت رشد پذیری بیشتر باشد ، کار بهتر " قسمت " می شود . این عامل را در بخش بعد بررسی می کنیم .
4-2-2- قسمت کردن
کلید موازی سازی و اجرای برنامه ها در محیط Grid ، در توانایی " قسمت کردن " الگوریتم کار است . قسمت کردن هم به توانایی ما به عنوان برنامه نویس در قسمت کردن آن به کار بر می گردد و هم به پتانسیل آن کار برای " قسمت شدن " ! بعضی از کارها اصولاً قابل قسمت شدن نیستند . مسائل زیادی در این دسته وجود دارند .
مهارت برنامه نویس ( تحلیل گر الگوریتم ) نیز اهمیت زیادی دارد . ممکن است روش های زیادی برای قسمت کردن یک الگوریتم ( کار ) وجود داشته باشند . استفاده از بهترین روش برای آن کاربرد به زیرکی و هوشمندی برنامه نویس بستگی دارد . ضمن اینکه همیشه " یک " روش قسمت کردن بهترین نیست . " بهترین " بودن یعنی استفاده ی بهتر از منابع ، سریع تر اجرا شدت ، قابلیت تحمل خطا و بسیاری عوامل دیگر . پس این " بهتریم " بودن ، در کاربرد مشخص می شود و به پارامترهایی نظیر توپولوژی شبکه ، محل فیزیکی قرار گرفتن داده ها ، کیفیت سرویس منابع محاسباتی ، پهنای باند شبکه ، قابلیت تحمل خطای منابع و بسیاری عوامل دیگر بستگی دارد .
در بهترین حالت کار به قسمت هایی کاملاً مستقل از هم تقسیم می شوند . یعنی هیچ وابستگی داده ای بین آنها وجود ندارد و می توانند بصورت مستقل اجرا شوند . ولی همیشه نمی توان کارها را اینگونه تقسیم کرد . این قسمت ها را " ریزکار " می نامیم . عمل تقسیم کردن باید بگونه ای باشد که با توجه به سربار فرستادن ریز کار برای منبع محاسباتی و تاخیرهای ناشی از انتقال ها در شبکه و عوامل دیگر ، این فرستادن " به صرفه " باشد . اندازه ی این ریز کار در کارایی کلی سیستم تاثیر زیادی دارد . منظور از " بزرگ " بودن یا " کوچک " بودن یک ریزکار ، مقدار زمان لازم برای اجرای آن است . در پایین اثر بزرگ یا کوچک ریزکار را بررسی می کنیم .
با بزرگ تر شدن ریزکار ، تعداد ریزکارها کم می شود و اگر تعداد منابع محاسباتی بیشتری داشته باشیم ، نمی توانیم از آنها به طور موثر استفاده کنیم و بعلاوه اگر یکی از منابع محاسباتی به هر دلیل از شبکه خارج شود ، باید ریزکاری که به آن محول کرده بودیم را به منبع دیگری بدهیم و با توجه به بزرگ بودن اندازه ی ریزکار ، باید هزینه بیشتری را تحمل کنیم .
اگر اندازه ی ریزکار کوچک باشد ، تاخیرهای ناشی از شبکه و ورودی- خروجی مشکل ساز می شود و کارایی سیستم را کاهش می دهد .
بنابراین اندازه ی مفید ریزکارها به عوامای مثل سرعت شبکه ، سرعت پردازنده ها و قابلیت اطمینان اجزاء سیستم بستگی دارد .
اگر سرعت منابع محاسباتی تقریباً یکی باشد ، بهتر است که کار متعادل تقسیم شود و ریزکارها یک اندازه باشند . ولی ممکن است به خاطر نامتعادل بودن منابع ، توپولوژی شبکه ، الگوریتم و نوع کار و عوامل دیگر مجبور باشیم ریزکارها را بصورت نامتعادل تولید کنیم .
شکل 4-1- المان های سیستم
4-2-3- ریز کار
حاصل عمل " تقسیم کردن " بر روی " کار" ، " ریزکار" ها هستند . ممکن است تکمیل شدن یک ریزکار ، نیازمند تکمیل شدن یک یا چند ریزکار دیگر باشد به این ریزکارها ، ریزکارهای " وابسته " می گوییم .
در حالت کلی می توان ریزکارها را در قالب یک فایل اجرایی ذخیره کرد و به همراه ورودی به منبع محاسباتی داد و منبع نتیجه را برگرداند ولی با وجود کلی بودن این روش ، احتمالاً انتقال این
فایل اجرایی زمان بر باشد و کارایی را کاهش دهد .
روش دیگر طراحی یک قالب برای توصیف کردن ریزکار است . این قالب را می توان مانند پارامترهای ورودی تابع ریزکار در نظر گرفت . برای اجرا شدن ریزکار در کامپیوتر راه دور ( بر روی منبع محاسباتی ) ، تابع به منبع داده می شود و بعد برای اجرا شدن ریزکارها فقط کافی است که پارامترها را به آن بدهیم . با توجه به اینکه معمولاً ریزکارها تکراری هستند ، این کار می تواند افزایش کارایی را به همراه داشته باشد .
4-2-4- منبع محاسباتی
منبع محاسباتی ، پردازنده ای است که ریزکار را اجرا می کند . این منبع را می توان مانند یک کامپیوتر بر روی شبکه تصور کرد که قابلیت اجرای ریزکار را دارد .
این منبع ، توصیف ریزکار را می گیرد و با توجه به تابعی که از ریزکار می داند آن را محاسبه می کند . ممکن است در طول این اجرا به داده های دیگری نیز نیاز داشته باشد که در طول اجرا از منابع ذخیره سازی می گیرد و در نهایت نتایج محاسبه را بر می گرداند .
4-2-5- زمانبند
یکی از قسمت های بسیار مهم در یک سیستم Grid ، زمانبند است ، وظیفه ی زمانبند ، مدیریت منابع و درست تقسیم کردن ریزکارها در بین منابع محاسباتی است . همچنین کنترل خطا نیز از جمله ی وظایف این قسمت است .
زمانبندی بهتر باعث بالاتر رفتن کیفیت سرویس می شود . برای زمانبندی از روش های مختلفی می توان استفاده کرد ولی برای تقسیم کار بین منابع باید سرعت آنها ، سربار شبکه و خیلی پارامترهای دیگر را در نظر گرفت .
4-2-6- ذخیره کننده
وظیفه ی ذخیره کننده ، ساختن جایی برای ذخیره کردن داده ها و بازیابی آنها است . با توجه به کاربرد ، این منبع می تواند به صورت های گوناگونی پیاده سازی گردد . این منبع می تواند قابلیت گرفتن نسخه ی پشتیبان را نیز داشته باشد تا در صورت بروز خطا می توان اطلاعات را بازیابی کرد .
ممکن است این منبع به کمک یک ماشین پیاه سازی شود و یا ممکن است اطلاعات بر روی چند ماشین قرار گیرند . با این کار و با هوشمندانه ذخیره کردن داده ها می توان به پهنای باند بیشتری دست پیدا کرد .
باید توجه داشت که حتی اگر این منبع به وسیله ی چندین کامپیوتر هم پیاده سازی شود ، کاربر نباید درگیر این جزئیات شود . کاربر باید بتواند اطلاعات را به راحتی ذخیره و بازیابی کند .
ممکن است برای کاربردی خاص ، بیش از یک منبع ذخیره سازی مورد نیاز باشد و هر کدام از این منابع می توانند پیاده سازی های خاص خود را داشته باشند .
4-3- مدل برنامه نویسی ، به صورت شبه کد
در این بخش مدل برنامه نویسی که در اول فصل از آن صحبت کردیم را بیان می کنیم . واژه ها و مفاهیم اولیه این مدل در بخش قبل بررسی شد ، در این فصل این مفاهیم را در عمل به کار می بریم برای اینکه این مدل را محدود نکنیم ، ابتدا مدل کلی آن را ارائه می دهیم و بعد در مورد جزئیات برنامه نویسی آن بیشتر صحبت می کنیم .
دوباره محیط را به خاطر بیاورید " تعداد ماشین نامتجانس دارای منابع و به هم متصل " .
مجموعه ای را تعریف می کنیم که شامل تمام منابع محاسباتی موجود است . این منابع توانایی پردازش ریزکارها را دارند . این مجموعه را R می نامیم . توجه کنید که این مجموعه ، مجموعه ای پویاست و ممکن است با گذشت زمان عناصر آن تغییر کند . مجموعه ی دیگری را شامل تمام ریزکارها در نظر بگیرید ، این مجموعه را S می نامیم . این مجموعه نیز با گذشت زمان می تواند تغییر کند . ممکن است با انجام شدن چند ریزکار ریزکار دیگری بروز رسانی شود و مجموعه ی دیگری شامب ریزکارهای در حال اجرا فرض کنید که نام آن را I در نظر می گیریم . علاوه بر این مجموعه ها تابعی به نام F تعریف می کنیم که در هر زمان بهترین ریزکار را انتخاب می کند . از این تابع در زمانبند استفاده می شود .
می توان گفت که سیستمی که مدل ما می خواهد بر روی آن اجرا شود ، چهار قسمت اصلی دارد . همانطور که در بخش قبل گفته شد ، این قسمت ها منابع محاسباتی ، قسمت کننده ، زمانبند و ذخیره کننده هستند . همانطوری که در شکل 6-2 نشان داده شده است ، به خاطر نزدیکی زمانبند و ذخیره کننده ، آنها را با هم پیاده سازی می کنیم . هر چند اینجا برای سادگی این مدل انتخاب شد و مسلماً برای پروژه های بزرگ ممکن است این شکل تغییر اندکی داشته باشد و بهینه تر شود . در ادامه الگوریتم های دو بخش برای درک شبه – کد ارائه می شود . و در مورد قسمت کننده توضیح می دهیم .
شکل 4-2- قسمت های مختلف سیستم
4-3-1- طرف منابع محاسباتی
وظیفه ی منابع محاسباتی ، محاسبه ی ریزکارهاست . مدیریت ریزکارهایی که به منابع می رسد با زمانبند است . شبه کد بسیار ساده ی زیر الگوریتم طرف منابع محاسباتی را نشان می دهد .
انجام پیش پردازش ها
به زمانبند متصل شو و خودت را معرفی کن
تا زمانی که خطایی رخ نداده و پیام " خداحافظ " را دریافت نکرده ای مراحل زیر را انجام بده
یک ریز کار دریافت کن
ریزکار را انجام بده
نتایج را برای ذخیره کننده بفرست
الگوریتم بسیار ساده و مشخص است . در قسمت 0 ، به عنوان مثال می توان اولویت پردازش را بر اساس سیاستی که صاحب منبع تعیین می کند ، اعمال کرد . معرفی کردنی که در مرحله ی 1 از آن صحبت شده است ، در واقع پیامی است که در یک قالبی مشخص برای زمانبند فرستاده می شود تا زمانبند متوجه شود که منبع متصل شده ، منبع محاسباتی است و می تواند ریزکارها را انجام دهد .
وقتی که ریزکاری برای انجام دادن نباشد ، زمانبند پیام " خداحافظ " را برای منبع محاسباتی می فرستند تا منبع آزاد شود .
انجام ریزکار می تواند به دو صورت انجام گیرد ، همانطور که قبلاً هم اشاره شد ، می توان تعریف ریزکار را آنقدر غنی ساخت که هر نوع ریزکاری قابل انجام باشد و با اینکه توضیح کوتاه و مفیدی برای منبع محاسباتی فرستاده شود و او با توجه به الگوریتمی که دارد آن را انجام دهد . در هر صورت بعد از انجام شدن ریزکار نتایج بر می گردد .
4-3-2- طرف زمانبند
الگوریتم طرف زمانبند کمی پیچیده تر است و من برای اینکه فقط ایده مشخص شود و ساده ترین حالت آن را مطرح می کنم .
انجام پیش پردازش ها
به ازای هر منبع محاسباتی r موجود در R ، بصورت موازی کارهای زیر را انجام بده :
تا وقتی که مجموعه های S و I خالی نشده اند و خطایی رخ نداده ، کارهای زیر را انجام بده و در صورت رخ دادن خطا به مرحله ی 8 برو و اگر S و I خالی شدند ، به مرحله ی 9 برو
تا وقتی که مجموعه ی S خالی نشده ، کارهای زیر را انجام بده
F(S) را از S حذف کن و آنرا X بنام
X را به I اضافه کن
X را به r بده
نتایج را ذخیره کن
اگر X مقداری داشت ، آن را از I حذف کن و به S اضافه کن و این قسمت موازی را تمام کن .
پیام " خداحافظ " را بفرست و تمام
همانطور که مشخص شده است ، این یک الگوریتم موازی است و در واقع یک کار مشخص را به ازای هر منبع انجام می دهد . آن کار گرفتن کار از مجموعه ی S و اقدام برای انجام دادن آن است . اگر منبع به هر دلیل از شبکه خارج شود یا مشکل دیگری بوجود آید به کمک مجموعه ی I این ریزکار دوباره به S باز می گردد . در پایان پیام " خداحافظ " فرستاده می شود .
ممکن است در موردی خاص ، زمانبند خود با استفاده از چند ماشین پیاده شود ولی چون احتمالاً تعداد آن ها از منابع کمتر است باز هم به موازی سازی در فرستادن ریزکارها نیاز داریم .
یکی از موارد مهمی که وجود دارد " ذخیره کردن " در مرحله ی 7 است . ممکن است این ذخیره سازی بصورت خیلی ساده ، ذخیره کردن نتایج در یک فایل باشد و یا اینکه این نتایج نهایی باشند و برای حل شدن یک زیرکار دیگر بکار روند ( وابستگی داده ای بین ریزکارها) در این صورت باید مکانیزمی برای این کار در نظر گرفته شود و به عنوان مثال نتایج در ریزکار مورد نظر ذخیره شود و هر گاه که تمام داده های موردنیاز ریزکار فراهم شد ، آن ریزکار را برای انجام محاسبات تکمیلی به منبع محاسباتی واگذار کرد .
یکی از قسمت های مهم این الگوریتم ، مرحله ی 4 آن است . در واقع آن مرحله معنی واقعی زمانبندی را مشخص می کند . سیاست زمانبندی در تابع F پیاده سازی می شود . نکته ی دیگری که وجود دارد و آن این است که در شرایطی که ریزکاری برای انجام وجود نداشته باشد ( مثلاً وقتی که داده های موردنیاز ریزکارها وجود نداشته باشد ) تابع F آنقدر منتظر می ماند تا ریزکاری فراهم شود .
4-3-3- تقسیم کننده
عمل تقسیم کردن یک کار به چند ریزکار بر عهده ی تقسیم کننده است . اگر این عمل زیاد زمانبر نباشد ، می توان آن را با یک ماشین انجام داد و اگر زمانبر باشد می توان خود " تقسیم کردن " را به عنوان یک " کار " در نظر گرفت و با کمک منابع محاسباتی دیگر آن را انجام داد .
4-4- فلوچارت ها و کمی از جزئیات برنامه نویسی
در این بخش مطالبی که در بخش 5-3 گفته شد را بصورت علمی تر مطرح می کنیم و برای الگوریتم های گفته شده ، فلوچارت رسم می کنیم تا مطالب را با دید برنامه نویسی تر دنبال کنیم .
در بخش 5-3 برای ذخیره کردن ریزکارها از مجموعه ها صحبت شد . اما مجموعه ، موجودیتی بسیار عام دارد . برای ذخیره سازی ریزکارها می توان از صف استفاده کرد . اگر ریزکارها متقارن باشند و به هو وابسته نباشند ، می توان از ساختمان داده ی صف معمولی ( بدون اولویت ) استفاده کرد و اگر نیاز به انتخاب از بین صف باشد ، می توان از صف اولویت دار استفاده کرد .
با توجه به نوع وابسته بودن در ریزکارها ، می توانیم از نوع داده های درختی شکل و یا هر نوع داده ی مناسب برای آن کاربرد استفاده کنیم . تابع F نیز در این ساختمان داده پیاده می شود . همچنین این ساختمان داده باید قابلیت به روز کردن متن ریزکارها را داشته باشد . این " به روز شدن " زمانی کاربرد دارد که ریزکار X ، با کامل شدن ریزکارهای A و B تکمیل شود . زمانبند ابتدا ریزکارهای A و B را برای محاسبه به منبع محاسباتی واگذار می کند و بعد از حاضر شدن نتیجه ، متن ریزکار ، X به روز می شود . در این زمان ریزکار X برای ارائه به منابع محاسباتی آماده است .
جزء شروط Grid وابستگی نداشتن به سخت افزار و سیستم عامل ذکر شد . این مسائل باید در قسمت برنامه نویسی حل شود . دو راهکار می تواند ما را در رسیدن به این هدف یاری دهد .
استفاده از زبان های برنامه نویسی که فایل اجرایی آنها وابسته به سیستم عامل نیست . مثل java
با توجه به اینکه قسمت - برنامه ای که می نویسیم ( مثلاً برنامه ی طرف منبع محاسباتی ) ، بر روی چه نوع ماشین و با چه نوع سیستم عاملی قرار است اجرا شود ، زبان برنامه نویسی و کامپایلر مناسب را انتخاب می کنیم . برای ارتباط ها از یک استاندارد برای مبادله ی پیام استفاده می کنیم . یک راهکار مناسب ، استفاده از ساختار XML است . در مدل OGSA هم برای فرصت پیام ها از ساختاری شبیه XML استفاده می شود .
در ادامه ، الگوریتم های طرف منبع محاسباتی و زمانبند به شکل فلوچارت نشان داده می شود .
4-4-1- فلوچارت طرف زمانبند
فلوچارت در شکل های 5-3 و 5-4 آمده است . در این شکل 5-3 ، از یک نشانگر خاص نیز استفاده شده است : قسمت های خاکستری مشخص می کنند که در صورت بوجود آمدن خطا قسمت مشخص شده را اجرا کن .
فلوچارت شکل 5-4 ، فلوچارت 5-3 را راه می برد . بصورت خلاصه فلوچارت 5-3 یک منبع محاسباتی را در اختیار می گیرد و به آن ریزکار می دهد .
در مورد شکل 5-4 لازم توضیح است که new Thread (resource) از فلوچارت شکل 5-3 استفاده می کند . قسمت سمت راست فلوچارت برای سادگی در شبه کد بررسی نشده است ولی برای تکمیل الگوریتم لازم است . این قسمت وقتی لازم است که مجموعه ی S خالی شده ولی مجموعه I تهی نیست . در این حالت اگر منبعی از دسترس خارج شود ، ریز کار محول شده به آن به مجموعه ی
S بر می گردد و در بدترین شرایط اگر تنها منبع موجود همان منبع خارج شده باشد ، باید برای ورود منبع جدید منتظر ماند .
شکل 4-3- قسمتی از فلوچارت طرف زمانبندی
شکل 4-4 فلوچارت طرف زمانبند
4-4-2- فلوچارت طرف منبع محاسباتی
فلوچارت بعد که در شکل 5-5 نشان داده شده است ، قسمت منبع محاسباتی را نشان می دهد . همان طور که گفته شده مسئله ی اساسی در موازی سازی یک کار ، قسمت کردن آن کار است . در بخش بعد روش قسمت کردن و مدل ارائه شده در بالا را در مورد مسائل Back-Track بررسی می کنیم .
شکل 4-5- طرف منبع محاسباتی
4-5- روشی برای تقسیم کردن در مسائل Back-Track
همانطور که می دانید ، دسته ی بزرگی از مسائل NP هستند . معمولاً این دسته از مسائل I/O کمی دارند و بیشتر وقت برنامه هایی که مسائل NP را حل می کنند به محاسبه می گذرد . از این رو این مسائل NP راه حل Back-Track دارند . به همین خاطر خالی از لطف نیست که روش اجرای این دسته از راه حل ها را بر روی Grid بررسی کنیم .
توابع Back-Track چند بار بصورت برگشتی خودشان را فراخوانی می کنند . ممکن است این فراخوانی ها وابسته به یکدیگر نباشند و با توجه به ورودی بتوان تشخیص داد که چند بار و با چه ورودی تابع فراخوانی می شود . اما ممکن است حالتی وجود داشته باشد که نتیجه ی برگشته توسط یک فراخوانی در فراخوانی شدن یا نشدن تابع موثر باشد . وقتی شرط ها و حلقه هایی که تعداد اجرا شدن آنها به نتایج بازگشته از فراخوانی های بازگشتی بستگی داشته باشد ، ممکن است پیش بینی چگونگی گسترش درخت بازگشتی با زمان خطی ممکن نباشد .
همان طور که می دانید برای مسائل Back-Track ، درختی به نام درخت Back-Track تعریف می شود که ترتیب فراخوانی ا را مشخص می کند . با توجه به حالت های که در بالا بیان شد ، در حالت اول شکل درخت قبل از فراخوانی مشخص است ولی در حالت دوم ، ترسیم درخت بازگشتی مشکل تر می شود .
در حالت طبیعی ، درخت Back-Track بصورت اول – عمق پیمایش می شود ولی کلید موازی سازی ، پیمایش درخت بصورت اول – سطح است . بصورت خلاصه ، قصد داریم درخت را در یک عمق خاص قطع کنیم و برگ ها را به عنوان ریزکار به منابع محاسباتی بدهبم و نتایج را تا بالا دنبال کنیم تا کار مورد نظر انجام شود .
4-5-1- ساختمان داده ی گره
در این قسمت ساختمان داده ای را معرفی می کنیم که بعداً از آن به عنوان ساختمان داده ای برای گره های درخت Back-Track توسعه یافته که آن را "درخت خاکستری" می نامم ، استفاده خواهیم کرد .
این ساختمان داده را می توان مانند مجموعه ای از متغیرهای حالت یک گره درخت ( یک فراخوانی بازگشتی ) در نظر گرفت . این متغیرها باید آنقدر غنی باشند که با حاضر شدن نتایج فراخوانی ها ، نتیجه ی این گره بتواند به گره بالا ( گره پدر ) گزارش شود و باید از نظر تعداد متغیرها و حجم کمینه باشد تا ذخیره کردن آن فضای کمی مصرف کند . به عنوان مثال تابع بازگشتی زیر را در نظر بگیرید :
f(int n)
{
if(n<10)
return n;
return f(n-2)*f(n-3);
}
البته من می دانم که برای محاسبه ی این تابع راه حل داینامیک وجود دارد ! ولی این مثال را به خاطر سادگی مطرح کردم . با توجه به تابع بالا ساختمان داده ی گره می تواند به صورت زیر باشد .
class node
{
int n2, n3;
public:
node()
{
n2=n3= -1;
}
int res()
{
if(n2 == -1 || n3 == -1)
return -1;
return n2*n3;
}
void putN2(int x)
{
n2 = x;
}
void putN3(int x)
{
n3 = x;
}
}
مقدار 1- به معنی نامعتبر است . وقتی نتایج f(n-2) و f(n-3) بدست آمد ، نتایج ذخیره می شود و تابع res() مقدار نهایی را آماده می کند . با وجود اینکه این تابع و ساختمان داده در نهایت سادگی قرار دارند ، بطور کامل ایده ی کار را بیان می کنند .
4-5-2- درخت خاکستری
در این قسمت می خواهم درختی به نام درخت خاکستری را معرفی کنم . این درخت شبیه درخت Back-Track است و مراحل فراخوانی بازگشتی را نشان می دهد . گره های این درخت می توانند به سه رنگ سفید ، سیاه و خاکستری باشند .
سفید : به این معنی است که این گره هنوز آماده ی محاسبه نیست و باید نتایج گره های پایین تر ( فراخوانی هایی که در گره انجام می شود ) آماده شود تا گره بتواند محاسبه شود .
خاکستری : این گره ها آماده ی محاسبه هستند . وقتی گره ای خاکستری است ، به این معنی است که تمام فرزندان آن نیز خاکستری هستند و وقتی آن را برای محاسبه می فرستیم منتظر جواب کامل هستیم . در واقع وقتی گره ای خاکستری می شود به این معنی است که به مجموعه ی S اضافه شده است .
سیاه : وقتی گره ای برای محاسبه فرستاده می شود ، رنگ گره به سیاه تغییر می کند و اگر در حین محاسبه خطایی رخ دهد و منبع از دسترس خارج شود ، آن گره دوباره خاکستری و آماده برای محاسبه می شود . وقتی گره ای سیاه می شود در واقع به مجموعه I اضافه شده است .
ساختمان داده ی گره ها ، همان ساختمان داده ی مطرح شده در بخش 6-5-1 است به همراه ( احتمالاً ) چند متغیر به عنوان اشاره گر .
ما این درخت را به روش خاصی قطع می کنیم و از گره ها برای ذخیره سازی نتایج میانی استفاده می کنیم مراحل و نتایج مراحل مختلف را تا بالا ( ریشه ) دنبال می کنیم تا نتیجه ی نهایی در ریشه بدست آید . در قسمت 6-5-3 در مورد چگونگی و روش های قطع کردن صحبت می کنیم .
4-5-3- قطع کردن درخت
درخت را به روش خاصی قطع می کنیم تا از برگ های بوجود آمده به عنوان ریزکار استفاد کنیم . پس بهینه بودن قطک کردن باعث بهینه شدن اندازه ی ریزکارها و در نتیجه استفاده موثر و مفید از منابع می شود . در مسئله ی قطع کردن دو پارامتر وحود دارد :
( 1 ) متقارن بودن یا نبودن درخت Back-track
( 2 ) متقارن بودن یا نبودن منابع محاسباتی از نظر قدرت محاسباتی
متقارن بودن درخت به این معنی است که ارتفاع برگ ها برابر باشد و فاکتور انشعاب درخت در همه جا یکی باشد .
با توجه به دو پارامتر بالا 4 حالت بوجود می آید :
حالتی که هم درخت متقارن باشد و هم منابع محاسباتی . این حالت ساده ترین حالت است و برش درخت از یک ارتفاع خاص صورت می گیرد . این حالت در شکل 5-6 مشاهده می شود .
این حالت حالتی است که درخت متقارن باشد ولی منابع متقارن نباشند . این حالت در شکل 5-7 نشان داده شده است . در این حالت درخت متقارن بریده نمی شود و بریده شدن به صورتی انجام می شود که نتایج تقریباً همزمان برگردند .
ممکن است درخت متقارن نباشد وی منابع متقارن باشند که این حالت در شکل 5-8 آمده است . در این حالت نیز درخت متقارن بریده نمی شود .
بدترین حالت زمانی است که هم درخت و هم منابع متقارن نباشند . معمولاً این حالت اتفاق می افتد . در این حالت نیز درخت متقارن بریده نمی شود . شکل 5-9 را ببینید .
در حالت هایی که درخت متقارن بریده نمی شود ، شکل بریدن با توجه به مرتبه زمانی الگوریتم و قدرت محاسبه ی منبع بدست می آید . در واقع در همه ی حالات هدف این است که نتایج برگها در یک زمان آماده شود تا کارهای زمانبندی بعدی ساده شود .
شکل 4-6- درخت متقارن و منابع متقارن
شکل 4-7- درخت متقارن و منابع نامتقارن
شکل 4-8- درخت نامتقارن و منابع متقارن
شکل 4-9- درخت نامتقارن و منابع نامتقارن
در تمام حالات بالا چیزی که اهمیت دارد ارتفاع برش است . هر چه درخت از ارتفاع پایین تری بریده شود تعداد ریزکارها بیشتر و اندازه ی ریزکارها کوچکتر می شود . و هر چه از ارتفاع بالاتری درخت را ببریم ، تعداد ریزکارها کمتر و اندازه ی آنها بزرگتر می شود . در مورد اندازه و تعداد ریزکارها قبلاً صحبت کردیم . با توجه به پارامترهای گفته شده ، ارتفاع برش مناسب انتخاب می شود
4-5-4- زمانبندی
در این قسمت می خواهیم مطالبی را که در 3 بخش قبلی بررسی کردیم ر ا بکار ببریم و ریزکارها را روی منابع زمانبندی کنیم تا " کار" انجام شود .
با توجه به ساختاردرخت ، برگ هایی که از بریدن بدست آمده است هیچ وابستگی داده ای به هم ندارند پس می توان به سادگی آنها را به منابع محاسباتی داد تا محاسبه شوند . وقتی ریزکار ( گره ) ی برای محاسبه به منبع محاسباتی فرستاده می شود ، گره مربوط به آن سیاه می شود تا در صورت بروز خطا دوباره به رنگ خاکستری در آید و برای محاسبه آماده شود .
وقتی نتایج آمده شد ، باید این نتایج تا بالا دنبال شود . ممکن است این کار آنقدر ساده و کم هزینه باشد که این کار بر عهده ی زمانبند گذاشته شود ولی در صورتی که هزینه بر باشد ، اشتباه به نظر می رسد که گره ها را بصورت تنها به عنوان ریزکار در نظر بگیریم و برای محاسبه بفرستیم ، چون اندازه ی ریزکار احتمالاً بسیار کوچک خواهد بود . روشی که پیشنهاد می شود این است که یک زیر درخت را به عنوان ریزکار خاکستری کنیم و آن را برای محاسبه بفرستیم و بعد این مراحل را تا بالا ادامه دهیم تا "کار" انجام شود . این مراحل در شکل 4-10 نشان داده شده است .
شکل 4-10 مراحل زمانبندی
حالت کمی پیچیده تر زمانی است که نتایج حاصل از انجام ریزکارها باعث تولید گره جدید شود . این حالت زمانی اتفاق می افتد که نتیجه ی برگشته از یک فراخوانی در فراخوانی شدن یا نشدن تابع موثر باشد . در این حالت با بررسی شرط ممکن گره جدیدی به درخت اضافه شود . این گره جدید خاکستری می شود تا منابع محاسباتی آن را محاسبه کنند . این حالات در شکل 4-11 نشان داده شده است .[redbooks.ibm 2009]
شکل 4-11 – مراحل زمانبندی
4-5-5 - نکات تکمیلی
برای مسائل و محیط های بزرگ احتمالاً استفاده از نکات زیر می تواند مفید باشد .
اگر عمل پیمایش درخت تا ارتفاع برش و تولید ریزکارها ، کاری زمانبر باشد ، می توان این عمل را به عنوان یک "کار" در نظر گرفت و آن را روی منابع محاسباتی دیگر زمانبندی کرد . اگر اندازه ی مسئله بزرگ باشد و ما به منابع محاسباتی زیادی دسترسی داشته باشیم ، می توان از چند ماشین برای زمانبندی استفاده کرد و هر منبع را به یک زمانبند سپرد . برای این کار می توان از یک توپولوژی مجازی درختی برای مدیریت زمانبند ها استفاده کرد .
برای ذخیره سازی نتایج می توان از چند ماشین بهره برد تا از پهنای باند استفاده ی مفیدی گردد و عمل ذخیره سازی سریعتر انجام گیرد .
مراجع و منابع
Foster I., Kesselman C., The Grid 2 : Blueprint for a new computing
infrastructure, ELSEVIER, 2004
2. Jacobi B., Brown M., Fukui K., Trivedi N., Introduction to Grid
Computing, an IBM Redbook, 2005
3. Grama A., Gupta A., Karypis G., Kumar V., Introduction to parallel
computing, Addison Wesley, 2003
4. Foster I., What is the Grid? A Three Point Checklist, Argonne National
Laboratory & University of Chicago, 2003
5. Foster I., Globus Toolkit version 4: Software for service-oriented
systems, Argonne National Laboratory & University of Chicago, 2006
6. Schopf J. M., Grids: The Top Ten Questions, Mathematics and
Computer Science Division, Argonne National Lab, Department of
Computer Science, Northwestern University,2009
7. IBM Official Website : www.ibm.com,2009
8. Globus Website : www.globus.org,2009
9. Open Grid Forum : www.ogf.org,2009
10. IBM Redbooks : www.redbooks.ibm.com,2009