SolutionsWorks FAQs

FAQs

I have a Three-Tier architecture. Wouldn't it be simpler to just use point connections from my app server to all my other applications/legacy servers on the back end?

Not Really. If you simply connect from an application server using client connections (such as JDBC, SOAP or HTTP etc.) to back end systems you are probably ignoring the following issues:

  • What kind of fail-over strategy will the client connections use if they fail to connect to their primary target system on the back end? Have you made redundant network paths that the client can use to reach its target service? If so, how will the client route its messages intelligently through the redundant paths?
  • If the target system is moved, can you guarantee that all the clients will detect the change without interruption or reconfiguration?
  • If the target system is replaced with a different one will you have to break open the code in all the clients and modify them so that they can talk to the new system? How will you implement seamless fail-back to the old system if it becomes necessary?
  • If a requirement arises in the future that means you need to send a given message exchange to an additional system (perhaps with a new protocol or data format), can the client code incorporate the new requirement with the minimum impact? What if ten or more new systems are added? Is the impact on a given client linear? What if in the future one system is required to be notified of a hundred different client exchanges? An ESB handles multiple subscribers (fan-out), single subscribers to multiple producers (fan in), or duplication of subscribers as a built-in part of the architecture.
  • What impact will changes to the interface on the target system have on the clients? If they are close-coupled interfaces (as most client connections are) will you be overwhelmed by the ripple effects of changes in one part of the system that propagate out and impact the rest of the system?
  • Will your client/server interactions be visible, reportable, and auditable? Can you guarantee that problems will be easy to diagnose when development tools that created them are not available, for instance in a Production environment? How will you monitor the client interactions? How will you implement automated failure operations? Are there adequate systems monitoring tools in the market place for your chosen method of client/server exchange?
  • How will you secure the client connections? How will you distribute and manage certificates and keys amongst clients and servers?
  • If you hit a performance bottleneck on the back-end server, do you have a strategy for scaling the client workload? Can you easily replicate the back-end server instances to handle an increasing load? If you can't scale vertically, do you have a strategy to scale out horizontally? How will you achieve workload balancing with point-to-point client connections?

In addressing these issues you will almost certainly find that you are re-inventing an ESB. You should seriously consider re-architecting your solution so that the clients are clients of the ESB rather than clients of a specific server instance.