گذرگاه سرویس سازمانی (Enterprise Service Bus or ESB) معماری ارتباطات بین برنامههای نرمافزاری (که با هم در تعاملند) در یک معماری مبتنی بر سرویس (Service-Oriented Architecture) را نمایش میدهد. به عبارتی برنامههای سازمانی را مستقل از ارائهدهنده، یکپارچه میکند. ESB یک معماری نرمافزار برای محاسبات توزیعشده و یک نمونهی خاص از مدل کلی client-server است که هر برنامهای به عنوان سرور یا کلاینت رفتار میکند. ESB باعث تقویت چابکی و انعطافپذیری میشود. در واقع مجموعهای از قوانین و اصول برای یکپارچهسازی برنامههای متعدد بر پایهي یک زیربنای شبه-گذرگاه میباشد.
در گذرگاه سرویس سازمان، گذرگاه به تقلید از گذرگاه موجود در سختافزار انتخاب شده است. سرویس نمایندهی برنامهی غیرپیمایشی و اجرای خودکار است که با دیگر سرویسها از طریق تبادل پیام در ارتباط است. استفاده از سازمان هم با هدف کاهش پیچیدگی یکپارچگی برنامههای سازمانی در یک سازمان بود ولی دیگر این محدودیت وجود ندارد ولی نام همچنان باقی مانده است. این ابزار به علت نیاز به مهاجرت از یکپارچگی نقطه به نقطه که با گذر زمان باعث دشواری مدیریت میشد و یک روش مرکزی برای مدیریت و رفع مشکل وجود نداشت، ایجاد شده است.
گذرگاه سرویس سازمانی به عنوان یک نرمافزار برنامههای سازمانی را به متصل میکند و ارتباط بین آنها را ممکن میسازد. ESB باید بتواند ارتباط مستقیم بین سرویسها را جایگذاری کند تا تمام ارتباطات از طریق گذرگاه صورت پذیرد. این کار را با مخفی کردن کارکرد برنامه به روش معناداری انجام میدهد. این کار را با استفاده از مدل پیام سازمانی انجام میدهد. این مدل مجموعهای از پیامهایی که ESB دریافت و ارسال میکند را توصیف میکند. زمانی که ESB یک پیام را دریافت میکند آن را به برنامهی درست ارسال میکند ولی آن برنامه این نوع پیام را نمیتواند پارس کند بنابراین باید به یک پیام قابل فهم برای آن برنامه تبدیل شود. این کار توسط آداپتور نرمافزاری انجام میشود. ESB ساختن مدل پیام سازمانی و تبدیل پیامها را به دقت انجام میدهد. چون اگر این کار به درستی انجام نشود عملکرد مورد نظر سرویس درخواست دهنده اجرا نمیشود و سرویس درخواستدهنده خود به صورت مستقیم اقدام به فراخوانی سرویس مدنظرش مینماید که این برخلاف اصول و مزایای این معماری میباشد. [1] در تبدیل پیامها هم ممکن است مشکلاتی پیش بیاید و برخی موارد به اشتباه تبدیل شوند در این میان نیاز به تستهایی برای بعد از تبدیل پیامها ضروری است.
ویژگیها و کارکرد هر یک [2]
استعلام: پشتیبانی از پروتکلهای انتقال همزمان و ناهمزمان، نگاشت سرویسها (پیدا کردن و متصل کردن)
مسیریابی: قابلیت آدرسدهی، مسیریابی ثابت / قطعی، مسیریابی مبتنی بر محتوا، مسیریابی مبتنی بر قوانین، مسیریابی مبتنی بر سیاست
پادرمیانی: آداپتورها، تبدیل پروتکلها، نگاشت سرویسها
پیام رسانی: پردازش پیام، تبدیل پیام و توسعه پیام
طراحی هماهنگی فرآیندها: اجرای فرایندهای پیچیده تجارت
ارکستراسیون سرویس: هماهنگی سرویسهای پیادهسازی متعدد که به عنوان یک سرویس واحد و تجمیع شده در معرض دید قرار دارند.
پردازش رویداد پیچیده: تفسیر رویداد، همبستگی، تطبیق الگو
کیفیت خدمات دیگر: امنیت (رمزگذاری و امضا)، تحویل قابل اعتماد، مدیریت تراکنش
مدیریت: نظارت، ممیزی، لاگ برداری، اندازهگیری، کنسول مدیریت، مدیریت فعالیتهای تجاری BAM (BAM یک توانایی مدیریت نیست به عبارت دیگر ESB به یک آستانه خاص واکنش نشان نمیدهد. این یک قابلیت خدمات تجاری است که برای کاربران نهایی ظاهر میشود).
مقید نبودن: مقید نبودن عمومی به سیستمعاملها و زبانهای برنامهنویسی. به عنوان مثال، باید قابلیت همکاری بین جاوا و برنامههای دات نت را فراهم آورد.
تبدیل پروتکل: پشتیبانی جامع از استانداردهای سرویس مربوط به پروتکلهای ارتباطی موضوعی
الگوهای تبادل پیام: پشتیبانی از چندین MEP (الگوهای تبادل پیام). به عنوان مثال: درخواست/پاسخ همزمان، درخواست/پاسخ ناهمزمان، ارسال و فراموش کردن، انتشار/اشتراک.
آداپتورها: آداپتورهای پشتیبانی از یکپارچگی با سیستمهای قدیمی، احتمالاً براساس استانداردهایی مانند JCA
امنیت: یک مدل امنیتی استاندارد برای اجازه دادن، احراز هویت و حسابرسی استفاده از ESB
دگرگونی: تسهیل دگرگونی قالبها و مقادیر دادهها به یکدیگر، از جمله سرویسهای دگرگونی (اغلب از طریق XSLT یا XQuery) بین قالبهای برنامه ارسال کننده و برنامه دریافت کننده
اعتبارسنجی: اعتبارسنجی در برابر اسکیماهای ارسال و دریافت پیام
حکمروایی: توانایی اعمال قوانین تجاری بهطور یکنواخت
غنیسازی: غنیسازی پیام از منابع دیگر
تقسیم و ادغام: تقسیم و ترکیب چندین پیام و مدیریت استثناها
انتزاع - مفهوم - برداشت: ارائه یک انتزاع واحد در چندین لایه
مسیریابی و تحول: مسیریابی یا تبدیل پیامها بهطور مشروط، براساس سیاست غیر متمرکز (بدون نیاز به موتور اصلی قوانین)
خدمات کالا: بستهبندی سرویسهای پرتقاضا به عنوان سرویسهای اشتراکی بسته به زمینه
ویژگیهای نامبرده بسیار جزئی هستند ولی برنامهنویسها به دنبال این همه جزئیات نیستند و از ESBهای سبکتر استفاده میکنند.
هدف از این معماری کشف یک مفهوم استاندارد، ساختیافته و عاممنظوره برای توصیف پیادهسازی کامپوننتهای نرمافزاری که با درجهی کمی بهم وابسته هستند (سرویسها) که انتظار میرود به صورت مستقل، ناهمگن و جدا از هم در یک شبکه دیپلوی و اجرا شوند. ESB یک الگوی پیادهسازی رایج برای معماریهای مبتنی بر سرویس نیز میباشد. [1]
یکی از ویژگیهای مهم ESB رفع وابستگی بین برنامهها میباشد. گذرگاه باعث جدایی برنامهها از یکدیگر میشود که این کار را همانطور که پیشتر گفتیم از طریق پیامرسانی انجام میدهد. پیامی که در کل ESB میچرخد یک فرمت ساده و ثابت (XMLی است) دارد. یک آداپتور برای تبدیل پیامها به پیامهای قابل فهم برای برنامهها وجود دارد. [2]
هیچ استاندارد جهانی برای مفهوم یا پیادهسازی ESB وجود ندارد. اکثر ارائهدهندگان میانافزارهای مبتنی بر پیام، ESB را به عنوان استاندارد معماری مبتنی بر سرویس پذیرفتهاند. پیادهسازی ESB مبتنی بر رخداد و مبتنی بر استانداردهای میانافزارهای مبتنی بر پیام در ترکیب با صفهای پیام میباشد. [1]
ابزارهای Integration Framework فقط برای پیادهسازی الگوهای یکپارچهسازی استاندارد برنامههای سازمانی (مانند Splitter و Content Base Routers) به کار برده میشوند. این الگوها دستورهای API دارند که باعث شفافیت و قابل فهم شدن یکپارچگی برنامهها میشوند. استفاده از این ابزار باعث خلاصهسازی فعالیتهای تیمی و افزایش احتمال موفقیت پروژه میشوند.
ابزارهای ESB کمی فراتر از Integration Framework ها هستند و قدرت و توان بیشتری دارند. Integration Framework پایههای ESB هستند. علاوه بر یکپارچهسازی کارهای دیپلویمنت، مدیریت و پایش در زمان اجرا را هم انجام میدهند. به علت داشتن UX راحت، باعث کاهش هزینه و رفع پیچیدگی میشوند.
ابزارهای Integration Suite ترکیبی از ESB و BPMS هستند. یکپارچهسازی کامل برنامهها را با فرآیندها را فراهم میکند.
یکی از دلایل استفاده از این ابزار نیاز سازمانهای به چابکی و کاهش زمان ارائه محصول است. ESB این امکان را با فراهم کردن یک سیستم ساده، قابل نصب، مقیاسپذیر و well-defined فراهم کرده است.
امکان ارسال پیام به فرمتهای XML و JSON، مناسب معماری میکروسرویسهای توزیعشده، تنظیمات جاوایی و XMLی، ابزارهای لازم برای تست [6]
پیچیدگی کم در استفاده و تنظیمات برای انتقال از ویندوز یا لینوکس، مستقل از پلتفرم، آپشنهای متنوع برای جمعآوری لاگها [7]
این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهیدبهشتی است.
[1] https://en.wikipedia.org/wiki/Enterprise_service_bus
[3] https://www.faragostar.net/what-is-esb/
[4] https://www.mulesoft.com/resources/esb/what-esb
[5] https://www.ibm.com/cloud/learn/esb
[6] https://www.g2.com/products/apache-camel/reviews#reviews