معرفی
تعاريف گوناگوني از معماري سرويس گرا ارائه شده است كه از جمله آنها مي توان به تعاريف زير اشاره كرد:
مجموعه قوانين ، سياستها و چهارچوبهايي كه نرم افزارها را قادر مي سازد تا عملكرد خود را از طريق مجموعه سرويسهاي مجزا و در عين حال مربوط به هم در اختيار ساير درخواست كنندگان قرار دهند تا بتوانند بدون اطلاع از نحوه پياده سازي و تنها از طريق رابطهاي استاندارد و تعريف شده ، این سرويسها را پيدا كرده و فراخواني نمايند.و یا معماری سرویس گرا روشي برای ساخت سیستمهای توزیع شده اي است که در آنها عملکرد سیستم بصورت سرویس در اختیار کاربران و یا سایر سرویسها قرار می گیرد.
از ديگرتعاريف ارائه شده مي توان به "واحدهاي نرم افزاري آماده در شبكه (Network-available Software Unit) " يا "سرويسهاي سطح حرفه (Business-level services) " اشاره كرد.
در حال حاضر ، تکنولوژی سرويسهاي وب(Web Services)  و پیاده سازی نمونه های موفق از آن، نشان داده است که SOA می تواند به عنوان راه حلی عملی و دست یافتنی در طراحی سیستمهای جدید و یکپارچه-سازی سیستمهای بزرگ موجود ، مطرح گردد. البته ذکر تفاوت سرويسهاي وب و SOA در اینجا لازم به نظر می رسد.
سرويسهاي وب  مجموعه ای از تکنولوژیهایی همچون XML,SOAP,WSDL و UDDI می باشد که امکان ارائه راه حل و برنامه نويسي جهت رفع مشکلی خاص را فراهم مي نمايد.
در حالی که SOA یک معماریست و از مجموعه مشخصی از تکنولوژیها فراتر مي باشد. اگرچه SOA بر اساس این تکنولوژیها راه حل ارائه می نماید ، اما در عین حال مستقل از هر یک از آنها است.
آنچه اهمیت دارد تعریف سرویس به عنوان مهمترین عنصر این معماری می باشد. 
سرویس ، رفتار قرادادی تعریف شده ایست که هر قطعه ای می تواند آنرا جهت استفاده سایر قطعات در سیستم تهیه و پیاده سازی نماید.
در این معماری ، همه توابع به عنوان سرویس تعریف می گردند. این توابع شامل توابع حرفه (Business functions)  و تراكنشهاي حرفهاي (Business transactions)می باشند كه تراكنشهاي حرفه خود شامل توابع سطح پايين (Low-level functions) و توابع سيستمي سرويسها(System service functions) هستند.
سرویسها بصورت مستقل طراحی و پیاده سازی شده و به عنوان جعبه سياه عمل می نمایند. قطعات دیگر در خارج از این قطعه نیازی به دانستن نحوه انجام کار در این سرویس را ندارند و تنها به نتیجه آن نیازمندند.
قطعات، سرویسهای خود را از طریق رابطها (interface) در اختیار قطعات دیگر قرار میدهند که این رابطها قابل دستیابی و فراخوانی هستند، بدون اینکه محل قرار گیری آنها اهمیت داشته باشد (رابطهاي محلي يا دور ) . در ضمن این رابطها می توانند به همان نرم افزار كاربردي  یا به آدرسی در محل دیگری از شبکه مرتبط باشند .
رابطها به عنوان کلیدی در برقراری این ارتباطها هستند و از طریق آنها نوع پارامترهای ورودی و نتایج (خروجی) مشخص می گردد.
بعلاوه ، با ایجاد قابلیت توزیع شدگی به شكلي مناسب و بدون وابستگی زیاد ، می توان سرویسها را در قسمتهای مختلف شبکه و بصورت بعضا تکراری ( مخصوصا برای سرویسهای مهم ) قرار داد تا این سرویسها همیشه در دسترس بوده و در صورت زیاد شدن درخواستها بتوان با استفاده از تکنیکهای Load Balancing به تمامي آنها بهخوبی پاسخ داد.
ویژگیهای سرویس و محاسبات سرویس گرا
محاسبات سرویس گرا (SOC) ، نمونه ای از محاسبات است که در آن طراحی و توسعه سیستم های کاربردی بر پايه سرویس به عنوان عنصر اساسی ، انجام می گیرد. سرویس ها عناصری هستند که مستقل از پلتفرم بوده و در ساخت سیستمهای توزیع شده سریع و ارزان قیمت کمک می نمایند. همچنین سازمانها را قادر می- سازند تا توابع خود را از طریق زبانها و پروتکلهای بر پایه XML پیاده سازی و بر روی اینترنت یا اینترانت ارائه نمایند.
از آنجا که سرویسها از طریق سازمانها و شرکتهای گوناگون تهیه می شوند و جهت دسترسي كاربران مختلف می بایست همواره در دسترس باشند ، رعایت ویژگیهای زیر ضروری می باشد:
- مستقل از تکنولوژی باشند؛ به این معنا که بکارگیری و مکانیزم فراخوانی و پیدا کردن سرویسها به راحتی و از تمام محیطها ( سیستمهای عامل مختلف و زبانهای برنامه سازی گوناگون ) میسر بوده و وابسته به پلتفرم خاصی نباشد.
- وابستگی بسیار پایینی بین درخواست کننده و ارائه دهنده سرویس وجود داشته باشد و یا بعبارتی Loosly Coupled باشد. به این معنا که درخواست کننده نباید هیچ نیازی به دانستن ساختار داخلی و نحوه پیاده سازی سرویس داشته باشد. برای این منظور ، فراخوانی سرویس از طریق بکار گیری مکانیزم پیغام (Message) بجای فراخوانی API انجام می گردد.
- درخواست کننده نباید نیازی به دانستن محل قرارگیری سرویس داشته باشد و بعبارتی معماری سرویس گرا می بایست Location Transparency  را پشتیبانی نماید. به این ترتیب که محل قرارگیری سرویس و مشخصات آن در مخزنی (Repository) قرار می گیرد و درخواست کننده ، محل و اطلاعات لازم را از طریق بازیابی آن از این مخزن بدست می آورد.
سرویس ها می توانند به دو شکل ساده و ترکیبی ارائه شوند. سرویسهای ترکیبی ، سرویسهایی هستند که بر اساس بکارگیری چند سرویس ساده ( یا ترکیبی) ایجاد می شوند. برای مثال ، ممکن است سیستم توزیع شده ای  بر اساس چند سرویس ساده صدور صورتحساب ، ثبت سفارش ، مدیریت روابط مشتری و ... سرویسهای ترکیبی گسترده تری در ارتباط با حرفه اي خاص ایجاد نماید.
سیستمهای ساخته شده بر اساس سرویس ، ترکیبی از سرویسهای مستقل هستند که عملکردهای خود را از طریق رابطهای تعریف شده ای در اختیار کاربران (بالقوه ) خود  قرار میدهند.  (Web Service Description Language)WSDL از جمله راههایی است که بطور گسترده برای تعریف این رابطها بکار می رود تا بوسیله آن جزئیات لازم برای اتصال درخواست کننده به ارائه دهنده سرویس تعریف شود.
نرم افزار بهعنوان سرویس
اصل ارائه شده " نرم افزار- بعنوان- سرویس" از محاسبات سرویس گرا ، بر اساس مدل ASP مطرح گشته است. ASP هویت سوم شخصیست که بكارگيري سرويسهاي نرم افزاري و دسترسی مشتری را به بسته نرم افزاری از طریق شبكه، مدیریت و میزبانی می نماید.بهعبارتی ASP ها راهی برای رفع نیازهای IT شرکتها از طریق واگذاری بخشي از این نيازها  یا تمامی آنها به بیرون از سازمان می باشند.
برای این منظور ASP با استفاده از زیر ساختهای خود ، ارتباط بین مشتری و نرم افزار ارائه شده را برقرار کرده و دسترسی وی به داده ها و توابع موجود را بصورت در دسترس (online)، مدیریت می نماید.
اگرچه نظریه "نرم افزار بعنوان سرویس" اولین بار توسط ASP ارائه شد ، اما مشكلات این روش باعث ایجاد کدهایی می شد که معمولا قابل استفاده مجدد نبوده و محدود به مشتری خاص می بود ، بعبارتی وابستگی زیادی بین سرویس ارائه شده و سیستم استفاده کننده بوجود می آمد.
معماری سرویس گرا اجازه میدهد تا نظریه "نرم افزار بعنوان سرویس"، گسترش یافته  تا از طریق آن بتوان پردازشها و تراکنشهای پیچیده را بعنوان سرویسهايی با قابلیت استفاده مجدد ارائه کرد و به این ترتیب سیستمها را مستقل از سرویسها طراحی و تولید نمود.
معماری سرویس گرای مقدماتی
SOA شیوه ای منطقی برای طراحی سیستمهای نرم افزاری است که از طریق آن سرویسهایی جهت ارائه به کاربران یا سایر سرویسهای توزیع شده بر روی شبکه ایجاد می شود و این سرویسها از طریق رابطهای تعریف شده در دسترس می باشند.
معماری سرویس گرای مقدماتی ، راهی برای تبادل اطلاعات بین عاملهای نرم افزاری بوسیله پیغام تعریف می نماید. این عاملها ، درخواست کننده سرویس (مشتری) و یا تهیه کننده سرویس می باشند. علاوه بر این دو، عامل دیگری بعنوان عامل کشف سرویس نیز وجود دارد. در معماری سرویس گرا معرفی سرویسها و همچنين نحوه ارتباط این سه شرکت کننده نیز اهمیت دارد. این ارتباطات عبارتند از : منتشر کردن سرویس ، پیدا کردن سرویس و متصل شدن به سرویس.

