I was on a training course this week around an Oracle SOA Reference Architecture. This led to an interesting conversation about what is a service. There was a difference in opinion on some of the characteristics of a service, most noticeably does a service have to be re-used to be a service. There was however, general agreement that the definition of a service presented was a good one so I thought I would share it with you. The service definition had four parts
The one that may not be immediately obvious is the fourth one, service usage agreement. This indicates the expected level of use of the service by the client, number of requests per time period, message size and concurrency for example. This is important because SOA is about using services in place, sharing not just the service code, but also its implementation resources such as network bandwidth, memory and cpu resources. Usage by one client may impact another and so it is important to set expectations of how a given client may use the service. Service usage agreements may be realised by policies within a service bus that enforce some of the constraints agreed within the usage agreement.
So all told I think a very useful way to think about services and I will certainly be making sure I do a better job of formalising the service usage agreement in future.