Open source middleware: is Mule ESB the Next Big Thing?
Some of you may or may not know that I have been busy with a Mule ESB implementation last year. Partly because I had some time in which I could help a client and partly because it never hurts to dive into a new technology and see for yourself what it’s like. It never hurts to know what else is on the market, especially in open-source-land.
Contents
Getting lost in an open source world
My journey last year started with examining open source middleware solutions and finding the best one for my client. They wanted to go open source, so BizTalk, Tibco, IBM and Oracle were no option. I used Gartner’s Magic Quadrant for On-Premises Application Integration Suites to find the solutions to compare. I ended up comparing Mule, Red Hat, Talend and WSO2.
I spent evening on evening getting the tools to work. I haven’t had so much problems installing things, since the first time I tried to install Linux back in the 90s. Which platform should I choose? Red Hat? Fedora? Ubuntu? And what do all those abbreviations mean? I ended up in exactly the same mess installing these middleware solutions, mainly because it lacks documentation.
As an application platform you can either use JBOSS. Or you can use Tomcat. Or Apache. Or some kind of distribution of Apache. But you’ll first need to install Java 1.7, or 1.8, make sure you manually change the PATHs. Then you’ll need to setup Maven, to deploy stuff. Or maybe you don’t need to setup Maven and just go with a different framework. Uhm… it’s too much for this closed (but more and more open) Microsoft fellow 🙂
It soon became clear that the best open source solution out there was Mule. It wasn’t the cheapest, but it appeared to be the one the farthest down the road when it comes to installing, development and maintenance. It works with Eclipse and comes with a workflow tool, a visual mapper and a portal to maintain your runtime environment. It’s also a “one click” install (just download, unpack and start). So the client went for Mule. Little did I know.
Mule ESB
MuleSoft is putting out ads like there’s no tomorrow. It’s everywhere. They are writing blogs almost stating that there’s no better middleware solution than Mule ESB. I have experienced it first hand and let me start by saying that
Mulesoft themselves may think Mule is the Next Big Thing, I am afraid it may cause a wave of problems for companies once down the road.
It’s quite a bold statement and I must admit I am looking through a Microsoft looking glass. There are things I really like about Mule and there are quite a few things I really don’t like. My biggest concern isn’t about developing in Mule, on the contrary, that’s all fairly OK. Runtime, that’s my concern. Mule has done a good job when it comes to development, but if it wants to play in the big league, it has a long way to go when it comes to runtime.
It’s almost impossible to find out what’s going wrong in a flow without opening numerous logfiles and don’t even think of resuming a flow if a dependent system is down. Closing single ports/connectors isn’t possible and if a system changes its IP address, you need to redeploy your solution.
Pricing
Why is Mule so mysterious about their licensing fees and licensing model? Why can’t they just publish ‘m up on their website, just an indicating what it will cost? Just like Microsoft does with BizTalk. I think it’s quite suspicious. A company that uses an open source platform and is not quite that open when it comes to money.
Since Mule will adjust quotes based on, uhm, nobody knows, I will try and give you an idea how it works. Mule uses a subscription based fee. That means you will pay a fee every year for the use of Mule ESB. You get a license key, which you will be loading into your system every year. And you pay a fee for every environment, be it production, acceptance, test or development. Production being the most expensive, and you can always go for a free community edition for development.
All and all you are probably looking at a $20,000+* annual license fee for a single production environment (4 cores, 8 GB RAM) and little over $10,000 a year for other environments (ACC, TST). Add it up and you are looking at about $40,000 a year – for a company in the public sector by the way. So if you consider that BizTalk has a $40,000 one-time fee (and that’s around $16,000 for companies in the public sector, like hospitals or schools), you may want to reconsider the general thought that open source is cheap. Even if you add probably around $25,000 for SQL Server, BizTalk will still be cheaper if you’re not planning to upgrade within two years.
* This is the number I’ve got from Mule for a company in the public sector. Since they are not transparent about their licensing fees, it’s impossible to tell whether the fees differ per sector or maybe per company.
Documentation
I have my doubts when it comes to Mule’s documentation. I am always trying to find stuff that can’t be found. And if there is an example, please offer examples I can actually use. It resulted in a lot of trial-and-error programming. Also server installation documentation is lacking. A walk-through about installing Mule ESB and best practices would be very helpful!
And books? There are exactly two (or maybe three) books on the market. Both books only handle the basics. “Mule ESB Cookbook” was useless to me. Most of the stuff in there were so basic they should have called it “Mule ESB for dummies”. The other one “Mule in Action” is much better, but still handles the basics and wasn’t much help to me once I started developing.
Anyone claiming that BizTalk documentation is lacking, should really reconsider. Microsoft provides us with extensive documentation and an Installation Guide. Besides that, BizTalk has a strong community publishing articles, videos and organizing numerous events.
The not so big community
Mulesoft claims to have a big and active community backing the company. The truth is that it’s not quite that big. And I can easily proof it. If my blog posts are ending up on the first page of search results on Google, I either have a tremendously good nose for SEO or – and this is my guess – the community isn’t that big really!
I have come across numerous problems I couldn’t find a solution for. The easiest of problems can’t be solved with Mule’s documentation and there’s no blogpost about it? Good luck with that one! Hopefully my few posts can help you along the road 🙂
Development
Mulesoft uses Eclipse for its development environment and calls it Anypoint Studio. I like the openess of Eclipse, the ability you can plug nearly anything into the environment. But I really don’t like working with Eclipse itself. It has become more and more bloated over the years and has a look and feel to I really don’t like. It just throws you back to the Windows NT era. There’s a reason why Android developers rather work with ItelliJ.
Mule is offered in a download, bundled with Eclipse. You unzip the download and can start working in Mule instantly. That’s really fantastic! (and I am not kidding this time). OK, the only thing you need to take care of is getting the right Java JDE in place, but haven’t we done that more than once in our lifetime?
Debugging
Another thing I really like about Mule is the debugging capability. You don’t need to go through a deployment process. Eclipse will start an instance of Mule ESB Server and you can instantly test and debug your solution. It’s great and really helps speed up the development process.
The Visual Mapper
Render it useless. You can use it for mapping a few fields that are on the same level. When it becomes just a little bit harder, or nodes are on different levels, you can’t use the mapper anymore. I also ended up having to recreate my map several times, e.g. when I replaced the source or target object. There’s no way of mapping EDI, HL7 or other more advanced standards and don’t even think of calling managed code from the mapper. It’s just impossible. No, in the end everybody ends up using Java to transform their payload.
Mapping in Java works pretty well in Mule and is a good alternative. So what’s my biggest problem here? The visual mapper is an enterprise feature and it’s useless.
Flows
Developing flows is pretty easy. It’s just like every other “drag-and-drop” development tool, just drag shapes onto a canvas. Mule uses XML to store the flows, which makes it easy to go into the code and do some stuff. And believe me, you will have to go in there more than once if you are developing for Mule. Not everything is supported by the flow designer and has to be done in the XML source. If you want to use Spring features, you will end up in the XML source itself. Add namespaces, undocumented XML nodes etc.
Flows use one single payload, that changes all the time. If you do a service call, you’re original payload will be replaced with the new one. If you do a mapping, it’s the same thing. Luckily you can preserve payloads in variables, but if you are using a lot of variables, it’s hard to keep track of all of ‘m. What did you name the variable again? And what is in it?
The flow designer is also not without bugs. Sometimes you try to drag a shape, maybe even re-arrange your flow. But be careful! Clicking away from the flow and coming back may cause your changes to get lost. It happened to me more than once. After this happened to me a few times, I am only rearranging my shapes in the XML source, making sure nothing breaks.
Ow and one more thing. Horizontal scrolling? Who thought of that? Probably a Mac user with a magic mouse or trackpad. As long as most of the mice in the world are equipped with a vertical scrollwheel, I want have a pane that scrolls vertically (or make sure the pane scrolls horizontally if the scrollwheel is used).
And there’s this other thing as well. Zooming? Not possible. This of course only becomes a problem with bigger flows.
Runtime
But I am not concerned about development in Mule ESB. My biggest concern is its runtime environment. I just wouldn’t want to be the bloke maintaining it, because it’s damn hard to know what’s happening on your server. And having a stable production environment is way more important than the time it took to develop something.
One of BizTalk’s main pros might be that it’s database driven. You always know what’s happening on your server. It comes with a downside too, it has a negative performance impact. Mule on the contrary is very fast, because it isn’t database driven. But it makes it very difficult to know what’s going on. In many cases, especially in an asynchronous world, insights might be more important than speed.
MMC – Mule’s very lightweight console
Mule’s runtime can be managed from MMC – an enterprise feature. And you can uhm… do some stuff with it. The most important things you can do are (1) register servers, (2) deploy, start and stop entire applications, (3) track some stuff (but only if enabled) and (4) set some alert rules. Ow and you can manage MMC users! 😐
In a nutshell, it’s not very useful and this also is an enterprise feature.
Tracking
Mule doesn’t track activity of your flows. Sure it can track your flow’s activity, but only after you enable it. And if you enable it, it can cause such a big load for the server, you can only enable it for a short while. It makes it impossible to know if your flow is working or not. You can only react after damage has already been done. Maybe if you log enough stuff, you might be able to find out what went wrong.
There’s also nothing like BizTalk’s BAM in Mule. BAM is sort of a BI tool to help you get real insights regarding your messaging system. Since Mule lacks tracking and something like BAM, insights are just impossible out of the box. You will need to take care of that yourself (writing stuff to a database for instance). And taking care of it yourself, exactly, has a negative impact on development time.
Flow control is abysmal
In Mule, a flow is a flow and either works or it doesn’t work and if something’s wrong, it will return an error. There’s no possibility of resuming flows that couldn’t connect to a database, or an SMTP server that was down. You have to implement this retry and resume behavior yourself. Route errored messages to a certain queue for instance, since you don’t want the source system to resend all those messages because of connection errors on your side. Implementing this behavior yourself, will of course have another negative impact on development time.
Then there’s the problem of starting or stopping ports (or call it connectors). You may want to disable, or queue up messages, going to a certain system, e.g. if it’s down for maintenance. But it can’t be done. Only on the receiving (activating) side. It has to do with the same problem I mentioned in the previous paragraph. You can’t resume flows, it’s basically one atomic transaction.
Pub-sub (publish and subscribe) is also unknown in Mule ESB. You have to develop a flow, even for the simplest of routing mechanisms. It’s weird. But maybe it was a deliberate choice and you should go with JMS. But then you can’t easily transform the messages.
(Re)Deployment and configuration
Deployment is straightforward and very fast in Mule. You can either go for hot deployment or go for manual deployment in MMC for instance. It’s a good thing that deployment is fast, for you can’t change configuration on a deployed service! That’s right, you can’t change an IP addresses, a computer name, a port, usernames or passwords on a deployed service. You need to redeploy the entire service. This isn’t a big problem if it contains a single service, but what if it contains many flows? It will cause downtime for all those flows.
And a different weird thing has to do with HTTP. You can only use one IP Port per container/application. So if you have several flows in several applications, you won’t be able to use the same port for HTTP. So there’s just one application that can use 8080, another 8888 etc. Apparently this issue may have already been taken care of in Mule 3.5, but I haven’t been able to test that.
Connectors / adapters
Let’s end with a positive note, favoring Mule. The number of connectors is amazing! You can connect to nearly anything out there! Just keep in mind that most of the connectors are built by the community and may not have been fully implemented or tested thoroughly.
Conclusion
All and all I don’t like Mule ESB too much, but I guess you’ve noticed that. Not a lot has been written and told about Mule, so I decided to make this blogpost. In my opinion Mule ESB just misses key features that should be present in a middleware platform. Think of features like tracking and being able to queue up messages whenever it’s needed. I also shouldn’t have to ask the party consuming my service to resubmit messages if some of my dependent services go down. All this will just result in a runtime environment that’s hard to maintain.
Development wise Mule has done some good things! Debugging is a joy and also design and development is fairly easy, but not without bugs. The visual mapper is useless, but mapping in Java is a good alternative. Documentation is really not on par with other (non-open source) systems. Mulesoft really needs to work on that and provide extensive installation guides and best practices.
Of course BizTalk isn’t without problems as well. I still don’t get why some screens in BizTalk are still not resizable for instance. And debugging isn’t quite as easy as in Mule for sure. But BizTalk is really easy to maintain in a runtime environment. And that last bit is really important. That’s what your customers are using!
Thanks for this! As a BizTalk developer I had been wondering what Mulesoft were working on and if it could be a serious competitor for BizTalk. It does sounds like from your experience they still have a fair way to go!
Exactly. They’ve done some good stuff, but it’s almost as if they only focused on the development part. Maybe they are working to improve runtime. Only future will tell.
Hi. I’m also a BizTalk developer who has, for the past 8 months, been working with Mule ESB. I have worked with BizTalk since 2004 (with beta version of BTS2004) on some large projects. My last BizTalk engagement (using BTS2010) ended in March 2013, so I feel I can also comment on the differences between Mule and BizTalk. My experience with Mule has been, it would seem, more positive than yours, though not entirely without frustration (but then again I had a few sleepless nights with BizTalk). I’ve made some notes below – apologies for the length, but it is difficult to respond in a few lines.
Pricing
AnyPoint Studio (local development environment) is free – you can download the AnyPoint Studio and start developing for free (includes the DataMapper). The AnyPoint Studio contains its own runtime and is fully featured.
Mule Community Runtime, which is free, will give you a workable runtime environment, but does not support any DataMapper transformations.
For production environments, the BizTalk prices look correct, but SQL Server 2012 enterprise edition is approx. $6500 per core (or thereabouts), so even $20k for SQL is a little low for four cores.
Documentation & Community
Admittedly, there is a shortage of good books and blogs about Mule ESB at present. The MuleSoft online docs are good, and generally Stack Overflow will point frustrated developers in the right direction. But yes, it could be better! That said, I remember BizTalk back in the early days of BizTalk 2004, and that was in a similar state to Mule then, i.e. lack of documentation. Since then, BizTalk has developed into a very mature product with lots of superb bloggers and resources – hopefully Mule will develop similarly as it grows.
Visual Mapper (DataMapper)
A few months ago I may have agreed with your comments, but I stuck with it and am now finding it very usable as an enterprise tool. With regards to not being able to map nodes on different levels, that is incorrect; you can, within the DataMapper, define mapping levels which allow you to do this. I have mapped from a flat csv structure to a complex xml structure with nested repeating nodes – it is possible. Not sure what you mean by having to recreate the map when replacing the source or target object; you can update (say) schemas and refresh the associated meta-data without losing the mapping, but if you totally change either schema then yes, you’ll clearly lose the mapping.
Flows
Agree that not everything is supported in the designer (though most is), and that there are a few annoying ‘quirks’ with its drag and drop. With regards to managing variables though, that is the same if you’ve defined lots of them in a BizTalk orchestration, though I would concede that the BizTalk Orchestration designer is clearer to use due to its maturity.
Runtime
I think when it comes to supporting integration engines, they all have their challenges which is why we have products like BizTalk360. All I can recommend with Mule (until we get a ‘Mule360’!) is to ensure you have an effective logging strategy and use Business-Events.
Mule Management Console (MMC): it has a little more than the BizTalk2004 Admin Console, but not much more of any use – other than Business Events (see below)!
Tracking
You can, relatively simply, add Business-Events into Mule flows into which you can extract data from messages etc. – this data is then reported and searchable within the MMC along with any errors that may have occurred with the messages…so it is sort of a BAM ‘lite’.
Flow Control
I agree – to a degree – with your comments about queuing messages. However, it is possible to implement something similar to BizTalk queuing via, say, ActiveMQ and designing the functionality into the flow. Similarly, Pub-Sub is entirely possible by using ActiveMQ which is free and integrates fully with Mule (no custom code necessary).
Config
Agree that up to version 3.4.2 its difficult to change config on-the-fly in a runtime environment. I’m in the process of upgrading to v3.6 and will be looking at this aspect closely (I’m sure it is possible but up to now I have missed something up to now).
Conclusion
Its horses for courses. If you want an out of the box, mature integration engine that persists all messages to database, is able to queue effectively, and comes with a rich, mature development environment, then you may want to look closely at BizTalk. The downside of BizTalk comes with its inherent complexity, and the level of expertise required to develop almost any level of integration solution (and associated development costs). If you want a lighter, but capable, integration engine where you can quickly develop enterprise-ready solutions, with significantly lower development costs, then Mule is well worth considering.
Thanks for the extensive comment! Very helpful and indeed some valid points 🙂 I will surely look into ActiveMQ.
Indeed Mule needs to mature and hopefully it will in the future. I don’t hate it, I just have some worries. Competition is (mostly) good for everyone and leads to better products.
Thank you to Robbie and Phil Chalk for a detailed article and response. I am new to Mule ESB and this article helps me position the product correctly.
Same here. Great insights on Mule ESB and comparisons to BizTalk. Thanks Robbie & Phil.
Hi Robbie,
I’m sorry to hear about your experience with Mule ESB and Anypoint Studio – I would love to talk to you more to better understand what you liked and didn’t like. And I’d like to thank you for sharing such a well-written and carefully crafted review – it’s feedback like yours that has helped us significantly improve Mule ESB, and has helped us jump significantly in Gartner’s Magic Quadrant for On-Premises Application Integration Suites 2014 report. It’s also why MuleSoft has been able to become the only company recognized as a leader for both on-premise and cloud enterprise integration – and the choice for 35% of the Global 500.
I’d also like to invite you to try out version 3.6, as it sounds like you’ve been working with a much older version (3.4) and we’ve made a ton of improvements and bug fixes (especially to the DataMapper)!!!
But again, thank you for your candid feedback, it is something I will definitely pass on to the appropriate teams so that we can make MuleSoft’s products and services even better!
I hope to hear back from you soon!
– Mike, Developer Relations Manager @ MuleSoft
Hi Mike.
I appreciate your comment! I’ve been trying out 3.6.1. just the other day for a demonstration and especially development wise there are a lot of little, though very good, improvements. Something like keeping track of your variables (properties) makes development just so much easier.
I didn’t notice all the improvements in the mapper, but I haven’t been fiddling around with it a lot. I have seen some changes, but still was unable to do complex mappings. I just have to look more into this and maybe I am just missing something there.
Development wise Mule is pretty good (allthough I am not an Eclipse fan 🙂 ). I think runtime, especially on-premise, needs some work. There are a lot of quirks in the MMC and getting servers registered – in Windows that is – is always a problem. If it’s not SSL, it’s something else. Mind you, Mule is way better to setup than Fuse for instance.
With Mule I just don’t have the feeling I am in control of my runtime environment out-of-the-box. I would like to see stuff like a decoupled tracking feature. So I can have some sort of tracking enabled all the time, instead of reactive. I can’t imagine someone coming up to me asking to search between a million messages in logfiles to see whether or not I received it yesterday.
And of course being able to do a configuration change without redeployment or being able to queue-up messages out of the box. E.g. when a service provider has predicted outage because of an upgrade. Of course you can develop stuff for this, but it will cost extra development time, and that’s a USP for Mule. And if this stuff isn’t available out-of-the-box, it’s hard to justify the price.
Just my 2 cents and I hope you guys will be able to improve runtime for a next big release (4.0) and give adminstrators and operators the ability to be more in control.
– Rob
Rob,
Your 2 cents are pretty important to us 🙂 I’ll pass this along too.
Thank you again for being so willing to share what you like, and what you don’t.
And please, feel free to email me anytime with any suggestions, questions, or concerns.
Keep up the great work,
Mike
It sounds like you are pretty biased to me. Mule is not perfect, but it much better than Biztalk (or anything that runs exclusively on an inferior OS like Windows). Many of your complaints sound like you don’t know how to utilize JMX for monitoring and the custom calls from the Mule API. It is open source so you can build what you need. It also sounds like you are really reliant on the UI. Mule is built with Java and if you understand the principles of Java you can do all of your development in IntelliJ or Eclipse. You may not like Eclipse but it is much better than Visual Studio (considering Eclipse is the most used IDE). Funny that your blog title describes you as MSFT DVLPR. Could easily be confused as Mulesoft dev not Microsoft but it is clear after reading a few entries that you are convinced Microsoft is better.
It’s quite humorous to me that you attempt to lambaste the author for being biased, then spring into one of the most biased monologues possible. Pot calling the kettle black, much?
My team has been working with Mulesoft EE for a year now, and have many, many complaints. Server registrations in the management console can drop, forcing you to manually edit config files on the servers to trick them into being unregistered, thereby allowing them to show up in the MMC as a new server to register. The slightest configuration difference between Mule developer workstations can render import of another developers flow impossible. They claim that they charge for development licenses because support is most often utilized in development, but then de-escalate tickets and don’t to get back with adequate answers in a timely fashion. Several tickets we have submitted were answered by referencing the community forums. Also, with each and every update we have received on the platform, numerous issues were introduced where the features previously worked. The best analogy is that their EE customers are doing their Alpha and Beta testing for them in our environments.
This isn’t to say that it’s a bad platform, and that people should look elsewhere. It is a great platform. But, it is very disappointing, nay unacceptable, that a tool as expensive as EE should have these issues.
Eclipse works like shit, very slow and unstable. Most popular doesn’t really mean the best. Eclipse is the most popular, maybe you’re right, but it’s because on the Java world it seems to be the most mature IDE. Just like JavaScript is the most popular language it’s not because it’s the best language, but because it’s the only choice on the front-end side. We haven’t had chance used Mule AnyPoint Studio but WSO2 Dev Studio which is also an Eclipse-based product, after six months trying with it we decided to change to use a pure text editor like Sublime.
We have been working with Mule on a very large project. The ANNUAL license fees are well in excess of 200k USD and that is with a substantial introductory discount. This software has been a nightmare to maintain in production. The company are only interested in conversations about taking more money from you. Try to use the community edition and you will find basic features are unavailable so this is a useless edition.
Great article. Your readers might also find real user reviews for Mule ESB on IT Central Station to be helpful: https://goo.gl/OQVS9z.
While your client ruled out Oracle because s/he was looking into open source, it is interesting to note that some IT Central Station users still went with Oracle despite the open source option. As an example, this Oracle SOA Suite user writes, “We also looked at Mule ESB/CloudHub, TIBCO, and IBM. There were many reasons that we chose Oracle, including that it’s a more robust and scalable product, more features, better future roadmap and product vision.” You can read the rest of his review here: https://goo.gl/UIjQG3.
Awesome write-up. I’m a regular visitor of your web site and appreciate you taking the time to maintain the excellent site.