- 1 Challenges of Networked Applications
- 2 Networked Application Design Dimensions
- 3 Object-Oriented Middleware Solutions
- 4 An Overview of the ACE Toolkit
- 5 Example: A Networked Logging Service
- 6 Summary
0.3 Object-Oriented Middleware Solutions
Some of the most successful techniques and tools devised to address accidental and inherent complexities of networked applications have centered on object-oriented middleware, which helps manage the complexity and heterogeneity in networked applications. Object-oriented middleware provides reusable service/protocol component and framework software that functionally bridges the gap between Object-oriented middleware provides capabilities whose qualities are critical to help simplify and coordinate how networked applications are connected and how they interoperate.
End-to-end application functional requirements and
The lower-level operating systems, networking protocol stacks, and hardware devices.
0.3.1 Object-Oriented Middleware Layers
Networking protocol stacks, such as TCP/IP [Ste93], can be decomposed into multiple layers, such as the physical, data-link, network, transport, session, presentation, and application layers defined in the OSI reference model [Bla91]. Likewise, object-oriented middleware can be decomposed into multiple layers [SS01], as shown in Figure 0.4. A common hierarchy of object-oriented middleware includes the layers described below:
Figure 0.4: Object-Oriented Middleware Layers in Context
Host infrastructure middleware encapsulates OS concurrency and interprocess communication (IPC) mechanisms to create object-oriented network programming capabilities. These capabilities eliminate many tedious, error-prone, and nonportable activities associated with developing networked applications via native OS APIs, such as Sockets or POSIX threads (Pthreads). Widely used examples of host infrastructure middleware include Java Packages [AGH00] and ACE.
Distribution middleware uses and extends host infrastructure middleware in order to automate common network programming tasks, such as connection and memory management, marshaling and demarshaling, endpoint and request demultiplexing, synchronization, and multithreading. Developers who use distribution middleware can program distributed applications much like stand-alone applications, that is, by invoking operations on target objects without concern for their location, language, OS, or hardware [HV99]. At the heart of distribution middleware are Object Request Brokers (ORBs), such as COM+ [Box97], Java RMI [Sun98], and CORBA [Obj01].
Common middleware services augment distribution middleware by defin-ing higher-level domain-independent services, such as event notification, logging, persistence, security, and recoverable transactions. Whereas distribution middleware focuses largely on managing end-system resources in support of an object-oriented distributed programming model, common middleware services focus on allocating, scheduling, and coordinating various resources throughout a distributed system. Without common middle-ware services, these end-to-end capabilities would have to be implemented ad hoc by each networked application.
Domain-specific middleware services satisfy specific requirements of particular domains, such as telecommunications, e-commerce, health care, process automation, or avionics. Whereas the other object-oriented mid-dleware layers provide broadly reusable "horizontal" mechanisms and services, domain-specific services target vertical markets. From a "commercial off-the-shelf" (COTS) perspective, domain-specific services are the least mature of the middleware layers today. This is due in part to the historical lack of middleware standards needed to provide a stable base upon which to create domain-specific services.
Object-oriented middleware is an important tool for developing networked applications. It provides the following three broad areas of improvement for developing and evolving networked applications:
Strategic focus, which elevates application developer focus beyond a preoccupation with low-level OS concurrency and networking APIs. A solid grasp of the concepts and capabilities underlying these APIs is foundational to all networked application development. However, middleware helps abstract the details away into higher-level, more easily used artifacts. Without needing to worry as much about low- level details, developers can focus on more strategic, application-centric concerns.
Effective reuse, which amortizes software life-cycle effort by leveraging previous development expertise and reifying implementations of key patterns [SSRB00, GHJV95] into reusable middleware frameworks. In the future, most networked applications will be assembled by integrating and scripting domain-specific and common "pluggable" middleware service components, rather than being programmed entirely from scratch [Joh97].
Open standards, which provide a portable and interoperable set of software artifacts. These artifacts help to direct the focus of developers toward higher-level software application architecture and design concerns, such as interoperable security, layered distributed resource management, and fault tolerance services. An increasingly important role is being played by open and/or standard COTS object-oriented middleware, such as CORBA, Java virtual machines, and ACE, which can be purchased or acquired via open-source means. COTS middle-ware is particularly important for organizations facing time-to-market pressures and limited software development resources.
Although distribution middleware, common middleware services, and domain-specific middleware services are important topics, they are not treated further in this book for the reasons we explore in the next section. For further coverage of these topics, please see either http://ace.ece.uci.edu/middleware.html or Advanced CORBA Programming with C++ [HV99].
0.3.2 The Benefits of Host Infrastructure Middleware
Host infrastructure middleware is preferred over the higher middleware layers when developers are driven by stringent quality of service (QoS) requirements and/or cost containment. It's also a foundational area for advancing the state-of-the-art of middleware. These areas and their rationale are discussed below.
Meeting stringent QoS requirements. Certain types of applications need access to native OS IPC mechanisms and protocols to meet stringent efficiency and predictability QoS requirements. For example, multimedia applications that require long-duration, bidirectional bytestream communication services are poorly suited to the synchronous request/response paradigm provided by some distribution middleware [NGSY00]. Despite major advances [GS99, POS+00] in optimization technology, many conventional distribution middleware implementations still incur significant throughput and latency overhead and lack sufficient hooks to manipulate other QoS-related properties, such as jitter and dependability.
In contrast, host infrastructure middleware is often better suited to ensure end-to-end QoS because it allows applications to
Omit functionality that may not be necessary, such as omitting marshaling and demarshaling in homogeneous environments
Exert fine-grained control over communication behavior, such as supporting IP multicast transmission and asynchronous I/O and
Customize networking protocols to optimize network bandwidth usage or to substitute shared memory communication in place of loopback network communication
By the end of the decade, we expect research and development (R&D) on distribution middleware and common services will reach a point where its QoS levels rival or exceed that of handwritten host infrastructure mid-dleware and networked applications. In the meantime, however, much production software must be written and deployed. It's within this context that host infrastructure middleware plays such an important role by elevating the level of abstraction at which networked applications are developed without unduly affecting their QoS.
Cost containment. To survive in a globally competitive environment, many organizations are transitioning to object-oriented development processes and methods. In this context, host infrastructure middleware offers powerful and time-proven solutions to help contain the costs of the inherent and accidental complexities outlined in Section 0.1, page 4.
For example, adopting new compilers, development environments, debuggers, and toolkits can be expensive. Training software engineers can be even more expensive due to steep learning curves needed to become profi-cient with new technologies. Containing these costs is important when embarking on software projects in which new technologies are being evaluated or employed. Host infrastructure middleware can be an effective tool for leveraging existing OS and networking experience, knowledge, and skills while expanding development to new platforms and climbing the learning curve toward more advanced, cost-saving software technologies.
Advancing the state-of-the-practice by improving core knowledge. A solid understanding of host infrastructure middleware helps developers identify higher-level patterns and services so they can become more productive in their own application domains. There are many new technology challenges to be conquered beyond today's method- and message-oriented middleware technologies. Infrastructure middleware provides an important building block for future R&D for the following reasons:
Developers with a solid grasp of the design challenges and patterns underlying host infrastructure middleware can become proficient with software technology advances more rapidly. They can then catalyze the adoption of more sophisticated middleware capabilities within a team or organization.
Developers with a thorough understanding of what happens "under the covers" of middleware are better suited to identify new ways of improving their networked applications.