Introducing Apache Apollo: Part I
Apache Apollo is the next-generation version of ActiveMQ built “from the ground up” on a core designed to be faster and scale better on multi-processor machines. ActiveMQ is one of the most popular open-source (if not the most popular) messaging brokers, and supports good performance, persistence messaging, high-availability, and networks of brokers. Most importantly, ActiveMQ has become very stable through all of its use, and we have been supporting some of the world’s biggest names in retail, banking, e-commerce and government that use it.
As great as ActiveMQ is right now, it has some complex threading implementations that keep it from being able to scale efficiently on higher-core, higher-resource machines. The threading implementation concerns are not around improper threading, but more that it was designed and developed at a time when there weren’t very many proven asynchronous java APIs and non-blocking IO libraries. Any application is susceptible to scalability concerns when there is shared state, contended synchronizations and exclusive locking.
However, ActiveMQ is good at what it does and since it’s stable right now, it would be a bad idea to re-write its threading architecture. So that’s where Apollo comes in: right now it’s a subproject of ActiveMQ where we can take all of the experiences of the ActiveMQ 5.x line, combine it with a new threading architecture, and develop a messaging broker that will meet demands of systems in the future with millions of destinations, hundreds of thousands of connections, high throughput, and utilize resources as efficiently as possible. Eventually, once backward compatibility is reached, Apollo will become ActiveMQ 6.0.
For those of you asking “Does that mean ActiveMQ is EOL?” The answer is emphatically “no”. ActiveMQ still has a very long life ahead of it, and as mentioned is being used by industry leaders. Bug fixes and support still continues for ActiveMQ through FuseSource (soon to be RedHat) and of course through the community. As long as there is interest in the community, ActiveMQ (or any Apache project) will not go away.
The goals of Apollo aren’t that far fetched, and it isn’t such a green project. It’s been worked on for over two years, had 6 candidates during its beta period, and v1.0 was released in February 2012. There are already quite a few people using it and are really putting it through the ringer. Hiram Chirino, the lead developer on Apollo, has also posted some very impressive benchmarks comparing Apollo with other mainstream message brokers: RabbitMQ, HornetQ, and ActiveMQ. See the stomp benchmarks here and the JMS benchmarks here.
At the time of this writing, Apollo has just released a new version, v1.4.
In part II, we’ll take a look at Apollo’s core threading architecture, hawtdispatch, Grand Central Dispatch, and some of the scalability and performance gains enabled by the new architecture. Stay tuned!
(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)