| By Stefan Tilkov | Article Rating: |
|
| March 12, 2007 03:30 PM EDT | Reads: |
19,340 |
In many customer engagements, I need to establish a basic set of SOA principles. The following sections introduce fundamental principles that a Service Oriented Architecture (SOA) should expose. They are not introduced as absolute truth, but rather as a frame of reference for SOA-related discussion. You'll note that the first four are based on Don Box's four tenets, although over time they may have acquired a personal spin.
1) Explicit Boundaries
Everything needed by the service to provide its functionality should be passed to it when it's invoked. All access to the service should be via its publicly exposed interface; no hidden assumptions should be necessary to invoke the service. "Services are inextricably tied to messaging in that the only way into and out of a service is through messages." A service invocation should - as a general pattern - not rely on a shared context; instead service invocations should be modeled as stateless. An interface exposed by a service is governed by a contract that describes its functional and non-functional capabilities and characteristics. The invocation of a service is an action that has a business effect, is possibly expensive in terms of resource consumption, and introduces a category of errors different from those of a local method invocation or remote procedure call. A service invocation isn't a remote procedure call.
While consuming and providing services certainly should be as easy as possible, so it's undesirable to hide too much of the fact that an interaction with a service takes place. The message sent to or received from the service, the service contract, and the service itself should all be first-class constructs within the SOA. This means, for example, that the programming models and tools that are used should at least provide an API that exposes these concepts to the service programmer. In summary, a service exposes its functionality through an explicit interface that encapsulates its internals; interaction with a service is an explicit act, relying on the passing of messages between consumer and provider.
2) Shared Contract and Schema, not Class
Starting from a service description (a contract), both a service consumer and a service provider should have everything they need to consume or provide the service. Following the principle of loose coupling, a service provider can't rely on the consumer's ability to reuse any code that it provides in its own environment; after all, it might be using a different development or runtime environment. This principle puts severe limits on the type of data that can be exchanged in an SOA. Ideally, the data is exchanged as XML documents validatable against one or more schemas, since they are supported in every programming environment one can imagine.
3) Policy-driven
To interact with a service, two orthogonal requirement sets have to be met:
- The provider's functionality, syntax, and semantics must fit the consumer's requirements,
- The technical capabilities and needs must match.
To support access to a service from the largest number of differently equipped and capable consumers, a policy mechanism has been introduced as part of the SOA toolset. While the functional aspects are described in the service interface, the orthogonal, non-functional capabilities and needs are specified using policies.
4) Autonomous
Related to the explicit boundaries principle (5.4.1.1), a service is autonomous in that its only relation to the outside world - at least from the SOA perspective - is through its interface. In particular, it must be possible to change a service's runtime environment, say from a lightweight prototype implementation to a full-blown application server-based collection of collaborating components without affecting its consumers. Services can be changed and deployed, versioned, and managed independently of each other. A service provider can't rely on the ability of its consumers to adapt to a new version of the service quickly; some of them might not be able, or willing, to adapt to a new version of a service interface at all (especially if they're outside the service provider's sphere of control).
5) Wire Formats, not Programming Language APIs
Services are exposed using a specific wire format that has to be supported. This principle is strongly related to the explicitness of the boundaries principle, but introduces a new perspective: To ensure the utmost accessibility (and so, long-term usability), a service must be accessible from any platform that supports the exchange of messages adhering to the service interface as long as the interaction conforms to the policy defined for the service. For example, it's a useful test of conformance to this principle to consider whether it's possible to consume or provide a specific service from a mainstream dynamic programming language such as Perl, Python, or Ruby. Even though none of these may currently play any role in the current technology landscape, this consideration can serve as a litmus test to assess whether the following criteria are met:
- All message formats are described using an open standard or human-readable description
- It's possible to create messages adhering to those schemas with reasonable effort without a specific programmer's library
- The semantics and syntax for additional information necessary for successful communication, such as headers for purposes such as security or reliability, follow a public specification or standard
- At least one of the transport (or transfer) protocols used to interact with the service is a standard network protocol (or is accessible via one)
Published March 12, 2007 Reads 19,340
Copyright © 2007 SYS-CON Media, Inc. — All Rights Reserved.
Syndicated stories and blog feeds, all rights reserved by the author.
More Stories By Stefan Tilkov
Stefan Tilkov is co-founder and a prinicipal consultant at innoQ, a consulting firm with offices in Germany and Switzerland. He focuses on enterprise architecture consulting for Fortune 1000 companies, which currently translates to assessing SOA maturity and deriving appropriate steps for a road map towards a service-oriented enterprise.
- Big Data in Telecom: The Need for Analytics
- Patterns for Building High Performance Applications
- Microsoft Tries Hadoop on Azure
- Amazon to Fix Some Kindle Fire Problems
- What Motivates Open Standards in the Cloud?
- What to Expect in 2012: Cloud Computing and Open Source Software
- Will PaaS Finally Bring Open Source Love to the Enterprise?
- Ten Hot Trends in Cloud Data for 2012
- Oracle Disaster Recovery Site Hosted by Amazon Cloud
- Cross-Platform Mobile Website Development – a Tool Comparison
- Three Buzzwords That Every CIO Hears but One They Should Listen To
- Write Once Run Anywhere or Cross Platform Mobile Development Tools
- The Future of Cloud Computing: Industry Predictions for 2012
- Make Customer On-Boarding Easy as Paint-by-Numbers for Cloud Services
- Gartner Hype Cycle for Emerging Technologies 2011
- Book Excerpt: Introducing HTML5
- Adobe Sends Flex to the Apache Foundation
- Big Data in Telecom: The Need for Analytics
- Book Excerpt: Java Application Profiling Tips and Tricks
- i-Technology in 2012: Five Industry Predictions
- Patterns for Building High Performance Applications
- Microsoft Tries Hadoop on Azure
- The Next Web Architecture
- Cloud Computing: A Comparison of Computing Models
- The i-Technology Right Stuff
- The Top 150 Players in Cloud Computing
- Who Are The All-Time Heroes of i-Technology?
- Where Are RIA Technologies Headed in 2008?
- Get the Message
- ESB Myth Busters: 10 Enterprise Service Bus Myths Debunked
- i-Technology Viewpoint: Is Web 2.0 the Global SOA?
- i-Technology Viewpoint: Thinking Outside the VC Box
- i-Technology Viewpoint: When to Leave Your First IT Job
- SOA Web Services Edge Conference Coverage on SYS-CON.TV
- SYS-CON.TV's "SOA Web Services" and "Enterprise Open Source" Programs To Air in December
- Five Reasons Why Web 2.0 Matters
















