Service-Oriented Architecture Explained
by Sayed Hashimi08/18/2003
Introduction
SOA (service-oriented architecture) has become a buzzword of late. Although the concepts behind SOA have been around for over a decade now, SOA has gained extreme popularity of late due to web services. Before we dive in and talk about what SOA is and what the essentials behind SOA are, it is a useful first step to look back at the evolution of SOA. To do that, we have to simply look at the challenges developers have faced over the past few decades and observe the solutions that have been proposed to solve their problems.
The Problem
Early programmers realized that writing software was becoming more and more complex. They needed a better way to reuse some of the code that they were rewriting. When researchers took notice of this, they introduced the concept of modular design. With modular design principles, programmers could write subroutines and functions and reuse their code. This was great for a while. Later, developers started to see that they were cutting and pasting their modules into other applications and that this started to create a maintenance nightmare; when a bug was discovered in a function somewhere, they had to track down all of the applications that used the function and modify the code to reflect the fix. After the fix, the deployment nightmare began. Developers didn't like that; they needed a higher level of abstraction.
Researchers proposed classes and object-oriented software to solve this, and many more, problems. Again, as software complexity grew, developers started to see that developing and maintaining software was complex and they wanted a way to reuse and maintain functionality, not just code. Researchers offered yet another abstraction layer to handle this complexity -- component-based software. Component-based software is/was a good solution for reuse and maintenance, but it doesn't address all of the complexities developers are faced with today. Today, we face complex issues like distributed software, application integration, varying platforms, varying protocols, various devices, the Internet, etc. Today's software has to be equipped to answer the call for all of the above. In short, SOA (along with web services) provides a solution to all of the above. By adopting a SOA, you eliminate the headaches of protocol and platforms and your applications integrate seamlessly.
Key Components of SOA
The first step in learning something new is to understand its vocabulary. In the context of SOA, we have the terms service, message, dynamic discovery, and web services. Each of these plays an essential role in SOA.
Service
A service in SOA is an exposed piece of functionality with three properties:
- The interface contract to the service is platform-independent.
- The service can be dynamically located and invoked.
- The service is self-contained. That is, the service maintains its own state.
![]() |
| Figure 1.1. Directory service |
Message
Service providers and consumers communicate via messages. Services expose an interface contract. This contract defines the behavior of the service and the messages they accept and return. Because the interface contract is platform- and language-independent, the technology used to define messages must also be agnostic to any specific platform/language. Therefore, messages are typically constructed using XML documents that conform to XML schema. XML provides all of the functionality, granularity, and scalability required by messages. That is, for consumers and providers to effectively communicate, they need a non-restrictive type of system to clearly define messages; XML provides this. Because consumers and providers communicate via messages, the structure and design of messages should not be taken lightly. Messages need to be implemented using a technology that supports the scalability requirements of services. Having to redesign messages will break the interface to providers, which can prove to be costly.
Dynamic Discovery
Dynamic discovery is an important piece of SOA. At a high level, SOA is composed of three core pieces: service providers, service consumers, and the directory service. The role of providers and consumers are apparent, but the role of the directory service needs some explanation. The directory service is an intermediary between providers and consumers. Providers register with the directory service and consumers query the directory service to find service providers. Most directory services typically organize services based on criteria and categorize them. Consumers can then use the directory services' search capabilities to find providers. Embedding a directory service within SOA accomplishes the following:
- Scalability of services; you can add services incrementally.
- Decouples consumers from providers.
- Allows for hot updates of services.
- Provides a look-up service for consumers.
- Allows consumers to choose between providers at runtime rather than hard-coding a single provider.
Web Service
Although the concepts behind SOA were established long before web services came along, web services play a major role in a SOA. This is because web services are built on top of well-known and platform-independent protocols. These protocols include HTTP, XML, UDDI, WSDL, and SOAP. It is the combination of these protocols that make web services so attractive. Moreover, it is these protocols that fulfill the key requirements of a SOA. That is, a SOA requires that a service be dynamically discoverable and invokeable. This requirement is fulfilled by UDDI, WSDL, and SOAP. SOA requires that a service have a platform-independent interface contract. This requirement is fulfilled by XML. SOA stresses interoperability. This requirement is fulfilled by HTTP. This is why web services lie at the heart of SOA.
Conclusion
Even though we have decades of experience in software development, we have yet to solve the mysteries of software complexity. As complexity grows, researchers find more innovative ways to answer the call. SOA, in combination with web services, is the latest answer. Application integration is one of the major issues companies face today; SOA can solve that. System availability, reliability, and scalability continue to bite companies today; SOA addresses these issues. Given today's requirements, SOA is the best scalable solution for application architecture.
This article was an introduction to SOA. There is a lot more to SOA than the simple introduction that I have given here. In several future installments, I will discuss the core concepts behind SOA in much more detail. For example, an upcoming article will discuss messages with more breadth. There is a lot more to a message than XML. For example, how do you design synchronous vs. asynchronous messages? How can you ensure reliability? How do you handle security within your messages? These topics and more will be discussed next.
Sayed Hashimi is an independent consultant based in Jacksonville, Florida.
Return to ONDotnet.com
You must be logged in to the O'Reilly Network to post a talkback.
Showing messages 1 through 12 of 12.
-
Great Article
2006-11-09 07:28:14 TheOne_KM [Reply | View]
I think it's a great article. Very clear and to the point.
-
Magic
2003-10-27 14:23:09 anonymous2 [Reply | View]
And like magic, all of our problems were solved. Just like the architecture that solved all our problems before the one we're replacing. And the one before that. And the previous one...
-
it works, much like http://www.codon4.com
2003-08-19 18:56:26 anonymous2 [Reply | View]
it works, much like http://www.codon4.com
-
More backstory required
2003-08-19 11:24:46 anonymous2 [Reply | View]
This is a nice introduction to the technology, but I think it's a bit heavy on the technology and not informative enough about the historical context and the problem space. Take this section:
"Today, we face complex issues like distributed software, application integration, varying platforms, varying protocols, various devices, the Internet, etc. Today's software has to be equipped to answer the call for all of the above."
It's my understanding from reading the article that these two lines provide the justification for SOA. In order to do that, more depth is required. Why do we need distributed software? How does SOA provide a better application integration solution than other EAI approaches?
Then there is the historical aspect of the discussion. There is some high level software engineering history but there is no discussion about EDI or other interchange standards.
A whole article could be dedicated just to providing a historical context and issues based justification for SOA. It's that article that would be valuable.
In other words, write an article that shows me that web services with XML is a good idea that fits the problem and is superior to all existing standards. That web services over XML is not another EJB-style Sun hype fest. -
More backstory required
2006-09-19 01:06:20 sahab_iiita [Reply | View]
i want more technical knowledge how soa is implemented -
More backstory required
2003-08-20 07:06:21 anonymous2 [Reply | View]
My objective for writing the article was the following:
1) Give a brief introduction to SOA assuming that the audience is medium-level developer to application architects/project managers.
2) Provide an overview of the evolution of SOA.
3) Define and provide some explanation of the key components of SOA.
Having said that, with the limitations on the length of the article and the assumption of who would be reading the article, I was not able to provide justification for things such as why we need distributed software, EDI, etc. To do that, I would have had to write several books before I could sufficiently cover all that led to SOA.
-
More backstory required
2005-06-19 02:03:24 pisicuta [Reply | View]
yes now I see Biker Babes on Teen Upskirt






