Problem: Making Servers Cooperate

For this problem, you've been asked to build a system — actually, a collection of component subsystems that work together — that provides your company's services to its customers. It won't be a unified system in which all the components know about one another and know which ones to call for their services. In this case, the components that provide service are supported on multiple operating systems and hardware platforms. All the components are independent, yet they cooperate to provide the overall service. The components can act as clients within the architecture because they need services performed by other components, too.

The system has been in service for a while and now is in version 2, but providing the necessary interservice communication among the components has become overwhelming. Adding and replacing components is hard because those components need to be registered with all the other components with which they communicate, either to request services or to provide services. Consequently, the number of communication paths in the system has exploded (see Figure 12-1).

images

Figure 12-1: An explosion of direct-connection complexity.

In version 1 of the system, all the components were collocated in one large program — a program that had all the problems that go along with a large monolithic solution (see Chapter 9). The program was inflexible and ...

Get Pattern-Oriented Software Architecture For Dummies now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.