شکل 1 (براي مشاهده نماي بزرگتر، روي تصوير کليک کنيد)
در یک سناریو بر پایه سرویس ، تهیه کننده ، سرویس را پیاده سازی کرده و از طریق شبکه به ارائه توضیحات آن سرویس برای درخواست کننده یا عامل کشف سرویس می پردازد. در خواست کننده معمولا درخواست پیدا کردن سرویس را به عامل کشف سرویس میدهد تا از طریق آن به توضیحات ارائه شده سرویس و محل آن دسترسی پیدا کند. سپس با بکارگیری این اطلاعات به تهیه کننده سرویس متصل شده و از سرویس ارائه شده استفاده می نماید.
بدین ترتیب ، سرویس بعنوان قطعه نرم افزاری پیاده سازی شده ای که توسط یک رابط تعریف شده مستند گرديده است و نه تنها بوسیله خود تهیه کننده بلکه توسط سایر عواملی که از نحوه پیاده سازی آن خبر ندارند ، نیز قابل استفاده و فراخوانی است. این ویژگی جعبه سیاه بودن سرویس از اصل ماژولاریتی در مهندسی نرم افزار به ارث رسیده است. البته سرویس با تعاریفي مانند ماژول ، قطعه نرم افزاری یا شی تفاوت دارد ، زیرا نه تنها در سطح برنامه ها و نرم افزارهاي کاربردی ، بلکه در سطح حرفه و حتی مابین سازمانها نیز قابل بكارگيري و استفاده مجدد مي باشد.
در واقع سرویسها، نمایش عملکرد معنی داری از حرفه هستند که می توانند بنا به نیاز مشتری در سرویسها و توابع بزرگتر یا جدید بکار گرفته شوند.
رابطها به سادگی مکانیزمی جهت برقراری ارتباط بین سرویس و نرم افزارها یا سایر سرویسها ایجاد می نمایند. از لحاظ تکنیکی، رابط سرویسها ، توضیحاتی در مورد نام و امضاء متدهای یک سرویس هستند که توسط درخواست کننده ، قابل فراخوانی می باشند.
معماری سرویس گرای توسعه یافته
معماری سرویس گرای مقدماتی به برخی از مسائل موجود در یک معماری مبتنی بر سرویس نمی پردازد. از جمله این مسائل، مدیریت، هماهنگ سازی سرویسها ، متناسب کردن آنها ، امنیت ، مدیریت تراکنشها و ... می باشد.این نکات که در شکل 2 نمایش داده شده است ، در معماری سرویس گرای توسعه یافته در نظر گرفته شده است.

