مفاهيم مربوط به معماري سرويسگرا[1] اوايل سال 1990 مطرح شد، مفاهيمي که بر روي اصولي همچون اتصال سست[2]، توزيعشدگي و استفاده مجدد[3] تاکيد دارند. معماري سرويسگرا يکي از روشهايي است که در رابطه با مباحث محاسبات توزيعشده با ويژگيهاي اتصال سست و بر اساس استانداردها و پروتکلهاي مشخص مطرح شد. معماري سرويسگرا با توجه به جايگاه معماري در مهندسي نرمافزار در سالهاي اخير با استقبال زيادي در دنياي فناوري اطلاعات و کسبوکار و در توليد سيستمهاي نرمافزاري روبرو شده است. آنچه باعث افزايش روند گسترش استفاده از اين معماري شدهاست ظهور وب سرویسها است که در آن امکان عملياتي کردن اکثر اصول و مشخصات معماري سرويسگرا فراهم است. استفاده و سازماندهی منابع گسترده، اعم از برنامه و داده در این معماری به نحوی صورت میگیرد که بهکارگیری این قابلیتها به شکل یکسان و با تعاریف مشخص صرفنظر از سکو، مشخصه شیء و دامنه امکانپذیر باشد[14].
معماري سرويسگرا واژهاي است براي نمايش مدلي که در آن منطق توالي و هدايت به بخشهاي منطقي کوچکتر تقسيم ميشوند. اين بخشها خود شامل بخشهاي منطقي کوچکتری هستند که ميتوانند به صورت توزيعپذير باشند. معماري سرويس گرا اين بخشها را به خودمختار بودن و دوري از انزوا سوق ميدهد و از آنها ميخواهد از مجموعه اصولي استاندارد و مشترک براي رشد و نمو به صورت مستقل پيروي کنند. در معماري سرويسگرا به اين بخشها سرويس ميگويند[15]. این سرویسها هم توسط دیگر نرمافزارها قابل فراخوانی هستند و هم برای ساخت سرویسهای جدید مورد استفاده قرار میگیرند. این راهکار برای یکپارچهسازی فناوریها در محیطهایی که انواع مختلفی از سکوهای نرمافزاری و سختافزاری در آن وجود دارد، ایدهآل است.
معماری سرویسگرا از جنبههای مختلفی قابل بررسی میباشد، هر ذینفعی بر اساس جایگاه خود برداشتی از این معماری دارد که در ادامه به بررسی آنها میپردازیم:
- متخصصان کسبوکار: معماری سرویسگرا مجموعهای از سرویسها است که سازمان مایل به ارائه آنها به مشتریان یا شرکای کاری خود میباشد [6].
- معماران: معماری سرویسگرا یک سبک از معماری است که حاوی قوانین، الگوها و ضوابطی است که باعث ایجاد خصوصیاتی مانند پیمانهای بودن، بستهبندی، اتصال سست، استفاده مجدد و ترکیب پذیری شده و از نظر ساختار از یک ارائهدهنده سرویس و یک درخواستکننده سرویس تشکیل شده است[16].
- طراحان و پیادهسازان: معماری سرویسگرا یک سبک و مدل برنامهنویسی است که از استانداردهایی مانند (WSDL,UDDI,SOAP,…) و فناوریهایی نظیر سرویسهای وب استفاده میکند و قابلیت تعامل پذیری بین مؤلفههای نرمافزاری را بدون توجه به سکو و فناوری پیادهسازی آنها پشتیبانی میکند[15].
2-2-1 تعاریف معماری سرویسگرا
برای معماری سرویسگرا تعاریف متنوع و متفاوتی ارائه شده است که به نحوی خصوصیات آن را بیان نموده است. برای درک بهتر این مفهوم در ادامه مروری بر تعدادی از این تعاریف خواهیم داشت.
- یک سبک برای ساخت سیستمهای توزیع شده مطمئن است که امکاناتش را به صورت سرویس تحویل میدهد و بیشتر روی سست اتصالی بین تعاملات سرویسها تاکید دارد[17].
- مدلی ارائه میدهد که در آن منطق خودکارسازی به واحدهای منطق کوچکتر و مجزا تفکیک شدهاست[15].
- چارچوب وسیع و استانداردی که سرویسها در آن ساخته شده، استقرار مییابند و مدیریت میشوند. هدف این چارچوب افزایش چابکی زیرساختهای فناوری اطلاعات در جهت واکنش سریع به تغییرات نیازهای کسبوکار میباشد[9].
در جمعبندی از تعاریف معماری سرویسگرا میتوان به ویژگیهای زیر اشاره نمود[15]:
- همراستا با کسبوکار سازمان است.
- هم موضوعی فنی است و هم نوعی تفکر است.
- مبتنی بر اتصال سست است و از پیامرسانی استفاده میکند.
- قادر به ساخت سیستمهای ترکیبی است.
- مهمترین دستاورد آن انعطافپذیری و چابکی فناوری اطلاعات در برابر تغییرات حرفه است.
- منجر به تعامل پذیری سامانهها و سازمانها میگردد.
- امکان ارائه یک سرویس با واسطههای متنوع را محقق میسازد.
در مدل پایهای این معماری، تعدادی سرویس وجود دارد که قرار است مشتریان از آنها استفاده کنند. مشتریان ممکن است کاربران، سرویسهای دیگر یا برنامههای کاربردی باشند؛ ابتدا سرویس مورد نظر را بر اساس قراردادهای سرویس شناسایی، سپس درخواست خود را به آن سرویس ارسال میکنند. مکانیزم کلی عملکرد معماري سرويسگرا به وسیله سه مؤلفه اوليه درخواستدهنده سرويس[4] يا مشتري، فراهمکننده سرويس[5]، انباره سرويس[6] بيان ميشود (شکل 2-1) [15].
شکل 2-1 مدل پایه سرویسگرایی[15]
هر فراهمکننده سرويس، براي معرفي خود توصيفکننده خود را در انباره سرويس قرار ميدهد. درخواستکننده سرويس با جستجو در انباره سرويس، سرويس مورد نظر خود را انتخاب و بدون واسطه با فراهمکننده آن سرويس ارتباط برقرار ميکند. همانطور که گفته شد انباره سرويس شامل توصيفکنندههاي فراهمکنندههاي سرويس است. در ضمن هر سرويس ميتواند هر دو نقش فراهمکننده و درخواستدهنده را داشته باشد. در هنگام فراخوانی یک سرویس، پارامترهای معینی ممکن است برای انجام درخواست مورد نیاز باشد که به آن خصوصیات مدل دادهای مرتبط میگویند و یک سرویس ممکن است پارامترهایی را به کاربران سرویس بازگرداند. W3[7]C , WSD[8]L یک نمونه از این پیادهسازی میباشد [18].
2-2-2 سرویس
سرويسها در واقع همان بخشهاي منطقي، در معماري سرويسگرا میباشند. هر سرويس در برگيرنده وظيفه مشخص، موجوديت و يا مجموعهاي از فعاليتهاي مرتبط است که در ابعاد مختلف تعريف ميشوند. هر سرويس شامل منطق جداگانهاي است. طبق تعریفی ديگر سرويس مكانيزمي براي فعال كردن دسترسي به يك يا چند قابليت است، دسترسي با استفاده از يك واسط مورد تأييد و سازگار با قيود و سياستهاي تعيين شده در شرح سرويس فراهم ميشود[19]. سرویس رفتار قراردادی تعریف شدهای است که میتواند به وسیله یک جزء برای استفاده جزء دیگر پیادهسازی شده، فراهم شود[20]. مفهوم سرويس بر تمايز بين قابليتی كه مجموعه عملياتي براي رفع نيازها ارائه ميدهد و نقطه دسترسي به سرويس را که در متن معماري سرويسگرا آورده ميشود تاكيد دارد. يک سرويس را ميتوان تابعي خوشتعريف[9] و جامع در نظر گرفت که به زمينه و حالت سرويسهاي ديگر بستگي ندارد[21].
هر سرویس شامل پارامترهای فنی، قیود و سیاستهایی است که قالبهای لازم برای فراخوانی سرویس را تعریف میکند. هر سرویس، شرح سرویسی را در قالب استانداردی تعریف میکند. مزیت شرح سرویس برای کاربران و طراحان سرویس این است که به آنها کمک میکند تا بدانند سرویس چه کاری انجام میدهد و ورودی و خروجی آن چیست [20]. از آنجایی که طبیعت سرویسها دائماً در حال تغییر است، باید واژههایی را به صورت قانونی و استاندارد برای برقراری ارتباط بین سرویسها تعریف نمود. که میتوان به عنوان نمونه زبان توصیفی وب سرویس را نام برد[9] .
شرح سرویس باید به شیوهای قابل دسترس در اختیار کاربران بالقوه قرار گیرد که به این امر اعلان سرویس میگویند. پایش سرویس زمانی صورت میگیرد که یک مشتری بالقوه اطلاعاتی در مورد وجود یک سرویس، پارامترهای قابل اعمال و واژگان آن بیابد[15]. اجزای اعلان و پایش در معماری سرویسگرا به شیوههای مختلفی پیادهسازی میشود که در ادامه به برخی از آنها میپردازیم:
- پیادهسازی به روش ثبات/مخزن: در این حالت کاربران امکان ذخیره و مدیریت سرویسهای لازم برای عملکرد سازمانشان را خواهند داشت. این موضوع شامل سرویسهایی است که تسهیم بین بیش از یک کاربر (مانند شرح وب سرویسها) را فراهم میآورد و ثبات در مورد تمامی رویدادهای قابل ارزیابی به نسبت محصولات درون مخزن اطلاع دارد[15].
- پیادهسازی به روش کتاب راهنما[10] : کتاب راهنما یک واسط است که اطلاعات نسبت داده شده به محصولات را فراهم میآورد. افرادی که مالک هستند یا آنها را کنترل میکنند، میتوانند یک راه به کتاب راهنما باز کنند و به محصولات ارجاع شده و اطلاعات نسبت داده شده توضیح دهند. همچنین ممکن است این اطلاعات توسط دیگران نیز بازیابی شود. مهمترین مشکل کتاب راهنما این است که هیچ کنترلی یا اطلاع رسانی در صورت حذف، تغییر و جایگزینی یک محصول انجام نمیدهد و قادر به اعلام این رویدادها به کاربران نیست[18].
سرويسگرايي در تئوري جداسازي نگرانيها[11] ریشه دارد. بر اساس اين تئوري هر مسئله بزرگ را ميتوان با شکستن به بخشهاي کوچکتر و مستقل و مرتبط به هم حل کرد. سرويسگرايي براي تحقق اين تئوري اصول زير را براي سرويسها در نظر گرفته است[15]:
- سرويسها قابل استفاده مجدد[12] هستند: سرويسگرايي تمام سرويسها را به استفاده مجدد بدون در نظر گرفتن نيازهاي فعلي تشويق ميکند. با رعايت استانداردهاي طراحي پتانسيل استفاده مجدد از سرويسها بيشتر ميشود که سبب برطرف کردن سريع نيازهاي آينده ميشود. همچنين به صورت چشمگيري نياز به سرويسهاي پنهانساز[13] براي قرار دادن واسطي بر روي سرويسها را کاهش ميدهد. استفاده مجدد يکي از مهمترين اصول سرويسگرايي است.
- سرويسها قرارداد رسمي[14] را به اشتراک ميگذارند: هر قرارداد شامل تعريفي رسمي از نقطه تماس[15] سرويس، عملهاي سرويس، پيغامهاي ورودي و خروجي و قواعد و مشخصات عملهاي سرويس است. به بياني ديگر بخشهاي مختلف در مدل پایه معماري سرويسگرا را تعريف ميکند.
- سرويسها به صورت ارتباط سست[16] هستند: ارتباط سست شرايطي است که يک سرويس دانش مربوط به سرويس ديگر را بدست ميآورد در حالی که به صورت مستقل از آن سرويس باقي ميماند. ارتباط سست به وسیله استفاده از قرارداد رسمي میان سرويسها محقق ميشود. در معماري سرويسگرا منظور از اتصال سست قابليت تعامل بين سرويسها به صورت مستقل از کد نویسی و مکان سرويسها است، به گونهاي که سرويسها در زمان اجرا ميتوانند تغيير مکان داده، روالهاي داخلي خود را تغيير دهند يا حتي از يک فناوري جديدتر استفاده کنند، بدون اينکه تأثیری منفي بر سرويسگيرندگان گذاشته شود. ارتباط سست يکي ديگر از مهمترين اصول سرويسگرايي است.
- سرويسها منطق زيرين خود را به صورت تجرید[17] محقق ميسازند:به عبارتی سرویسها منطق محصور شده درون خود را از عالم خارج مخفی میکنند. نکته قابل ذکر در اینجا این است که تفاوت میان مجرد سازی و مخفی سازی در چیست؟ مجرد سازی به تعریف موجودیتهای رویهای و یا اطلاعاتی که نرمافزار را میسازند کمک میکند، ولی پنهانسازی محدودیتهای دسترسی را برای جزئیات رویهای داخل پیمانه و هر ساختمان داده محلی استفاده شده در پیمانه را تعریف و اجباری مینماید.
- سرويسها قابل ترکيب[18] هستند: هر سرويس ميتواند مقدار متفاوتي از منطق را از منابع متفاوت که شامل سرويسها نيز ميشود تأمین کند. دليل اصلي از اين اصل براي اطمينان از طراحي سرويسها به صورتی که بتوانند به عنوان عضوي از يک سرويس ترکيبي باشند، است.
- سرويسها خودمختار هستند: هر سرويس منطق خويش را به صورت محدوده مشخص بيان ميکند. سرويس به تمام فرآيندهاي خويش خودمختار است. اين اصل تنها ضمانت ميکند که در زمان اجرا سرويس نسبت به منطق خويش کنترل دارد.
- سرويسها قابل کشف و شناسايي هستند: اين خاصيت سرويسها سبب ميشود تا سرويسهاي تکراري ايجاد نشوند. خاصيت مهم ديگر آن امکان ارائه مکانيزم کشف و شناسايي است که معمولاً بر اساس انباره سرويس صورت میگیرد
.
2-2-3 مفاهیم مرتبط با معماری سرویسگرا
در این مبحث به تشریح برخی مفاهیم مرتبط با معماری سرویسگرا خواهیم پرداخت. بعضی از این مفاهیم در فصول بعدی، جایی که مفاهیم امنیتی مطرح میشود به کار میآید.
- فراهمکننده سرویس: یک موجودیت نرمافزاری است که خصوصیات سرویس را پیادهسازی میکند[15].
- درخواست کننده سرویس: یک موجودیت نرمافزاری است که یک فراهمکننده سرویس را فراخوانی میکند. به طور سنتی این مورد به عنوان سرویسگیرنده شناخته میشود. اما یک درخواست کننده سرویس میتواند به عنوان یک برنامه کاربردی و یا به عنوان یک سرویس دیگر قرار گیرد[15].
- موقعیت یاب سرویس: یک نوع خاصی از فراهمکننده سرویس است که به عنوان یک ثبات عمل میکند و امکان جستجوی واسطههای فراهمکننده سرویس و همچنین موقعیت سرویس مورد نظر را میدهد[15].
- واسط سرویس: یک نوع خاصی از فراهم کننده سرویس است که میتواند درخواست سرویس را به یک یا چند فراهمکننده سرویس منتقل کند[15].
- محصورسازی سرویس: محصورسازی یکی از اصول شیگرایی است که در معماری سرویسگرا نمود پیدا کرده است. در شیگرایی شی را محصور میکنند تا از تأثیرات ناخواسته در امان باشد، همچنین از واسط جهت ارتباط با شی استفاده میکنند و طرق دسترسی به شی را به آن محدود میکنند. در معماری سرویسگرا هم این منطق است؛ و باز هم با همین اهداف محصورسازی میشود. اما باید توجه داشت که این منطق دارای اندازههای متفاوت است به طوری که این دانهبندی برای سرویس و منطق آن مانع از محصورسازی آنها نمیشود و در این حالت نیز محصورسازی انجام میشود (شکل 2-3) [15].
شکل 2-2 دانهبندی سرویسها[15]
هر سرویس میتواند یک وظیفه که توسط یک گام مشخص اجرا میشود را بستهبندی کند. این کوچکترین دانهبندی در محصورسازی منطق راهحل توسط سرویس به شمار میآید. همچنین میتواند یک زیر فرآیند که شامل مجموعهای از گامهاست یا تمامی منطق فرآیند را محصورسازی کند. در دو مورد اخیر محدوده بزرگ ارائه شده توسط سرویسها ممکن است شامل منطق ارائه شده توسط دیگر سرویسها نیز باشد. برای آنکه سرویسها از منطقی که محصور کردهاند استفاده نمایند، میتوانند در اجرای فعالیتهای کسبوکار سهیم شوند [15].
- همنواسازی[19] و همخوانی[20] : دو واژه پر کاربرد در حوزه کسبوکار و معماری سرویسگرا که معمولاً به جای هم اشتباه گرفته میشوند. همنواسازی در خصوص ترتیب اجرای سرویسها در فرآیند بحث میکند، همنواساز اصلی مجموعهای از سرویسها را فراخوانی میکند تا نتیجه مورد نظر حاصل شود و فرآیند تکمیل گردد (ممکن است سرویسهای خارج سازمان نیز در این راستا فراخوانی و استفاده شوند که این کار با کمک موتور فرآیند تحقیق انجام میشود). در حالی که همخوانی به فرآیندهایی میگویند که بدون موتور فرآیندی (رهبر ارکستر) اقدام به تبادل پیام کرده و ترتیب و توالی پیامهای مبادلاتی را خود بازیگران ثبت و کنترل میکنند (شکل 2-3)[22] .
شکل 2-3 همنواسازی و همخوانی
بنابراین همنواسازی به معنای وجود یک موتور فرآیندی است که ترتیب و توالی را کنترل کرده و از شرکا داخلی یا خارجی برای انجام کارها استفاده میکند. نمونه این مدل، سیستم مدیریت فرآیندهای کسبوکار است که فرآیندها در موتور فرآیندی اجرا میشوند[22]. همخوانی به معنای پردازشهای توزیعشده بین چند فرآیند است که بدون یک رهبر مرکزی با هم تعامل دارند و یا چندین موتور فرآیندی که در کنار و همسطح هم اجرا میشوند و با همکاری هم هدفی را محقق میسازند. نمونه این حالت در پردازشهای توزیعشده و یا فعالیتهای بین سازمانی که هر دو طرف با مشارکت هم به دنبال یک هدف معین هستند دیده میشود[22]. بنابراین مهمترین تفاوت همخوانی و همنواسازی در داشتن مالک و کنترلکننده مرکزی است.
[1] Service Oriented Architecture
[2] Loosely-coupled
[3] Reuse
[4] Service requester
[5] Service provider
[6] Service Registry
[7] World Wide Web Consortium
[8] Web Service Description Language
[9] Well-defined
[10] Directory
[11] Separation of concerns
[12] Reusable
[13] Wrapper
[14] Formal contract
[15] Endpoint
[16] Loosely coupled
[17] Abstraction
[18] Composable
[19] Orchestration
[20] Chereography