Concept: Introduction to Service-Oriented Architecture
This concept introduces SOA, a specialization of component-based architecture based on the use of published and dynamically discoverable services.
Main Description


Component-based architecture/component-based development is a RUP practice because components are an effective means of dividing a complex system into manageable parts and because components enable reuse. Service-Oriented Architecture (SOA) is a specialization of component-based architecture based on the use of published and dynamically discoverable services.

What is SOA?

A Service is a logical component that defines a set of interfaces and that is not allocated to a defined user but to multiple clients which can share it. A Service Provider is a component that implements the service interfaces. Services and service providers are published and accessed via a repository called a Service Broker. These services can be discovered and accessed by other components (user applications or other services) through the service broker, following the principles shown in the figure below.

Diagram described in accompanying text.
Figure 1 - SOA participants and their main operations

This separation between the service interfaces and their implementation by the service provider allows for multiple providers for the same service and for providers to be added or replaced dynamically without impact on the service requesters. Service requesters can dynamically discover the services and the related service providers they need. The publish/discover principle makes SOA a more flexible and more loosely coupled architecture than traditional architectures. This is particularly useful when integrating or composing disparate systems, such as legacy systems with packaged applications and J2EE or .Net applications. See Concept: Enterprise Application Integration, Application Interface Level Integration for more on this kind of integration.

Services Characteristics

The following are key characteristics of services:

  • Coarse-grained and business oriented: Because there is always some latency due to network communication, a service should hide a substantial body of the application logic, giving significant business value to the consumer in one call.
  • Interface-based design: A service implements a defined set of interfaces.
  • Invoked and discoverable: A service and providers of the service can be discovered by other systems and invoked by those other systems.
  • Distributed: Services composing an application can be distributed over different systems within an organization or even distributed across organizations.
  • Loosely coupled: Services are connected through loosely coupled interfaces, making the modification of an interface possible without breaking the other ones.

SOA and Web Services

Everything discussed so far can be done with different technologies; CORBA and .Net are an example of such technologies. So why are web services so closely associated with service-oriented architecture?

Web services are based on internet standards, such as XML (eXtensible Markup Language) to format data, SOAP (Simple Object Access Protocol) to communicate, and WSDL (Web Services Description Language) and UDDI (Universal Description, Discovery and Integration) to publish descriptions. The usage of these widely accepted standards provides a broader interoperability among different vendor's solutions, making the implementation of SOA easier and less expensive.

A more detailed discussion about using web services and component-based development to implement an SOA can be found in the Whitepaper: Using Service-Oriented Architecture and Component-Based Development to Build Web Service Applications.