As part of my learning, I started the SOA ( Service Oriented Architecture ) in the recent past. I started reading some blogs, sites and books about SOA to understand the basics and why we need to go towards SOA for today’s enterprises. I would like to share my ideas and knowledge I got in this process. Hope this would give you some pointers to start your journey of SOA.
What is Service Orientation : Wiki tells us that, this is a paradigm to build software in form of services. We would take it further and can tell – “Think all logically divisible parts of your program as service”. Lets take a real time example for better understanding.
Case: Lets take a house which is having a 1 Hall, 1 Kitchen and 2 bed rooms (of-course couple of bath rooms as well). If you think in terms of services what are the services you could think of to form a house.
- Electrical Wiring
All these things together make a house. So, shall we think all these things as services?
Why not ?
If we have these many services, are we saying our house as SOA implementation ?
Now, what does SOA principles has to say about this –
Very similar to SOLID principles in Object Orientation, SOA has their own SOA principles. We have to look at them and figure out our model is matching with the SOA principles. You might think we already have these services as web services then SOA is the same. Are web service is the only way to achieve SOA ? that is a different question to answer but to be precise the current/contemporary way of implementing SOA is web services (May be in future we might have something different). Anyway, Lets get back to Principles of SOA.
Don’t get puzzled if they look very familiar 🙂
Loose Coupling: The services defined should maintain a relationship that minimizes dependencies, and only requires the awareness of each other.
Service Contract: All services should adhere to a service agreement. This could be a service description of a single or multiple related services. Services should do only whatever is mentioned in the contract.
Autonomy: Services should have a control over the logic they encapsulate. This means that each service should do the specific task and it should not do anything more than that.
Abstraction: Beyond what is described in the service contract, services hide the logic from outside world.
Reusability: Logic is divided into services with the intention of promoting reuse.
Composability: Collection of services can be coordinated and assembled to form composite services.
Statelessness: Services should minimize/zero retaining information specific to an activity / state.
Discoverability: Services are designed to be outwardly descriptive, so that they can be found and accessed via available discovery mechanisms.
Considering these principles, If you design any SOA system that would be considered as better architecture of your application. So, I feel these are the needs of current enterprise applications. And SOA can give a perfect solution if you are able to see the needs through your Service Orientation lenses.
Here are some Good Reads about SOA:
Book: Service-Oriented Architecture: Concepts, Technology, and Designjoi (Prentice Hall Service-Oriented Computing Series from Thomas Erl)
Another Good start would be – ServiceOrientation.com
Hope this read was helpful, Happy learning and reading !!!