2.3.2 Interfaces, Layers, and Middleware
Systems that perform a variety of functions are normally composed of multiple subsystems or components. Interfaces arise whenever one component or subsystem needs to interact with another. Principles for the partitioning of systems and selecting interfaces include:
- Managing modular development. Partitioned system design with well-designed interfaces permits development programs to be divided into more manageable pieces, which in turn can result in faster development because the work of different players can proceed in parallel. When it is desired to spread system development across different operating units, this approach is essential.
- Permitting modular change--in versions and implementation technology. By encapsulating the internal details of a system component (which may change over time), interfaces allow changes in internal implementation of portions of a system to be transparent to other portions. Interfaces thus permit various parts of the overall system to evolve over time without requiring changes to be made simultaneously throughout a system--allowing components to be upgraded as technology evolves and user needs mature.
- Reducing the number of interaction points between systems. Reducing the complexity of intersystem dependencies facilitates more rapid reconfiguration of systems to meet operational requirements.
The modular decomposition of systems often is both horizontal and vertical. Vertical decomposition refers to interfaces between discrete systems within the same layer--for example, a standard message format used by two different applications to exchange information. Horizontal decomposition of functions in an architecture--for example, the separation of bit transport technologies, transport protocol, and applications--is known as layering.
Layering can do a great deal to facilitate making C4I systems interoperable in the presence of rapidly changing technologies and multiple technology choices. Layering makes it possible to design a system of systems that has technology independence, scalability, decentralized operation, appropriate architecture and supporting standards, security, and flexibility, and can also accommodate heterogeneity, accounting, and cost recovery.14 When layers in a system are identified, it is important to realize that layers that correspond to widely adopted standards are likely to be the most successful. The wide popularity of the Internet and the proliferation of Internet applications are evidence of the power of this principle. Specific examples include:
- The use of TCP/IP to decouple communications link technologies from applications that use communications. A diverse, rapidly changing set of link-level communications technologies (ranging from analog telephone circuits to wavelength division multiplexed optics) is thus separated from an even more diverse set of applications. System designs based on this layering principle produce applications that can interoperate with each other through networks built from a variety of technologies.
- The use of hypertext transport protocol (HTTP) and hypertext markup language (HTML) to separate presentation from storage and retrieval functions. Presentation on a variety of client platforms is separated from a rapidly evolving, wide variety of server-side applications and functions.
Middleware is one instance of the layering principle. It provides a separation between applications and the operating system platforms that the applications run on. By decreasing the dependence of applications on a particular operating system, middleware increases the ease of moving applications to new computer systems and decreases dependence on operating systems that might fall out of favor in the commercial marketplace.
Middleware has an additional dimension--as a toolkit, it provides a set of relatively high-level common functions that are used in common among applications, and permits applications to be built out of building blocks. Examples of functions that can be provided by middleware are file system support, privacy protection, authentication and other security functions, tools for coordinating multisite applications, remote computer access services, storage repositories, name servers, network directory services, and directory services of other types.15 Thus middleware offers two additional advantages. First, when common software is used to provide particular functions, interoperability is more easily achieved. Second, by increasing software reuse, middleware can reduce development costs.