The thread reference above was talking about statelessness and whether this is a good or a bad thing (answer: depends) but it raised an interesting thought in my mind about back-end reconciliation and the non-availability of actual present state.
Like the busy beaver (you can't know how much resources something will take) and the halting problem (or when it will stop) there is another problem in complex systems in that as a consumer you cannot know what the current internal state of a service is, and indeed you shouldn't care.
A few examples:
When I place an order I get a new order ID, before I make the call I have no idea what that ID will be, but it is a critical piece of information for me as it is my key into the tracking process. That ID represents a critical piece of state information that is internal to the service.
Depending how the company "picks" its products in the warehouse and handles its inventory also impacts when I will get the product. If they decrement inventory at sale then I should get it quickly if it said it was in stock. If they decrement at pick then I'm in a race condition with others to get the element. Again this is a question of the internal representation of state and its processing by the service, and as a consumer I have no way of knowing that state before I ask the service the question, and I cannot guarantee that the answer will be the same when I make my next request to the service.
All very obvious of course, but it does have an impact on the concept of stateless systems. It means that if you try and be stateless by having "before" and "after" requests then they are liable to fail as something else will alter the "before" state independently of what you are trying to do. Its even more complex in those areas that do backend consolidation, either based on timestamps or (in the case of a certain airline) when they receive the request on the mainframe. In these cases its impossible to say at 1pm what the 1pm answer actually is, the system doesn't know yet, and you certainly don't know.
This uncertainty of state is actually a good thing, it is letting the service manage its world in the most effective way that it can on behalf of its consumers. If the state had to be stored externally to the service (in some process message or something) then the level and degree of complexity would be unmanageable.
So maybe the uncertainty principle in SOA is that the simpler the interaction with the service, the less you know about the impact.
Statelessness is good sometimes, but its not something to pursue at the expense of simplicity.
Technorati Tags: SOA, Service Architecture
2 comments:
Steve,
Your comment on state of a service is interesting. I am currently doing research for my masters thesis project, and one of the main things I am investigating is how to properly define the level of granularity for a basic enterprise service. I have read many books (including your new one - its very good I might add, thanks! ), and almost none of them give any clear criteria to help defining a proper granular enterprise service.
The point I'm trying to make is that many people automatically assume "a service should provide the same result independent of state". I would argue that a higher level service (like process-centric, or perhaps Level 1 in your book), might need to maintain state, but a basic enterprise service I would imagine it to be independent of state. Of course its always complicated by the existing systems and landscape you are designing the enterprise SOA. Do you have any more thoughts on this?
Thanks,
Matt
Its a very nice blog for...
architects in bangalore , architects in bangalore , interior designers in Bangalore , interior designers in Bangalore , architects in bangalore , architects in bangalore , interior designers in bangalore
Post a Comment