هر سرویس می تواند یک یا چند رکورد در محل ثبت داشته باشد که در آن توصیف سرویس قرار می گیرد. در سرویسهای وب، تبلیغ و کشف سرویسها از طریق UDDI [30]انجام می شود. همچنین توصیف سرویس در سرویسهای وب با بهره گرفتن از WSDL [31]و پیام رسانی با SOAP [32]انجام می شود. شکل 2-5 این مطلب را نشان می دهد.
شکل 2-5 تبلیغ، کشف و توصیف سرویسها در وب
2-2-5-8- محل ثبت
محل ثبت کاتالوگی از سرویس دهندگان در دسترس، مکانیزمی برای بررسی آنچه سرویس دهنده می تواند فراهم کند، و نیز امکان ارائه نقطه اتصالی که سرویس گیرنده بتواند به آن متصل شود را در اختیار سرویس گیرندگان قرار می دهد . محل ثبت می تواند توسط سازمان، یا منابع مستقل یا سایر کسب و کارهایی که سرویسهایی برای ارائه دارند ، ارائه و نگهداری شود. همه محلهای ثبت باید API[33] هایی را فراهم کنند تا به سرویس ها اجازه ثبت شدن داده و به سرویس گیرندگان اجازه دهد تا سرویس دهندگان را شناسایی کرده و به آنها متصل شوند.
2-2-5-9- همنوا سازی و همخوانی
همنواسازی (orchestration) ، توصیف ترتیب فعالیتهایی است که یک فرایند کاری را می سازد و شامل مدیریت تراکنشها بین سرویسهای منفرد و دستگیری خطاها و نیز توصیف کلیت فرایند است. در صورت نبود همنواسازی نیاز به هماهنگی های دستی وجود خواهد داشت.
بنابراین همنواسازی پایه گذار پروتکل کاری است که بطور رسمی فرایند کاری را تعریف می کند. و از آنجا که روشی برای متمرکز کردن و کنترل حجم بالایی از منطق های داخل برنامه و بین برنامه های مختلف با بهره گرفتن از یک مدل سرویس استاندارد است، قلب SOA خوانده می شود. [19]
در سطوح بالاتر و در ارتباطات بین سازمانها مفهوم همخوانی (choreography) مطرح می شود که در آن بحث هماهنگی چند همنواسازی با یکدیگر مورد توجه است و فعالیت پیچیده ای است که از ترکیب سرویسها و چند الگوی تبادل پیام تشکیل می شود.
2-2-6- اصول و مشخصه های معماری سرویس گرا
می توان گفت اساسی ترین عنصر تشکیل دهنده معماری سرویس گرا، سرویس است. نحوه انتخاب و مشخصه های سرویس آنقدر اهمیت دارد که مسائل مربوط به آن بعنوان سرویس گرایی مطرح می شوند. اصولی که در زیر بیان خواهند شد، توسط Erl و McGovern و سایرین در کتابهایشان معرفی شده اند و مورد توافق جوامع نرم افزاری قرار دارند. بطور کلی SOA دارای مشخصه ها و اصول زیر است:
2-2-6-1- سرویسها دارای واسط (قرارداد) و خط مشی های خوش تعریف اند.
همه سرویس ها قراردادی را منتشر می کنند. این قرارداد توافق میان سرویس گیرنده و سرویس را محصور می کند. قرارداد همان چیزی است که مصرف کننده هنگامی که سرویس را جستجو می کند بدقت بررسی می کند. قراردادها شامل همه اطلاعات ضروری برای یک برنامه کاربردی است تا دارای قابلیت دسترسی به سرویس باشد. استفاده از اطلاعات درون قرارداد برای دسترسی و استفاده از سرویس “اتصال” نام دارد. قراردادها در SOA گسترشی بر ایده واسطها هستند. یک قرارداد در SOA موارد زیر را تعیین می کند.
-
- وظیفه مندی ارائه شده
-
- ورودیهای لازم و خروجی مورد انتظار
-
- پیش شرطها
-
- پس شرطها
-
- دستگیری خطا
-
- تضمین کیفیت سرویس(QOS[34]) و توافقات سطح سرویس
ایده آل آن است که یک سرویس ، خط مشی های مربوط به قابلیت اطمینان [35]، در دسترس بودن [36]، امنیت [37]و استثناها را تعریف کند.
2-2-6-2- سرویسها معمولاً یک دامنه یا وظیفه کاری را نمایش می دهند.
سرویسها می توانند برای نمایش انواع دامنه های مساله پایه ریزی شوند. یک سرویس می تواند یک دامنه کاری یا یک دامنه فنی را ارائه کند. یکی از رایجترین انواع سرویس، آنهایی هستند که عملکرد فنی دارند. محلهای ثبت، فراهم کنندگان امنیت وlog کردن چند مورد از برنامه های زیر ساختی و فنی هستند که سرویسهای بسیار خوبی محسوب می شوند. با این وجود قدرت واقعی SOA در توانایی آن در مدل سازی یک دامنه کاری است. با بزرگتر و پیچیده تر شدن دامنه های کاری محقق شده در SOA، در خواهیم یافت که کلیت فرایند کاری، خود متشکل از تعدادی سرویس کوچکتر است. این سرویسها با پیامها به هم مرتبط می شوند . و به صورت ترتیبی یا یک جریان عمل می کنند. مفهوم ترکیب سرویس نیز از اینجا نشات می گیرد.
2-2-6-3- سرویسها دارای طراحی پیمانه ای هستند.
سرویسها متشکل از پیمانه ها هستند. طراحی پیمانه ای در SOA مهم است. یک پیمانه می تواند بعنوان یک زیر واحد یا زیر سیستم نرم افزاری تلقی شود که عملیات ویژه و خوش تعریفی را انجام می دهد. برای بحث فعلی، پیمانه را مجموعه ای از واحدهای نرم افزاری در نظر می گیریم که برای مصرف کننده سرویس ارزشی را بهمراه دارد. هر پیمانه باید فقط یک کار انجام دهد و باید آن کار را کامل انجام دهد. یعنی پیمانه باید همه زیر واحدها و زیر پیمانه های ضروری برای انجام کامل آن کار را داشته باشد. به عبارت دیگر پیمانه ها باید چسبندگی داخلی بالایی از خود نشان دهند.
2-2-6-4- سرویسها دارای اتصال سست اند.
اتصال سست یک ویژگی برای سیستمهای اطلاعاتی است که در آن واسطهای بین اجزاء یا پیمانه ها به گونه ای طراحی می شوند که وابستگی بین اجزاء حداقل شود و در نتیجه ریسک اثر تغییر یک جزء بر سایر اجزاء کاهش یابد[20]
در معماری سرویس گرا منظور از اتصال سست، قابلیت تعامل بین سرویسها به صورت مستقل از کدنویسی و مکان سرویسها است، بگونه ای که سرویسها در زمان اجرا می توانند تغییر مکان داده ، روالهای داخلی خود را تغییر دهند یا حتی از یک فناوری جدیدتر استفاده کنند بدون این که تاثیری منفی بر سرویس گیرندگان گذاشته شود.[6]
2-2-6-5- سرویسها قابل کشف اند.
یکی دیگر از عوامل مهم در انعطاف پذیری و قابلیت استفاده مجدد SOA مفهوم قابلیت کشف و اتصال پویا است. پیمانه های یک سرویس گیرنده هیچ پیوند ایستایی با سرویس ندارند. بطور مشابه پیمانه های یک سرویس نیز با هیچ سرویس گیرنده ای پیوند ایستا ندارند. سرویس گیرندگان به جای استفاده از اتصالهای ایستا که در زمان کامپایل ساخته می شوند، برای یافتن وظیفه مندی مطلوب از یک محل ثبت استفاده می کنند. سپس با بهره گرفتن از اشاره گر دسترسی، که از محل ثبت بدست آمده است ، می توانند به نقطه اتصال دسترسی یابند. بنابراین سرویس کاملاً آزاد است تا پیمانه ای را که موارد قرارداد را تامین می کند جابجا کند یا تغییر دهد. برعکس، اگر نیازهای سرویس گیرنده تغییر کند یا سرویس دهنده دیگر سرویس مورد نظر را ارائه نکند، سرویس گیرنده کاملاً آزاد است تا سرویس دیگری را انتخاب کند. بدون آنکه نیاز به آن داشته باشد که تغییر درونی در کار خود ایجاد کند.
2-2-6-6- محل سرویسها برای سرویس گیرندگان نا پیدا است
مخفی کردن محل سرویس برای سرویس گیرنده انعطاف پذیری [38]زیادی را برای پیاده سازی SOA فراهم کند. سازماندهی مجدد در سازمان ممکن است میزبانی یک سرویس را به یک سرویس دهنده دیگر بسپارد. قطعی دسترسی به یک مکان می تواند با بهره گرفتن از ارسال درخواستهای سرویس به سایر سرویسها در مکانهای دیگر، از دید سرویس گیرندگان پنهان شود. عدم لزوم دانستن محل سرویس توسط سرویس گیرنده امکان آن را فراهم می کند تا یک معماری تا حد ممکن انعطاف پذیر، قابل نگهداری، ارزان و نسبت به خرابی مقاوم باشد.
2-2-6-7- سرویسها مستقل از روش انتقال هستند.
سرویس گیرندگان از طریق یک ارتباط شبکه به سرویسها دسترسی یافته و از آنها استفاده می کنند. SOA از نوع ارتباط شبکه ای مورد استفاده برای دسترسی به سرویس مستقل است. سرویسها از مکانیزم انتقال مورد استفاده برای دسترسی به آنها مستقل اند. در عمل تطبیق دهنده ای وجود دارد تا دسترسی به سرویسها را از طریق انواع روش های انتقال ممکن کند. مثلاً اگر سرویس گیرندگان بخواهند با بهره گرفتن از HTTP به سرویس دسترسی یابند، یک تطبیق دهنده HTTP ایجاد خواهد شد. همین مثال درباره استفاده از RMI[39] و سایر روش های انتقال صادق است. یک تطبیق دهنده می تواند برای چندین سرویس به کار رود و قابل استفاده مجدد باشد.
2-2-6-8- سرویسها مستقل از سکو هستند.
برای بدست آوردن حداکثر انعطاف پذیری یک سرویس نباید به سکویی که بر آن اجرا می شود وابسته باشد. بنابراین سرویس ایده آل باید از نظر تئوری مستقل از سیستم عامل باشد. در دنیای واقعی با مستقل کردن سرویسها از روش انتقال ، استقلال SOA از سکو بسیار کم اهمیت تر می شود. زیرا برای مثال یک سرویس .NET که روی windows اجرا می شود، در تئوری می تواند به سرویس گیرندگان در حال اجرا بر روی هر سیستم عامل دیگر روی شبکه دسترسی داشته باشد. بسیاری از سازمانها دارای سکوهای متعددی هستند.
سرویسهایی که برای این سازمانها تولید می شوند باید مستقل از سکو باشند تا انعطاف پذیری در میزبانی را، که لازمه حداکثر عملکرد کاری است، فراهم کنند. سرویسهایی که برای سازمانهای کوچکتر تولید می شوند مانند حرفه هایی که از یک سیستم عامل منفرد استفاده می کنند، استقلال از سکو را چندان ضروری نخواهند دید.
2-2-6-9- سرویسها قابل استفاده مجدد هستند.
سرویس گرایی استفاده مجدد را در همه سرویسها مورد تاکید قرار می دهد. با اعمال استانداردهای طراحی که هر سرویس را قابل استفاده مجدد می کند، این قابلیت وجود دارد که در قبال تغییرات آینده انطباق آسانتر و در زمینه توسعه سیستم نیاز به کار کمتری داشته باشیم.
این اصل همه انواع استفاده مجدد ، شامل تعامل پذیری برنامه ها، ترکیب، و ایجاد سرویسهای کمکی را تسهیل می کند. یک سرویس قابل استفاده مجدد ، عملیات قابل استفاده مجددی را نیز به نمایش می گذارد.
2-2-6-10- سرویسها قابل ترکیب اند.
یک سرویس می تواند هر محدوده ای از منطق را از هر نوع منبعی- از جمله سایر سرویسها- نمایش دهد.
دلیل اصلی این امر، حصول اطمینان از آن است که سرویسها طوری طراحی شوند که در صورت لزوم بتوانند بعنوان اعضای فعالی در ترکیب سرویسها مشارکت کنند. این نیازمندی بدون توجه به این موضوع است که آیا سرویس خود می تواند سایر سرویسهارا برای انجام کاری ترکیب کند یا خیر.
مفهوم همنواسازی یکی از مفاهیمی است که بر ترکیب تاکید دارد. نیاز هر سرویس به قابل ترکیب بودن، تاکیدی بر طراحی عملیات سرویس نیز دارد. قابلیت ترکیب جنبه دیگری از همان بحث قابلیت استفاده مجدد است و بنابراین عملیات آن نیز باید بطور استاندارد و با سطح مناسبی از دانه بندی طراحی شوند تا امکان ترکیب را حداکثر نمایند.
2-2-6-11- سرویسها دارای استقلال داخلی اند.
استقلال داخلی کنترل سرویس را بر خودش و کلیه پردازشهایش امکان پذیر می کند و وابستگی به سرویسهای دیگر را که ممکن است موجب محدودیت شود، حذف می نماید. استقلال داخلی سرویس وقتی مهم است که بر روی چگونگی تقسیم منطق کار به سرویسها و عملیاتی که باید در زمینه یک سرویس گروه بندی شوند تصمیم گرفته می شوند. استقلال داخلی به معنای مالکیت کامل سرویس بر منطق درونش نیست بلکه تضمین می کند که در زمان اجرا سرویس بر هر منطقی که ارائه می دهد کنترل دارد.