ESB (Enterprise Service Bus)

ESBمقدمهگذرگاه سرویس سازمانی (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] سطوح گذرگاه‌ه سرویس سازمانی [2] Integration Framework:ابزارهای Integration Framework فقط برای پیاده‌سازی الگوهای یکپارچه‌سازی‌ استاندارد برنامه‌های سازمانی (مانند Splitter و Content Base Routers) به کار برده می‌شوند. این الگوها دستورهای API دارند که باعث شفافیت و قابل فهم شدن یکپارچگی برنامه‌ها می‌شوند. استفاده از این ابزار باعث خلاصه‌سازی فعالیت‌های تیمی و افزایش احتمال موفقیت پروژه می‌شوند.ESB:ابزارهای ESB کمی فراتر از Integration Framework ها هستند و قدرت و توان بیشتری دارند. Integration Framework پایه‌های ESB هستند. علاوه بر یکپارچه‌سازی کارهای دیپلویمنت، مدیریت و پایش در زمان اجرا را هم انجام می‌دهند. به علت داشتن UX راحت، باعث کاهش هزینه و رفع پیچیدگی می‌شوند.Integration Suite:ابزارهای Integration Suite ترکیبی از ESB و BPMS هستند. یکپارچه‌سازی کامل برنامه‌ها را با فرآیندها را فراهم می‌کند.کارکرد انتقال پیام‌ها بین سرویس‌هاپایش و کنترل مسیریابی تبادل پیام‌ها بین سرویس‌هاحل اختلاف بین کامپوننت‌های سرویس‌های در ارتباطکنترل دیپلویمنت و نسخه‌بندی سرویس‌هاکنترل استفاده از سرویس‌های تکراریتامین سرویس‌هایی مانند مدیریت رخداد‌ها، تبدیل و نگاشت داده‌ها، صف‌بندی پیام‌ها و رخدادها، مدیریت امنیت و اکسپشن‌ها، تبدیل پروتکل و تحمیل کیفیت مناسب ارتباط سرویس‌هایکی از دلایل استفاده از این ابزار نیاز سازمان‌های به چابکی و کاهش زمان ارائه محصول است. ESB این امکان را با فراهم کردن یک سیستم ساده، قابل نصب، مقیاس‌پذیر و well-defined فراهم کرده است.مزایا سادگی ارتباط، پیام‌رسانی و یکپارچگی بین سرویس‌های سازمانیمقیاس‌پذیریافزایش تنظیم کردن به نسبت کد زدنتمرکز بر تقویت برنامه‌ها به جای تمرکز بر کد زدن برای یکپارچه‌سازی برنامه‌هاامکان باز استفاده از این ابزار یکپارچه‌سازی برخلاف یکپارچه‌سازی از طریق کدنویسیاز بین بردن وابستگی بین برنامه‌هاموتور قوانین و بروکر مرکزی نداردراحتی نصب و حذفمناسب برای میکروسرویس‌هامعایبسرعت ارتباطات کاهش می‌یابدsingle point of failureنیازمند تنظیمات زیاد و پیچیدگی نگهداریتاثیر بر ارتباطات سرویس‌های دیگر در نتیجه نیاز به تستافزایش پیچیدگی با افزایش تعداد سرویس‌هاانواع پلتفرم‌های ESBسبک:‌ حجم کم، هزینه‌ی کم اعمال تغییرات، زمان و سرعت زیادنه فقط میانجی‌گرییادگیری آسانمقیاس‌پذیریپیام آگنوستیک:‌ امکان تغییر نوع پیام‌ها (برای مثال فقط XML نباشد)مبتنی بر ابرمعرفی ابزارها و فناوریهای متن‌بازApache Camelامکان ارسال پیام به فرمت‌های XML و JSON، مناسب معماری میکروسرویس‌های توزیع‌شده، تنظیمات جاوایی و XMLی، ابزارهای لازم برای تست [6]Beatsپیچیدگی کم در استفاده و تنظیمات برای انتقال از ویندوز یا لینوکس، مستقل از پلتفرم، آپشن‌های متنوع برای جمع‌آوری لاگ‌ها [7]این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است.مراجع[1] https://en.wikipedia.org/wiki/Enterprise_service_bus[2] https://fa.wikipedia.org/wiki/%DA%AF%D8%B0%D8%B1%DA%AF%D8%A7%D9%87_%D8%B3%D8%B1%D9%88%DB%8C%D8%B3_%D8%B3%D8%A7%D8%B2%D9%85%D8%A7%D9%86%DB%8C[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[7] https://www.g2.com/products/beats/reviews#reviews