Home > Articles > Web Services

  • Print
  • + Share This
From the author of

Web Services as Distributed Component Model

Although the main thrust of Web services comes from business needs, there are certain programming aspects in Web services. I think the most frequently asked question about Web services is "Is this a reinvention of distributed programming?" Distributed programming has long been a subject of software engineering, and there are a few commercially successful technologies such as CORBA. On the surface, many things that Web services promises to provide are the same or similar to what are already provided by distributed middleware such as CORBA and DCOM. Why do we need another distributed component model? Well, there are a number of differences between Web services and existing distributed component models, such as CORBA, but here I discuss two that I think are most important.

Distributed Programming versus Decentralized Programming

In conventional distributed programming, I think there is an implicit assumption that we usually take for granted: Even though components of an application are distributed over the network, there is a single entity controlling the overall system. A company's CIO is a good example. The CIO usually has the responsibility of determining the infrastructure and middleware, as well as configuring and maintaining these platforms. If there is some reason that the system would perform better by switching to the version 5.07 of the middleware, the CIO can plan to have a maintenance period during a weekend and replace the middleware of all the affected platforms. They will get exactly the same configuration and perform without a flaw.

For the inter-company integration that Web services is generally targeting, this kind of centralized control is almost impossible. You cannot force your business partners to use a particular middleware or an operating system, even if they will give you and your business partner a better performance, because they may have other reasons to stay with their current platform. Or you cannot assume that the business applications run by other companies have conveniently the same maintenance schedule as you do. The lack of centralized control is termed the decentralized nature of Web services in an IBM-Microsoft joint position paper, presented at the W3C Workshop on Web services held on April 11–12, 2001. The following paragraph is an excerpt from the paper:

"While most descriptions of Web based solutions emphasize their distributed characteristics, their decentralized nature—they have distinct management and control environments and communicate across trust domains—has much more impact on the architecture of this framework and the requirements of the underlying protocols. So, we focus our framework first on supporting application-to-application integration between enterprises having disjointed management, infrastructure and trust domains."

This may seem to be a subtle difference because distributed programming middleware have been successfully used in business-to-business communications and Web services is to be used in centralized environments as well. However, I believe that this difference has led us to different design criteria of the architecture. For example, Web services puts more importance on interoperability than performance. As an external data representation, XML is more verbose and less efficient than binary representations such as CORBA's Common Data Representation (CDR), but it also is less susceptible to errors caused by minor implementation fluctuations. XML data is usually human-readable to a certain extent, so it can even fall back to manual processes if necessary. Web services is also designed so that simple communication can be done without relying on sophisticated middleware. In many cases, such as the Delayed Stock Quote Service provided Xmethods.com, simple string processing and a TCP/IP protocol stack are all you need to invoke the service.

Of course, there are other hard problems involved in dealing with decentralized systems, such as how to establish trust relationships between businesses and how to negotiate quality of services. Web services standards need to evolve to address these challenges.

Reusing Components versus Reusing Installed Components

Component reuse is one of the biggest goals of any distributed programming model. OMG has spent a number of years to define the specifications that ensure the reusability of distributed components. The question here is against what kind of changes the reusability would protect the software component from modification. We all understand that developing new software is very costly. Therefore, a lot of attention has been paid to make sure that after a component is developed and tested, the component will be protected from changes of the environment in which the component is deployed (such as the operating system, network protocols, database formats, and user interface). To achieve this reusability, components are allowed to communicate with the outer worlds only though a high-level abstract API, as shown in Figure 1. The details of the platform are hidden behind this API. If the platform needs to be changed (for example, the operating system is to be upgraded) or the component needs to be ported to a different environment, there should be very little amount of effort, if any, in order to run it on the new environment, assuming that the new environment provides the same abstract API.

Figure 1Figure 1 Component reuse by high-level API.

So far, so good. As long as our original assumption that the component development cost is the major portion of the total software cost structure, this approach makes sense. However, this assumption is not always true. Some components require more work on operation and maintenance than development. Consider an employee directory service component; this component allows the retrieval of employees' telephone numbers. This data is constantly changing because of hiring and retiring, especially for a large company such as IBM. Maintaining the database is much more costly than developing the directory search component. In such a case, reusability of the component itself has a very small value; you want to reuse the installation of the application instead.

By installation, I mean all the things needed for operating a software component. You develop (or purchase) a component, prepare the platform to run it, install the component, configure the parameters of the component to suit the chosen environment, start and stop the required processes, keep the databases up-to-date if necessary, back them up, audit the logs, update the component if there are any bug fixes, and so on. These are not trivial tasks. In addition, we have reason to believe that these non-development costs will increase. As we rely on more sophisticated middleware, the configuration files become more complex, and the deployment tasks require more skills and time. Therefore, reusing already installed and well-maintained components makes a lot of sense.

In order to reuse installed software components, Web services puts more focus on the interface defined as a network protocol; what you send on the wire, what you receive, and in what order. The components will respond as advertised, but the details of how the components are implemented, installed, and operated are hidden behind this protocol. See Figure 2.

Figure 2 Figure 2 Installation reuse by wire protocol.

In other words, Web services tries to lower the cost of component ownership rather than the cost of component development.

  • + Share This
  • 🔖 Save To Your Account