معرفی ESB (Enterprise Service Bus)

مقدمه:در این مقاله می خواهیم ESB که مخفف Enterprise Service Bus است را معرفی کنیم. ESB به معنای "گذرگاه سرویس سازمانی" است. به طور کلی کاربرد ESB این است که به یکپارچه سازی برنامه ها و خدمات متنوع در یک سازمان و همچنین توزیع کار بین اجزای متصل یک برنامه کمک می کند. ESB مجموعه ای از قوانین و اصول برای ادغام برنامه های کاربردی متعدد با هم بر روی یک گذرگاه است. در واقع می توان گفت که ESB یک نوع الگوی معماری است. ESB می تواند این ادغام ها و تبدیل ها را به عنوان یک رابط سرویس برای استفاده مجدد توسط برنامه های کاربردی جدید در دسترس قرار دهد. در ادامه به طور مفصل تر ESB را تشریح خواهیم کرد.توضیح ESB و کاربرد آن:فرض کنید چندین برنامه داریم که می خواهند با یکدیگر ارتباط برقرار کنند و از امکانات یکدیگر استفاده کنند. یکی از روش ها این است که هر برنامه آن یکی را صدا بزند. این باعث شلوغی و پیچیدگی سیستم می شود. اما به کمک ESB، یک گذرگاه میان سازمانی تعریف می شود که برنامه های مختلف روی آن گذرگاه قرار می گیرند و با یکدیگر یکپارچه می شوند. سپس هر برنامه قادر می شود که با آن گذرگاه صحبت کند. مصداق این جمله را در شکل زیر می بینیم:نمای کلی ESBهمانطور که در شکل فوق مشخص است، هر برنامه با یک پروتکل که با پروتکل برنامه های دیگر متفاوت است (HTTP یا MQ یا ...) به ESB متصل است. ساز و کار کلی ESB این گونه است که سرویس گیرنده ابتدا درخواست‌هایش را به ESB که یک نوع واسط است می زند (با پروتکل های مختلف). سپس ESB درخواست‌ها را به مسوول (سرویس) مربوطه ارجاع داده و پاسخ را از آن دریافت میکند. در نهایت پاسخ دریافتی را به سرویس گیرنده ای که درخواست زده تحویل می‌دهد.به این ترتیب سیستم‌ها را از یکدیگر جدا می‌شوند و به آن‌ها اجازه داده میشود تا بدون وابستگی یا آگاهی از سیستم‌های دیگر، در گذرگاه ارتباط برقرار کنند. به این ترتیب دیگر نیازی به یکپارچه سازی ارتباطات به صورت Point to Point یا 2 به 2 نیست. لازم به ذکر است که یکپارچه سازی به روش 2 به 2 معایبی دارد که از جمله این معایب می توان به عدم قادر بودن کنترل مرکزی و افزایش پیچیدگی اشاره کرد. شاید این سوال برای شما نیز پیش آمده باشد که ESB برای چه سازمان هایی مناسب است؟ در پاسخ باید بگوییم که ESB برای سازمان های بزرگی که خدمات و وب سرویس های متعدد و گوناگونی ارائه می کنند و یا زیرشاخه های متعددی دارند مناسب است. مثلا بانک ها نمونه ای از این سازمان ها هستند که خدمات متنوعی را ارائه می کنند. اگر این سازمان ها از ارائه این وب سرویس ها کسب درآمد نیز داشته باشند آن زمان است که استفاده از ESB حیاتی تر و نقش آن پررنگ تر هم می شود.اما کاربرد ESB چیست؟ فرض کنید که یک سازمان چند وب سرویس مختلف با پروتکل ها و قالب های مختلف ارائه می دهد. دو مفهوم سرویس دهنده و سرویس گیرنده داریم که همانطور که از آن ها مشخص است، اولی یک سری خدمات و سرویس ها و اطلاعات ارائه می کند و دومی یا همان سرویس گیرنده هم از این خدمات یا اطلاعات استفاده می کند. توجه داشته باشید که سرویس گیرندگان هم می توانند داخل سازمان باشند و هم می توانند خارج از سازمان باشند. در این جا ESB به عنوان یک واسط بین وب سرویس های سازمان و سرویس گیرندگان قرار می گیرد و مزایای زیادی را به همراه می آورد. توجه داشته باشید که طیف گشترده ای از سرویس دهندگان و سرویس گیرندگان می توانند از ESB استفاده کنند:اتصال سرویس گیرندگان و سرویس دهندگان به ESBهمانطور که مشخص است، سرویس دهندگان و سرویس گیرندگان با انواع مختلفی به ESB وصل شده اند.معماری ESB یکی از کلیدی ترین اجزا در معماری سرویس گرا است و ترکیب این دو با هم نتیجه مطلوبی خواهد داشت و این دو می توانند مکمل خوبی برای هم باشند. از ESB در معماری سرویس گرا برای یکپارچه سازی استفاده می شود. از مزایای ESB می توان به موارد زیر اشاره کرد: سهولت ارتباطات: به کمک ESB در یک سازمان، ارتباطات تسهیل می شود، چرا که دیگر ارتباط 2 به 2 نداریم و سرویس گیرندگان درگیر پیچیدگی های یکپارچه سازی نمی شوند. آن ها با یکدیگر ارتباط برقرار می کنند اما نه از طریق صدا زدن مستقیم یکدیگر، بلکه از طریق ESB. همچنین وقتی یک وب سرویس تغییری در فرمت داده های خود می دهد نیازی نیست تا سایر سرویس ها در خوشان تغییری ایجاد کنند.تبدیل پروتکل های مختلف به یکدیگر: هنگامی که از ESB استفاده می کنیم میتوانیم به راحتی پروتکل های مختلف (مانند Rest و Soap) را به یکدیگر تبدیل کنیم. این نکته زمانی به چشم می آید که وب سرویس های مختلف با زبان های مختلفی نوشته شده باشند که هر کدام با پروتکل خاصی کار می کنند. آن زمان است ESB به کار می آید و در دل خود پروتکل ها را به یکدیگر تبدیل می کند.افزایش انعطاف پذیری: اضافه و کم کردن و تغییر سرویس ها در طول حیات نرم افزار به کمک ESB راحت تر خواهد بود. افزایش امنیت: وقتی از ESB استفاده می کنیم می توانیم به صورت دقیق رخداد هایی که در سیستم اتفاق افتاده است را رصد کنیم. همچنین هر کدام از سرویس ها احراز هویت شده اند و اگر ببینیم سرویس دارد خارج از چارجوب قوانین عمل می کند مدیریتش کنیم.امکان توزیع بار: به کمک ESB می توانیم Load Balancing انجام بدهیم و منابع را بنا به نیاز میان سرویس های مختلف پخش و مدیریت کنیم. مثلا اگر یک سرویس خیلی کم استفاده می شود منابعش را به سرویس که زیاد استفاده می شود بدهیم.در کنار مزایای ذکر شده، ESB معایبی نیز دارد که از جمله مهم ترین معایب ESB می توانیم به Single Point Of Failure بودن آن اشاره کنیم. این به این معنی است که اگر خطایی در دل ESB رخ دهد، همه سرویس دهندگان و حتی سرویس گیرندگان نیز دچار مشکل خواهند شد چرا که ارتباطات آن ها صرفا از طریق ESB بوده است.توجه داشته باشید که ESB یک Orchestrator نیست و منطق فرآیند ها و چیز هایی از جمله ترتیب صدا زدن ها در آن انجام نمی شود، بلکه ESB فقط یک لایه انتزاعی است و شامل منطق های کسب و کار نیست. این موارد به کمک تکنولوژی هایی مانند BPEL یا BPM انجام می پذیرد که می توان آن ها را به کمک ESB استفاده کرد. اما به کمک این ابزار های می توان روش های یکپارچه سازی ای که مد نظر داریم را انجام دهیم، (در واقع عملکرد اصلی این ابزار ها یکپارچه سازی است). جزییات روش های یکپارچه سازی را می توانید در این لینک ببینید. در ادامه با چند مورد از این ابزار ها آشنا می شویم.ابزار ها و فناوری های متن باز ESB:ابزار هایی مانند MuleSoft و WSO2 ابزار های معروف در حوزه ESB هستند که به کمک آن ها میتوان کارهای مختلفی از جمله: مسیریابی پیام ها، زمان بندی، توزیع بار، Logging، یکپارچه سازی و ... را انجام داد. به عنوان مثال در ابزار WSO2 میتوان REST API های جدید ساخت و یا API های از پیش نوشته شده را Import کرد. ( همچنین تکنولوژی های SOAP و GraphQL و WebSocket هم توسط این ابزار پشتیبانی میشود). سپس میتوان سایر افراد را تعریف و دعوت کرد و برای API ها یک Documentation نوشت. امکانات و مزایا و معایب هر کدام از ابزار های مذکور را با هم بررسی می کنیم:ابزار WSO2:شرکت WSO2 خدمات متنوعی را ارائه می کند که یکی از آن ها ESB مربوط به این شرکت است. شکل زیر صفحه اصلی این وبسایت در این لینک را نشان می دهد:سایت WSO2همانطور که مشاهده می شود در منوی این سایت گزینه ای وجود دارد به نام Enterprise Service Bus. وقتی جزییات آن را باز کنیم می بینیم که لینک دانلود این ابزار را قرار داده است. از مزایای این ابزار می توان به موارد زیر اشاره کرد:پشتیبانی از پروتکل های مختلفی مانند: HTTP و HTTPS و WebSocket و POP و IMAP و SMTP و ...پشتیبانی از فرمت های داده مختلف مانند: JSON و XML و SOAP و EDIFACT و FHIR و ISO 8583 و FIX.امکان اتصال هر نوع پایگاه داده ای به هر جنسی به آن به عنوان یک سرویس.امکان رصد و مانیتور کردن سرویس ها.مسیریابی پیشرفته براساس انواع پارامتر ها.تبدیل پیام ها با XSLT 1.0/2.0، XPath، XQuery و Smooks.و ...ابزار MuleSoft:شرکت MuleSoft نرم افزار یکپارچه سازی را برای اتصال برنامه ها، داده ها و دستگاه ها ارائه می دهد. این شرکت نیز ESB مختص خودش را دارید که در سایت آن و در این قسمت از منو قابل نمایش است:سایت MuleSoftبرخی از مزایای MuleSoft:جدا کردن منطق کسب و کار از پروتکل ها و فرمت های پیام.امکان تقسیم و فیلتر پیام‌ها بر اساس محتوا یا قوانین آن‌ها.امکان تبدیل و انتقال داده‌ها به هر قالبی در پروتکل‌های مختلف.و ...استفاده از این پلتفرم ها مزایای زیادی برای سازمان ها دارد و این سکو ها ارتباط مهندسان نرم افزار و سرویس ها و برنامه های با پلتفرم های مختلف و تعریف جریان های کاری را بر بستر اینترنت راحت تر کرده است.اما این ابزار ها معایبی نیز دارند، به عنوان مثال اگر اطلاعات مربوط به یکی از سازمان ها به سرقت برده شود آنگاه اطلاعات سایر شرکت های مرتبط نیز به خطر خواهد افتاد.برای انتخاب یک سکوی یکپارچه سازی باید فاکتور هایی مانند هزینه، امنیت، مقیاس پذیری، قابلیت استفاده و ظرفیت را در نظر گرفت. این پلتفرم ها معمولا رایگان نیستند و باید با توجه به ROI سازمان سنجید که استفاده از آن ها به صرفه است یا خیر. امنیت پلتفرمی که انتخاب میکنیم بسیار مهم است و اگر اطلاعات حیاتی در سازمان وجود دارد نباید از هر پلتفرمی استفاده کرد. بستری که انتخاب میشود باید قادر باشد تا به سرعت مقیاس یابند و کارآیی نباید قربانی وجود این پلتفرم ها در این اکوسیستم شود. پلتفرم انتخاب شده باید ساده و قابل استفاده باشد و پیچیدگی زیادی اضافه نکند و سریع بالا بیایند. این ابزار باید گنجایش داده زیاد را داشته باشد.شرکت های ایرانی ارائه دهنده خدمات در حوزه ESB:شرکت های مختلفی در ایران خدمات مرتبط با ESB ارائه می کنند که از جمله آن ها می توان به شرکت پلتکو و شرکت داده پرداز پویای شریف اشاره کرد. شرکت پلتکو یک شرکت دانش بنیان است که خدماتی از جمله ESB و ابزار های مدیریت API را ارائه می کند. پلتکو درباره پلتفرم خود در سایتش چنین نوشته است:شرکت داده کاوان تصمیم یار خدمات مختلف نرم افزاری ارائه می‌دهد که یکی از آنها “پلتکو” نام دارد که “پلتفرم یکپارچه سازی و مدیریت وب سرویس” می‌باشد.وبسایت شرکت پلتکو در این لینک موجود است.شرکت داده پرداز پویای شریف نیز یک شرکت دانش بنیان ارائه دهنده راهکار های جاممع تخصصی تحت وب و موبایل است. این شرکت درباره ESB ای که ارائهمی دهد در سایتش چنین نوشته است:پلتفرم ESB داده پرداز یکی از بهترین راهکارها برای یکپارچه سازی انواع سرویس‌ها در سازمان‌های بزرگ و مدیریت نمودن جریان اطلاعات در آنهاست. پلتفرم ESB داده‌پرداز محصولی دانش‌بنیان است که تا به امروز در سامانه‌های بزرگی همچون سامانه فروش بلیط بن ریل، اپلیکیشن خدمت در محل همراه یار، پرتال دولت الکترونیک و ... به کاربرده شده و ویژگی اصلی آن، توانایی برقراری ارتباط با ماکروسرویس‌های بزرگ و برقراری جریان امنیت اطلاعات و مدیریت آنهاست. وبسایت شرکت داده پرداز در این لینک موجود است.جمع بندی:گذرگاه سرویس سازمان یا به اختصار ESB یک تکنولوژی برای یکپارچه سازی برنامه های کاربردی است. استفاده از ESB مزایا و معایب زیادی را به همراه دارد که با توجه به مزایا و معایب آن پیشنهاد می شود که سیستم های وب سرویس های بسیار متنوع دارند و یا دارای چندین زیرمجموعه هستند از آن استفاده کنند. اما نکته ای که بسیاری از منابع از جمله این لینک به آن اشاره کرده اند این است که ESB در 5 الی 10 سال آینده رو به افول است. این امر نیز به دلیل پیدایش میکروسرویس ها است که از تکنولوژی های به روز تری استفاده می کنند. البته رو به افول بودن به این معنی نیست که به کلی از آن استفاده نشود، بلکه به این معنی است که استفاده از آن نسبت به گذشته کمتر خواهد بود.منابع:[1] وبسایت https://searchapparchitecture.techtarget.com/definition/Enterprise-Service-Bus-ESB[2] وبسایت https://www.mulesoft.com/resources/esb/what-esb[3] وبسایت https://en.wikipedia.org/wiki/Enterprise_service_bus[4] وبسایت https://wso2.com/what-is-an-esb[5] وبسایت https://www.faragostar.net/what-is-esb[6] وبسایت https://platco.ir/services/integration-web-services/enterprise-service-bus[7] وبسایت https://www.cetrixcloudservices.com/blog/enterprise-integration-pros-and-cons-of-enterprise-service-bus[8] وبسایت https://www.ibm.com/cloud/learn/esb[9] وبسایت https://www.it.ucla.edu/news/what-esb[10] وبسایت https://dzone.com/articles/is-enterprise-service-bus-esb-obsolete-after-microاین مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است#معماری_نرم_افزار_بهشتی