Saturday, July 16, 2005
Thinking out of the Box
Tuesday, July 05, 2005
SOA is a design philosophy
A service oriented design philosophy views an application as a collaboration of more basic core services. A Service Oriented Architecture (SOA) is an ensemble of such services.
Services are best explained as centers of value. (a’la Christopher Alexander). Paraphrasing Alexander, services are building blocks of business capability, not truly bounded entities but are in fact non-bounded centers. Here, “non-bounded” refers to their implementation. From outside its interface, a service is a black box of unknown scope and complexity.
Service interfaces are bound by a platform independent contract. Services protect information and form trust boundaries within an Enterprise Architecture.
I agree with Martin Fowler that Service Oriented design philosophy is often confused with service interface implementations (Martin Fowler)
A service is a program.
A web service is a communication tool.
Friday, June 24, 2005
Business Orient Architecture (BOA?)
No one knows how to design Service Oriented Architectures from scratch. But that's OK, since no one is really starting from scratch. Perhaps, someday we will have Service Oriented Analysis and Design methodologies. But for now we are all contemplating how to add services to existing legacy systems.
So the important question is how to design a good service. I don’t know the answer to this. But I do know that a good service will be understandable by a business person. If you cannot explain a service to a manager than it is probably a poor choice. That does not necessarily mean that it is a good service. As the enterprise IT architecture evolves and more services are added there will certainly be service re-work and Refactoring
If I had to guess what a service oriented architecture will eventually look like, I would guess that it would reflect the business architecture – Business Oriented Architecture (BOA). Business organizations have evolved over many centuries into a number of common “departments” – sales, accounting, personnel, etc. Perhaps that is a good starting place for services.
Friday, December 10, 2004
Service Layers
At the innermost layers you have services that maintain what Pat Helland calls resource data. Resource data record the state of essential, long-term enterprise entities – like products, customers, employees, and money. Ideally each entity would be guarded by one service. And that service would support simple interfaces to create, retrieve, update and delete (CRUD) entities. They “guard” the data by enforcing the appropriate security policy and business rules.
Unfortunately, not all of the information about an entity is managed by single service, or located in a central place, or has identical business and security constraints. So in real enterprises we find that data about a single entity is distributed. Take employees, for example, some information about employees is manage by the HR department, and some by payroll department, and some by the security department.
This creates the need for a service layer concerned with managing aggregated entities. These services provide a single interface to enterprise entities, hiding the partitioning from the outer layer of services. They distribute updates and aggregate retrievals, creating the impression of a simple entity. And they coordinate creation and deletion of entities among its partitions. For example, hiring or firing an employee must be coordinated among the HR, payroll, and security departments.
Above the entity layers, we find the workflow layer. The services in this layer manage long-term enterprise processes, like order processing, loan approval, hiring or firing an employee, or month end closing of the accounts. Like entity services, workflow services manage persistent data - the state of the process. But, unlike entities, workflows are expected to terminate eventually. With this layer we transition from the static to the dynamic. It is here that many of the governance and compliance rules are enforced.
If the entity layer dependencies are trees, the workflow layers are graphs. An enterprise’s processes are typically highly interdependent. And so are their services. It may be difficult to manage these interdependencies. If they become sufficiently complex, then some way must be found to layer the workflows between primitive processes and higher–level processes.
Finally, there is the interface layer. This layer is focused on interacting with the outside world. This includes interaction in the form of applications that interact with humans and choreographies that interact with the services in other organizations. I think of these services as implementing “Use Cases” or sessions. They serve as interfaces to the workflow and entity layers.
Monday, November 29, 2004
Documents vs Parameters
I think of software services the same way. First I locate the appropriate service. I then determine the desired operation. Each operation is characterized by a pair of documents that are sent to and received from the service. I generate an instance of the first document, send it to the service location, and await a response in the form of the second document. The response is often just an acknowledgement that a proper requesting document has been received. The actual effect of the operation may not become known until a later event that is signaled by the arrival of a document from the service.
That’s a little confusing. So lets call the first document a request, the second an acknowledgement, and third a response. If the service can respond immediately then the response serves as an acknowledgement.
My main point is that I view service architectures as Document Oriented Architecture (DOA?). The action is implicit in the kind-of document being sent. To me this is a cleaner view that thinking of services as subroutines that take some set of parameters. What I need to understand is how this view relates to the REST view. Somehow they seem like similar or, at least, sympathetic views.