Planning_and_Impleme.. - didier beck weblog
Planning_and_Impleme.. - didier beck weblog
Planning_and_Impleme.. - didier beck weblog
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
www.butlergroup.com<br />
<strong>Planning</strong> <strong>and</strong> <strong>Impleme</strong>nting SOA<br />
IBM recommends that the development phase of a SOA project will require a number of roles, such as<br />
Software Architect, Developer (this may include application developer, component developer, <strong>and</strong><br />
integration developer), Test Engineer, Test Architect, <strong>and</strong> Test <strong>Impleme</strong>nter. Whilst this may appear overkill,<br />
<strong>and</strong> sometimes these roles could be filled by one or two people, the identification of the different roles<br />
needed may help assemble the best project team.<br />
<strong>Planning</strong> the infrastructure for SOA will require careful thought.<br />
<strong>Planning</strong> for a SOA deployment will require capacity planning <strong>and</strong> hardware planning where estimates of<br />
service volumes need to be considered, as well as usage patterns. Such planning will not be straightforward;<br />
a SOA infrastructure is made up of many components, such as middleware, mediation <strong>and</strong> orchestration<br />
brokers (which may be part of an ESB), infrastructure integration services (such as for security, monitoring,<br />
<strong>and</strong> exception management), as well as BPM engines, <strong>and</strong> of course, the underlying network infrastructure.<br />
This may itself have many components that impact performance <strong>and</strong> capacity<br />
including routers, switches, traffic load balancers, <strong>and</strong> encryption (such as<br />
SSL) <strong>and</strong> transformation XML Stylesheet Language Transformation (XSLT)<br />
accelerators.<br />
When carrying out capacity planning for SOA, performance is probably one of the<br />
easier aspects to measure, yet even that can be a challenge given the distributed<br />
nature of SOA. Estimating the number of transactions that are likely to occur, the<br />
number of users accessing a service is also quite measurable.<br />
Composite applications may be made up from a number of services, <strong>and</strong> these<br />
may not all have the same SLA (especially over time), which may of itself lead<br />
to interesting decisions as to how to scale up the required infrastructure.<br />
A common approach would be to over-engineer the infrastructure – <strong>and</strong> certainly it would be wise to allocate<br />
budget to hardware at the outset of a SOA project. But some of the infrastructure elements can be very<br />
expensive if under-utilised (BPM engines are a particular example here). A pattern-based approach to<br />
capacity planning is one good option, taking into account a range of access patterns to the services that<br />
encompass simple <strong>and</strong> complex scenarios.<br />
A simple pattern might cover a validation service (using a schema, for example), a transformation from one<br />
format to another, <strong>and</strong> then publishing a message onto a queue. A more complex pattern might add in lookups<br />
<strong>and</strong> process management capabilities. The capacity planning process should then test the various<br />
scenarios <strong>and</strong> record results in order to then extrapolate based on peak load estimates. This peak should<br />
then be projected forward over time to forecast where additional capacity might be required in the future.<br />
Another part of infrastructure planning is to consider failover <strong>and</strong> disaster recovery – establishing how<br />
alternative infrastructure can be utilised <strong>and</strong> what the service failover options should be. In any serious<br />
project, failover should be designed in, <strong>and</strong> then tested to ensure that it works.<br />
Services within a SOA may be combined in unforeseen ways.<br />
When carrying out<br />
capacity planning for<br />
SOA, performance is<br />
probably one of the<br />
easier aspects to<br />
measure, yet even that<br />
can be a challenge<br />
given the distributed<br />
nature of SOA.<br />
A key issue in testing within a SOA is that it is not always clear, when designing a service, how it is going<br />
to be used. A service could be reused <strong>and</strong> combined with other services in ways that are not foreseen at<br />
the development phase, so services will therefore need rigorous testing to ensure that when the<br />
unpredictable happens, they cope. Testing in a SOA will encompass the ability to test Web services but also<br />
other types of service.<br />
As with any type of application or service, one of the first tests should be whether the service does what it<br />
is intended to do, in terms of the capabilities that it is intended to deliver. Such functional testing will also<br />
need to be carried out but issues such as unit testing, system testing, load testing, <strong>and</strong> overall performance<br />
all need to be addressed when testing is carried out, <strong>and</strong> where a service may have multiple bindings, each<br />
will need to be tested.<br />
December 2006 Section 1: SOA Deployment 29