What is Middleware?
Whether your aim is to build a single, large distributed system or to integrate multiple existing systems into a single, large system-of-systems, middleware is your key to success. When you begin to distribute across multiple processes, whether they are on the same or different machines, middleware is the stuff “in the middle” that allows the different parts to talk.
A few examples of middleware would include:
- .NET Remoting
- ASMX Webservices
- Oracle Data Provider
- .NET’s Common Language Runtime
- A Java Virtual Machine Implementation
Why would you want to learn about it?
There are many different implementations of middleware–as you can see from my example list above. If you want to be able to make an informed decision when choosing among multiple suitable implementations, it’s important to be able to recognize both the sweet spots and the pain points for each type. It’s this knowledge that will allow you to know which tool is most suitable–both for your current needs and, potentially, your future needs as well.
What about the book?
I picked up a copy of the 2nd edition, which was published in 2004. The original was published back in December of 2000. The driving reason I chose to read this book was that I found it referenced from several other items I had read previously (which I can’t remember at the moment).
Overall, I’d give this book 3 stars out of 5. Although, I know that if I had read this several years ago, I would have no doubt rated it higher. A few places in the book deal with specific vendor technologies, including .NET, and given the publish date, it’s age is starting to show a bit.
One thing I really liked about this book was the way in which the authors chose to explain the concept of middleware–even the diagrams were simple and elegant. They also took the time to touch on a few quality attributes: resiliency, performance, and scalability (to name a few).
One area that seemed a little rough was on the topic of asynchronous message queuing. A few spots seemed to give conflicting assessments on the technique–although I’d probably guess some of that information just didn’t get scrutinized close enough during the revision.
Although I liked the book overall, this particular review is a little tough to write. I didn’t feel like the book stretched me very far from my current understanding. Whether that’s a sign of me maturing or a reflection on the author’s writing I’ll leave for another discussion.
In short, if you are looking to get your feet wet with middleware and related concepts, this is a good book to reach for. Don’t think, however, that any single book will be sufficient to learn the concepts in depth. If you are new to the topic, this would serve as a good introduction. If you’ve been around the block a few times, it would serve as a nice refresher.