Service Taxonomy: A Common Language for SOA – Shy Cohen
Tue, 13 Nov 2007 13:06:11 GMT
An excellent session. It did degenerate after a while into an architectural naval-contemplation session, but Shy did come up with one of the most succinct expressions of the Autonomy tenet of services:
"Don’t confuse autonomy with independence. Services are autonomous, but not necessarily independent. It’s like countries. They are politically autonomous entities, but they depend upon other countries to exist. It’s why we have import and export."
A Framework for Taxonomy
Shy proposes a framework to help us organise services across an enterprise.
Bus Services
Two different kinds of services – shown in orange above, Bus Services are part of the supporting distributed computing infrastructure and not specific to any application.
Utility Services
- Offer message transfer facilities
- Message routing, publish subscribe, etc
Communication Services
- Offer services unrelated to message transfer
- Service discovery, federated security, etc
Application Services
These are coarse-grained, high-level application building blocks,:
- Entity Services – Manipulate business services; e.g. Employee, Purchase Order, Conveyer Belt
- Capability Services and Activity Services – Functional building blocks of the application, Verify Customer Credit
- Process Services – Compose and orchestrate Entity, Capability and Activity Services to implement business processes – e.g. Authorise Holiday, Process PO.
In Detail – Bus Services – Communication Services
Role
- Transport messages in, out, within the system; across network or protocol boundaries
- Not Concerned with the content of the messages; schema agnostic; may use message parts to determine message advancement
Interfaces
- Generic for receiving and forwarding messages (interface is message-schema agnostic
- Management and monitoring interfaces
|
Characteristic |
Details |
|
State Management |
No app state. Self state configured by the applications |
|
Monitoring and Diagnostics |
Analysis of message traffic patters. Error rate reporting |
|
Security |
App-specific requirements, regulatory etc, with permissions at App, Use or App-User |
|
Errors |
Network level, e.g. Round-robin |
|
Construction and Management |
A commodity (build centrally or buy) that’s built to last and is centrally managed |
In Detail – Bus Services – Utility Services
Role
- Shared Infrastructure – not message transport
- Generic, non-messaging, app-agnostic services
- e.g. STS, discovery, message schema translation
- Configured on how to perform operations for the app
- e.g. Schema mapping for schema translation service
Interfaces
- An interface specific to the services functionality
- Process messages sent to it
- Message exchange is typically request-response
- May also have management and monitoring interfaces
|
Characteristic |
Details |
|
State Management |
No app state. Self state configured by the application |
|
Monitoring and Diagnostics |
Analysis of service requests. Error rate reporting. |
|
Security |
App-specific requirements, regulatory etc. With permissions at App, User or App-User |
|
Errors |
Errors handling is specific to the service’s functionality |
|
Construction and Management |
A commodity (build centrally or buy) that’s built to last is centrally managed |
In Detail – Application Services – Entity Services
Role
- To unlock and expose the business entities of the system
- Data-centric components ("nouns") of the business process
- Expose the information stored in one or more data stores in the system through a service interface
- Abstract data stores
- e.g. SQL Server, Active Directory, etc
- The information being managed is of general interest
- Used in several or even all the systems in the organisation
Interfaces
- CRUD interface at the entity level
- Operations may depend on access and modification restrictions
- Entities are structured types
- Underlying data stores typically relational or hierarchical
- Additional domain-specific operations
- Addressing problem-domain
- Support app’s features and use-cases
- e.g. FindCustomerIdByPhone
- Functional Interface; i.e. CRUD + domain specific functionality
|
Characteristic |
Details |
|
State Management |
Manage the persistent state of the system, typically for longer than any single process. |
|
Consistency |
Atomic transaction and reservation pattern |
|
Security |
App-specific access restriction requirements, regulatory etc. Permission at App/User levels |
|
Errors |
Seeking alternative data sources,. Error policy part of SLE/SLA |
|
Construction and Management |
Built in-house to last (SW factory, DB feature). Used by multiple apps across the enterprise. |
In Detail – Application Services – Capability Services
Role
- Represent business-level capabilities of the organisation
- Action-centric building blocks of the organisation’s business processes
- "Atomic verbs"
Interface
- Interface specific to the capability they represent
- May thinly wrap an existing legacy) or newly acquired business capability
- Facade service is opaque
- Underlying capability can be replaced without changing the service interface use to access it
- Facade service is considered the Capability Service
|
Characteristic |
Details |
|
State Management |
Manage transient state, for shorter than the duration of the process |
|
Consistency |
Atomic transaction (flowed downstream) and Reservation pattern (over downstream store) |
|
App-specific access restriction requirements, regulatory etc. Permission at the App level. |
|
|
Errors |
Error compensation part of SLE/SLA |
|
Construction and Management |
Built / Buy / Lease to last (workflow or code). Managed centrally. |
In Detail – Application Services - Activity Services
Role
- Business level capabilities or action centric business logic elements ("building blocks")
- Used in a single composite app or a single solution
- May evolve into Capability Services
- Forces impacting creation of Activity Services
- Decomposition of a complex process
- Enabling reuse of functionality in several places; within a single process service or across multiple process services
- Pressures can come from architecture/implementation requirements, organisation forces within the business, security requirements, regulatory requirements etc.
Interfaces
- Service interface is specific to the capability
- Possible for Activity Services to wrap existing units of functionality
|
Characteristic |
Details |
|
State Management |
Manage transient state, wrapping cases will actually hold app state |
|
Consistency |
Atomic transactions used internally; Reservation pattern externally |
|
Security |
App-specific access restriction requirements, regulatory etc. Permission at the App level. |
|
Errors |
Error compensation part of SLE/SLA |
|
Construction and Management |
Built in house to last. Used by single apps and managed as such. Over time, may become a Capability Service |
In Detail – Application Services – Process Services
Role
- Combine data-centric and action-centric building blocks to implement business processes
- Compose the functionality of Activity Services, Capability Services and Entity Services; tied together with business logic.
- Designed to enable process agility
- May be composed into the workflows of other Process Services
- Because of their long running nature, they are not categorised as Capability or Activity Services; also they implement an agile process.
Interfaces
- Often fronted with a UI that initiates, controls and monitors the process
- Service interface typically geared towards consumption by presentation tier
- Level of granularity designed for user-facing, front-end applications
- Monitoring the business process (BAM)
|
Characteristic |
Details |
|
State Management |
Manage app state for the duration of the process |
|
Consistency |
None, or reservation pattern if recomposing |
|
Security |
User specific access restriction |
|
Errors |
Error handling is an integral part of the process being implemented |
|
Construction and Management |
Built in house to change (e.g. Workflow). Typically used by a single app and managed per application. May be recomposed into another process. |
Summary
The taxonomy provided here just gives very high level holding places for your services. The important part here is that we all start using the same names for things. When we have a large number of services, we will find this taxonomy does not provide a suitable level of granularity and distinction between them.
One way round this would be to devise a lower level taxonomy orthogonal to this one, as and when we need the extra flexibility to our vocabulary. So, you may decide to add a level of granularity based on business functionality. For instance, Customer Activity Services, or Purchase Order Process Services.