شکل 2 (براي مشاهده نماي بزرگتر، روي تصوير کليک کنيد)
معماری مقدماتی در لايه پاييني این معماری لایه ای قرار گرفته است. لایه ترکیب سرویس در معماری توسعه یافته ، شامل توابع و نقشهای لازم برای یکپارچه کردن چند سرویس بعنوان سرویس ترکیبی می باشد. سرویس ترکیبی بدست آمده ، توسط Service Aggregator بعنوان یک سرویس مقدماتی استفاده می گردد و یا توسط درخواست کنندگان سرویس بکارگرفته می شود.
Service Aggregator تهیه کننده سرویسی است که سرویسهای ارائه شده توسط سایر تهیه کنندگان را یکپارچه می نماید تا از آنها سرویسهای جدید بسازد، همچنین مشخصات و کدهایی را تهیه می کند تا در مورد سرویسهای ترکیبی عملیات زیر را انجام دهد:
- متناسب کردن : کنترل اجرای سرویسهای ترکیب شده و مدیریت گردش داده ها در بین آنها و انتقال آن به خروجی.
- کنترل کردن : مجوز دادن به رخدادها و اطلاعات تولید شده توسط سرویسهای ترکیبی جهت به اشتراک گذاشتن و منتشر کردن رخدادهای ترکیبی سطح بالاتر ( برای مثال از طریق فیلتر کردن و خلاصه سازی)
- مطابقت دادن : حصول اطمینان از حفظ جامعیت سرویسهای ترکیبی از طريق تطبیق دادن محدودیتها و نوع پارامترهای سرویسهای بکار رفته.
- ترکیب خواص سرویسها : بکارگیری ، مجتمع سازی و دسته بندی ویژگی هاي سرویسهای ترکیب شده جهت بدست آوردن خواص ترکیبی جدید که دربردارنده کارایی ، هزینه ، امنیت ، جامعیت ، قیاس پذیری ، در دسترس بودن و قابلیت اطمینان می باشد.
استانداردهای جدید ارائه شده با عنوان زبان اجرای پردازشهای حرفه برای سرویسهای وب ، تلاشی است که بر اساس XML ، تعریف سرویسهای وب جدید را که از ترکیب سرویسهای موجود بدست می آیند ، ارائه دهد.یک پردازش BPEL بصورت انتزاعي با ارجاع و اتصال به portTypeهای تعیین شده در WSDL اي ايجاد مي شود كه در سرویسهای وب موجود در یک پردازش ، تعريف شده است.
مدیریت نرم افزارهای کاربردی مهم و بحرانی تجارت الکترونیک ، مي بايست نظارت عمیق و جامعی در محیطهای توزیع شده داشته باشد. خارج از دسترس بودن یک عنصر کلیدی در سیستمهای توزیع شده، تاثیر منفی زیادی بر کل چرخه گذاشته و باعث بیرون رانده شدن ارائه کننده سرویس از بازار می شود.
برای رويارويي با چنین موقعیتهایی ، سازمانها نیاز به کنترل دائم سرویس و حصول اطمینان از سلامتی سیستم دارند. کارایی می بایست همیشه ، در هر شرایطی و با هر بار کاری ، در سطح قابل قبولی باشد.
برای مدیریت قسمتهای مهم و بحرانی و سرویسهای ویژه ، معماری توسعه یافته ، در لایه مدیریت سرویس بعنوان بالاترین سطح ، سرویسهای مدیریت شده را ارائه کرده است.
این لایه شامل دو قسمت مدیریت عملکرد و مدیریت بازار می باشد. کارکرد مدیریت عملکرد بدین صورت است که قسمتهای مهم سیستم را پشتیبانی می نماید. این لایه جزئیاتی از کارایی سیستم را جهت  ارزیابی آن ارائه میدهد و بدین صورت سازمان را قادر می سازد تا بر اساس وضعیت نرم افزار و تکمیل شدن تراکنشهای حرفه ، تصمیم گیری نماید. اپراتور سرویس ، مسئول انجام امور مربوط به این واحد است.
مدیریت عملکرد ، قابلیت بسیار مهم و کلیدی است که می تواند صحت و کارایی کلی سیستم را کنترل نماید و بدین ترتیب از بروز مشکلات شدید و خطا در سرویسها جلوگیری کند.
این خطاها ممکن است بر اثر اجتماع و هماهنگ سازی سرویسها و بخاطر عدم رعایت توافقهای در سطح سرویس (SLA) اتفاق بیافتد.
مدیریت و کنترلهای مناسب باعث کاهش احتمال بروز چنین خطاهایی می شود؛ بدین ترتیب که صحت ، پایداری و همچنين مناسب بودن ارتباط بین توابع بکار رفته در سرویسهای ورودی و خروجی را بررسی و کنترل می نماید.
قسمت دیگر در لایه مدیریت ، مدیریت بازار می باشد. مسئولیت این واحد ارائه پروتکلها و قوانین استاندارد در سطح حرفه می باشد تا از این طریق امکان استفاده از سرویسهای تعبیه شده در بازارهای مختلف بوجود آيد.
در ضمن برخی از تسهیلات و سرویسهای پایه برای امور مالی ، تضمین کیفیت و ... در این لایه قرار می گیرد تا از این طریق بازارهای مختلف بتوانند در کمترین زمان به سرویسها دسترسی یابند.
این قسمت از لایه مدیریت ، توسط سازندگان بازار که کنسرسیومی از شرکتهای فعال در این عرصه هستند ، کنترل و نگهداری می گردد.
درنهايت ، با توجه به نكات مذكور مي توان معماري سرويس گرا را روشي در جهت بهبود طراحي و استفاده از سيستمهاي نرم افزاري دانست ، اگرچه مشكلات و چالشهاي پيش روي آن همچنان نيازمند بررسي تجارب گذشته و نيز ارائه راه حل مناسب پيرامون مسائل مطرح در این معماري مي باشند.
منابع:
1- Channabasavaiah. Kishore, et al., Migrating to a service-oriented architecture, Part 1, IBM official web site, 16 December 2003.
2- Bieber .guy , Carpenter.Jeff , Introduction to Service-Oriented Programming , Motorola ISD , 2003
3- Zimmermann.Olaf, et al., Elements of Service Oriented Analysis and Design, IBM official web site, 2 June 2004.
4- Papazoglou Mike, Service-Oriented Computing :Concepts, Characteristics and Directions, Tilburg University ,  Proceeding of  the forth international conference on web information system engineering , IEEE , 2003
5- Hao Ding, Exploiting Extended Service-Oriented Architecture for Federated Digital Libraries, Information Management Group, Norwegian Univ. of  Sci.& Tech, 2004
6- Andrew Yang , Critical Infrastructure for Service-Oriented Architecture, Westbridge Technology ,2004
7- Mark Colan , Service-Oriented Architecture Expands the Vision of Web Services , Part 1 , IBM official web site , 21 April 2004