{"id":658,"date":"2016-04-19T19:39:19","date_gmt":"2016-04-19T19:39:19","guid":{"rendered":"http:\/\/adriangrigoras.com\/blog\/?p=658"},"modified":"2016-04-19T19:39:19","modified_gmt":"2016-04-19T19:39:19","slug":"esb-esb","status":"publish","type":"post","link":"https:\/\/adriangrigoras.com\/blog\/esb-esb\/","title":{"rendered":"To ESB or not to ESB"},"content":{"rendered":"<p>Many of us have had to ponder this question. Technology selection is notoriously difficult in the enterprise space since the criteria and complexity of the problem is often not fully understood until later in the development process.<span id=\"more-819\"><\/span><br \/>\nThere is an interesting post from ThoughtWorker Erik D\u00f6rnenburg with the unfortunate title \u201c<a href=\"http:\/\/erik.doernenburg.com\/2009\/07\/making-esb-pain-visible\/\">Making the ESB pain Visible<\/a>\u201d. Erik provides a real-world example of when not to use an <a title=\"Mule ESB\" href=\"http:\/\/www.mulesoft.com\/platform\/soa\/mule-esb-open-source-esb\" target=\"_blank\">ESB<\/a> citing that \u2013<\/p>\n<blockquote><p>\u201cBased on conversations with the project sponsors I began to suspect that at least the introduction of the ESB was a case of RDD, ie. Resume-Driven Development, development in which key choices are made with only one question in mind: how good does it look on my CV? Talking to the developers I learned that the ESB had introduced \u201cnothing but pain.\u201d But how could something as simple as the architecture in the above diagram cause such pain to the developers? Was this really another case of architect\u2019s dream, developer\u2019s nightmare?\u201d<\/p><\/blockquote>\n<p>Later, Erik quite rightly points out that an <a href=\"http:\/\/www.mulesoft.com\/mule-esb-open-source-esb\">ESB<\/a> architecture\u00a0should not have been used in this scenario. This is a fairly common problem for ESBs and enterprise technology like BPM\/BPEL where the technology is not chosen for the right reasons and then the technology gets blamed when the project struggles. Given that much of the enterprise software disillusionment today stems from the incorrect usage of the technology I thought I\u2019d offer some rough guidelines for selecting an ESB architecture.<\/p>\n<h3>ESB selection checklist<\/h3>\n<p>Mule and other ESBs offer real value in scenarios where there are at least a few integration points or at least 3 applications to integrate. They are also well suited to scenarios where loose coupling, scalability and robustness are required.<br \/>\nHere is a quick ESB selection checklist \u2013<\/p>\n<ol>\n<li>Are you integrating 3 or more applications\/services? If you only need to communicate between 2 applications, using point-to-point integration is going to be easier.<\/li>\n<li>Will you really need to plug in more applications in the future? Try and avoid YNNI in your architecture. It\u2019s better to keep things simple re-architect later if needed.<\/li>\n<li>Do you need to use more than one type of communication protocol? If you are just using HTTP\/Web Services or just JMS, you\u2019re not going to get any of the benefits if cross protocol messaging and transformation that Mule provides.<\/li>\n<li>Do you need message routing capabilities such as forking and aggregating message flows, or content-based routing? Many applications do not need these capabilities.<\/li>\n<li>Do you need to publish services for consumption by other applications? This is a good fit for Mule as it provides a robust and scalable service container, but in Erik\u2019s use case all they needed was an HTTP client from their front-end Struts application.<\/li>\n<li>Do you have more than 10 applications to integrate? Avoid big-bang projects and consider breaking the project down in to smaller parts. Pilot your architecture on just 3 or 4 systems first and iron out any wrinkles before impacting other systems.<\/li>\n<li>Do you really need the scalability of an ESB? It\u2019s very easy to over-architect scalability requirements of an application. Mule scales down as well as up making it a popular choice for \u2018building in\u2019 scalability. However, there is a price to be paid for this since you are adding a new technology to the architecture.<\/li>\n<li>Do you understand exactly what you want to achieve with your architecture? Vendors often draw an ESB as a box in the middle with lots of applications hanging off it. In reality, it does not work like that. There is a lot details that need to be understood first around the integration points, protocols, data formats, IT infrastructure, security etc. Starting small helps to keep the scope of the problem manageable and keep the fuckupery to a minimum. Until you understand your architecture and scope it properly you can\u2019t really make a decision as to whether an ESB is right for you.<\/li>\n<li>Generally, always validate a product solution for your needs. Don\u2019t choose an ESB or any other technology because \u2013\n<ul>\n<li>It will look good on my resume<\/li>\n<li>I don\u2019t need the features today but there is a remote chance that I _might_ in future<\/li>\n<li>I had a great golfing weekend with the head of sales<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>This checklist is not exhaustive, but will help clarify when not to use an ESB. Once you have decided that an ESB is a good fit for your project you\u2019ll want to add additional selection criteria such as connectivity options, robustness, error management, service repository, performance, data support, etc. The important thing to remember is that there is no silver bullet for good architecture and you need to know your architecture before making a technology decision.<\/p>\n<p>With this checklist in mind it\u2019s easy to see that <a href=\"http:\/\/erik.doernenburg.com\/2009\/07\/making-esb-pain-visible\/\">Erik\u2019s example<\/a> never needed an ESB architecture in the first place.<\/p>\n<p><a href=\"http:\/\/erik.doernenburg.com\/wp-content\/uploads\/2009\/06\/high-level-esb.png\"><img decoding=\"async\" src=\"http:\/\/erik.doernenburg.com\/wp-content\/uploads\/2009\/06\/high-level-esb.png\" alt=\"\" border=\"0\" \/><\/a><\/p>\n<p>However, if the architecture looked something more like this, then an ESB would have probably been a good fit.<\/p>\n<p><a href=\"http:\/\/1.bp.blogspot.com\/_1J_NEXtTKV0\/Sk4Qh1A1PfI\/AAAAAAAAAK8\/4nt5zhWlb7o\/s1600-h\/To-ESB.png\"><img decoding=\"async\" src=\"http:\/\/1.bp.blogspot.com\/_1J_NEXtTKV0\/Sk4Qh1A1PfI\/AAAAAAAAAK8\/4nt5zhWlb7o\/s400\/To-ESB.png\" alt=\"\" border=\"0\" \/><\/a><\/p>\n<h2>Choosing Mule<\/h2>\n<p>Obviously, as the creator of <a href=\"http:\/\/mulesource.org\/\">Mule<\/a> I have some bias for wanting everyone to use Mule. However, it is critical to the continued success of the Mule project and to <a href=\"http:\/\/mulesource.com\/\">MuleSource<\/a> that users understand when not to use an ESB architecture. Open source makes a lot of sense for enterprise software because projects need time to try out the technology and refine their proposed architecture. Having access to the product and source code helps a huge amount in this discovery process and allows the customer to make an informed decision.<\/p>\n<p>In fact the MuleSource adoption model hinges on the ability of the user to self-select Mule and approach us only when they need enterprise capabilities or \u00a0support. <a href=\"http:\/\/www.marketwire.com\/press-release\/Mulesource-1001152.html\">This has been working very well<\/a> for everyone involved. Customers get to do a proof of concept (PoC) with our product knowing that if they end up using it for a mission critical application that they can get enterprise 24\u00d77 support. For MuleSource it means that we enable our customers buy from us rather than us selling to them, so they always get what they want \u2013 this is a far cry from the old proprietary upfront license model that used to hold the enterprise market hostage.<\/p>\n<p>Source:\u00a0mulesoft.com<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Many of us have had to ponder this question. Technology selection is notoriously difficult in the enterprise space since the criteria and complexity of the problem is often not fully understood until later in the development process. There is an interesting post from ThoughtWorker Erik D\u00f6rnenburg with the unfortunate title \u201cMaking the ESB pain Visible\u201d.\u2026 <span class=\"read-more\"><a href=\"https:\/\/adriangrigoras.com\/blog\/esb-esb\/\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[30],"tags":[],"class_list":["post-658","post","type-post","status-publish","format-standard","hentry","category-architecture"],"_links":{"self":[{"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/posts\/658","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/comments?post=658"}],"version-history":[{"count":1,"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/posts\/658\/revisions"}],"predecessor-version":[{"id":659,"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/posts\/658\/revisions\/659"}],"wp:attachment":[{"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/media?parent=658"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/categories?post=658"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/tags?post=658"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}