Recently there's been a lot of talk about software architecture, particularly with the emergence of Service-Oriented Architecture (SOA). In this article, I will be describing the expanding role of the software architect. I'll use a building metaphor to describe SOA, since an architect in the real world is responsible for designing the blueprints atop which buildings are made.
This article will clarify why the architect is an essential player in SOA and why people who call themselves software architects will increasingly be in demand as enterprises increasingly adopt SOA. I will indicate the role of the architect indirectly by talking about how SOAs are designed, built, and how they succeed or fail. Throughout this process, the architect acts as a guide, planner, and overseer of the "big picture" of SOA.
For the purpose of this article, we will use the Wikipedia definition, which describes SOA as:
"...A software architectural concept that defines the use of services to support the requirements of software users. In an SOA environment, nodes on a network make resources available to other participants in the network as independent services that the participants access in a standardized way. Most definitions of SOA identify the use of Web services (i.e. using SOAP or REST) in its implementation."
This definition is very minimalist and does not include many of the typical best practices associated with SOAbut for our purposes, a minimal definition allows us to highlight the role of the architect in choosing the best path through the morass of standards, methodologies, and technologies available. Although Web services technologies are not required for the use of SOA, this article will use Web services examples in order to advance our discussion of SOA.
SOA is typically lauded for lowering the cost of software through reuse and for enabling a more agile process-focused way to address changing business requirements. It is also recommended for helping align the interests of information technology (IT) and business users. Achieving these goals will require governance, an intentional methodology, and selection of essential standards and technologies.
Reuse
In order to achieve reuse, the first essential step is to ensure the existence of standards. The second step is to enforce the standards. The enforcement of standards is one facet of what many refer to as SOA Governance. Standards are the foundation of reuse, as they enable services that have no prior knowledge of one another to consume one another. Obviously having standards is of no value if service implementers ignore them, so processes need to be put in place to help. One essential area to standardize is the service registry repository function. The registry component of the registry repository contains a catalog of services, which enables service discovery (and therefore reuse). The repository component of the registry repository contains documentation of policies and other information to support SOA Governance applications.
Agility
Agility is achieved in SOA through the ability to encode IT processes at a higher level of abstraction than the raw services. This means orchestration or workflow services or declarative configurable metadata systems such as policies and contracts. These elements collectively are referred to as "composite applications." This can be laid out in three layers, as in the three C's of SOA programming as described by this articleconfiguration, composition, and customization This area is one that is very sensitive to requirements and standardsmany people have criticized such standards as BPEL as being insufficient for achieving business agile process definition, and there is a lack of standards around SOA contracts and declarative programming as well.
Aligning Business and IT
A key way to align business and IT is to have a methodology that connects business to architecture, such as the Intentional SOA methodology. This establishes the upfront goals of the SOA and strives to realize these goals. Without a prior agreement about the goals of the project, enterprise scale SOA will be both difficult to fund and difficult to realize. The architect serves as "the missing link" between business and IT. By maintaining the "big picture," an architect can help ensure that these disparate organizations can learn to work together. Another element of methodology that may help is a notation system. A notation system that can be understood by both business and IT users can help to ensure alignment of objectives. One such notation is the OASIS SOA Adoption Blueprints notation, recently donated by Cap Gemini.
As is becoming clear, all three of these larger SOA goals are dependent on architects. Although the end-to-end SOA lifecycle includes many constituencies such as developers, system administrators, IT Operations people, customers, business users, security experts, and othersthe architect is the only role explicitly dedicated to the "big picture". Because of this, the architect is becoming increasingly indispensable to enterprise software success.
That said, not all services are created equal. Some services such as security, identity, logging, notification, registry, and others are "metaservices," which are designed to be reused across all other services. Architects are responsible for establishing a strong framework (I kind of hate that word, but there you go) of metaservices for the "S" people. In addition to establishing the metaservices framework (also called "Service Infrastructure"), architects hold the responsibility for the standards and overall SOA "game plan."
OASIS has a committee focused on this problem called the SOA Adoption Blueprints Technical Committee (I am chair of this committee). You can download sample blueprints, notation, and methodology from this committee and if you're an enterprise architect, it may be valuable for you to consider joining this, or some other, community of best practice. By working together with other architects, you can ensure that your blueprint embodies the best practices and patterns available to the industry. You will also want to make sure that your blueprint avoids any SOA antipatterns which are well known among SOA architects.
WS-Heavy: WS-I Basic Profile
A number of standards are needed to achieve a proper SOA. For a Web service-based SOA, there's no set of standards more fundamental than the WS-I Basic Profile, which includes XML, SOAP, WSDL, and UDDI. This has been referred to as the WS-Heavy approach, which tends to extend beyond the Basic Profile to include standards such as WSRP, ebXML, WS-Security, WS-Policy, and many others.
REST (Representational State Transfer)
REST is not a standard, but a way to build Web services applications. Critics of SOAP suggest that SOAP is unusable without significant tool support. The REST concept was invented by Roy Fielding in his doctoral dissertation. While not a Web services standard, developers are interested in REST. Like SOAP, REST provides a mechanism for communicating between service providers and consumers. All REST developers need is a browser and a Web programming environmentin some cases a scripting language such as Perl, PHP, or Python. REST is a lightweight way of providing and consuming Web services. The requester in the REST paradigm sends a URL in which all of the requesting parameters are encoded. The response is an XML document that corresponds to this request. This asymmetry initially appears to be client-server and browser oriented, but there is nothing preventing a server from using URL encoding to request a message from another server.
The REST paradigm is a robust architectural philosophy rather than a specific standard and can be applied partially or completely. For example, traditional REST suggests the use of HTTP GET as transport, when in fact REST paradigm URLs and URIs can be responded to over other transport forms if needed (for example, over guaranteed delivery middleware). REST is much more loosely defined and opportunistic than a SOAP-based approach. It does not rely on heavy tooling, because the calling format is the URL, the debugging tool is the browser, and the parsers are often scripting languages such as Perl- or PHP-oriented.
AJAX
Ajax is an acronym for Asynchronous JavaScript and XML. Ajax is something of a programming style made of constituent parts. Ajax incorporates:
AJAX is described well in this article by Adaptive Path.
Web 2.0
A combination of "Social Software", Blogs, RSS, Ajax, and other technologies have been referred to in aggregate as "Web 2.0."
However, when I see a full release number, I expect a product to be rebuilt or rearchitected in a way that enables it to go to a higher level. The package of goodies assembled in Web 2.0 seems more like Web 1.3a pretty good "dot rev." In fact, 1.3 is a point where the product is pretty stable and there's a pretty decent ecosystem of builders on top. In fact, Microsoft's own Software as a Service plans seem to have a pretty robust implication in terms of platform.
I think if you want to talk serious platform for V2, the Web platform has forked. There's the semantic Web, which seems to have slipped in its shipping schedule, which could be Web 2.0. Then there's this "SOA" thing, which has a lot of industrial-strength plumbing in it. That's a new platform and probably deserves the title of Web 2.0, not a bunch of clever mash-ups, JavaScript hacks, and REST apps.
At this point, you will have services consuming others. But what about building the services that consume these services?
This can pose an interesting challengesince this is potentially a way of creating a spaghetti factory of services consuming each other without any semblance of order. Some of the problems which can come with this include performance issues, maintainability issues, complex cascading outages, and other serious concerns.
In order to reach this "height," one important concept would be a way to establish versions of services. A dependency mapping system enables a clear understanding of which services are built on which others, and can be useful. A robust versioning system allows for services to be upgraded and changed without ruining services that rely on them. Service level agreements (SLAs) allow performance to be assured. SLAs are important infrastructure because as services depend on other services, performance can degrade to unacceptable levels. By maintaining enforceable SLAs an SOA can ensure that the performance of the system meets the requirements of the application.
One way to manage versions and service levels is by adding an intermediary such as a Web services management system. Intermediaries can route Web services traffic to load balance and assure performance and can direct consuming services to appropriate versions of existing services.
One of the principles covered in Geoffrey Moore's classic text "Crossing the Chasm" is the idea that as technologies are adopted by the early majority and enter the mainstreamthe very skills and methods that won over the early adopters are a hindrance to moving to the next level. This is a very important principle, as the earliest stages of SOA adoption tend to be overpopulated by "S" thinkers and developer focus rather than business focused or "A" thinkers.
Who's responsible for ensuring that an enterprise SOA can "Cross the Chasm"? You guessed itthe architect.
People who describe themselves as "software architects" will play the central role in the evolution of SOA. This will help ensure long-term job satisfaction and job security, as a good architect can make the difference between success and failure of these ambitious enterprise scale projects.