Signs You Need Better Middleware

Middleware covers a wide range of technologies, including TP monitors, RPCs, message queuing and distributed objects. Sometimes, one of the most difficult things for IT management is to recognize the need for middleware. Some of the sure tip-offs are listed below.

  • You are doing a great deal of custom sockets, TLI, CPI-C, IPX or NetBIOS coding. These protocol interfaces are very low level, so a fair amount of custom programming is required to make them useful to a particular application. This is accompanied by difficult debugging, both during development and after systems are deployed. Also, how will you monitor performance and/or manage and administer the deployed applications? Sounds like more code than you bargained for, I bet.
  • You are coding elaborate error handling and recovery, failover, load balancing, resource location, security or distributed transaction algorithms. This really follows from the previous point. Getting two processes to communicate is only the beginning. In a production environment, there many requirements layered on top of this. Are you ready to do all this development in house? Would your job be in jeopardy if executives understood that you are coordinating multiple, distributed transactions in your own code when there is a mature market of products (including CICS) that can do this for you?
  • Your programs communicate by reading and writing a large number of small (or empty!) files that you move across machines with, say, FTP. Is this an efficient use of your file systems and network bandwidth? And, continuing the "services" theme, how do you do administration, performance monitoring, status checking, failover, etc.?
  • Your database tables are full of "status flags" and "last updated" columns to pass information about events between programs. Is that an RDBMS or a workflow engine? Is this an efficient use of an RDBMS? Also, when your database schema changes with every program release, you've doubled your configuration management problems.
  • You have multiple daemons running on every platform. This is usually related to the previous two points. When you write to files or a database to indicate events, you have to have something checking for changes. Sometimes this is done daily, which isn't much of a burden. But what about those events you want to check every minute?
  • Your WAN has much lower bandwidth or greater latency than your LAN. The network implementations of most (all?) client/server RDBMS engines are not particularly streamlined or efficient. After all, they have to be able to serve a wide range of clients, from programs you've written with hard-coded SELECT statements or remote procedure calls, to ad hoc query tools. The latter needs metadata, but the former doesn't. Plus, your network administrator doesn't want huge result sets clogging the WAN, nor do your users want to wait a variable amount of time for a list box to populate.
  • You support disconnected users. It's hard to avoid middleware for these folks.
  • You use e-mail to communicate program-to-program. Yes, SMTP is a reasonably robust transport protocol. But while e-mail is great for person-to-person and program-to-person, it is a dubious replacement for message-oriented middleware. The APIs are weak to non-existent, and you probably will lack performance monitoring, message prioritization and automatically generated progress messages.

Copyright (c) 1996 Scott Nichol.
09-Aug-96