Tuesday 01 July, 2008 (Architecture | EDA | SOA)
I have been reading a lot about Event Driven Architecture (EDA) in relation to SOA recently and while the ideas are very interesting and the benefits are alluring it adds an additional complexity and uncertainty to the overall behaviour. Two good articles on EDA are http://martinfowler.com/eaaDev/EventCollaboration.html and http://eaipatterns.com/docs/EDA.pdf
From my view the main problem is that when implementing a business process that spans several services (for example entity services) we do not generally want the entity services to react to events and then store or retrieve data based on the events because this means that the services need to have some kind of knowledge of the expected behaviour relating to the process - generally seen as a bad thing in SOA, as the northbound - southbound dependencies get reversed. We also want to have some stability from a callers perspective that the overall flow will be moved forward, traditionally done by issuing a command. If events get turned into commands then I believe we will have problems coordinating the different actors (presuming that the command event was only meant to be acted on once). Jack Hof has an interesting take on the relationship between SOA and EDA especially his extended pdf version has some interesting ideas about how to realise SOA and EDA together which contains a potential solution to the problem, basically by just combining EDA and SOA and knowing when to implement which principles.
A related problem is what should our messages contain - are command messages even required? Two slightly different takes on the problem are presented here and here. Thinking about events and messages has lead me to attempt to create (a very crude) classification system for events that are related to a solution that I am developing for a client.
The first two event types are just statements, the third (reservation) is really just a variation of a state-change event with additional semantics attached to it. Using EDA the expected behaviour that is needed for a specific business process must be realised with the help of some kind of process controller (notification server in Jack Hof's world) which follows the traditional Command and Control (call stack) approach for coordination but uses events to track what stage the overall process or task is at.
« Remember to always have a static customErr... | Latest | SFTP Adapter authentication for BizTalk »
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.
Sign In
.Net (25) About (1) Agile (2) AJAX (1) Architecture (4) BizTalk (5) Blogging (12) Bugs (11) Business (2) dasBlog (9) EDA (1) Fixes (13) FlexWiki (1) Games (1) Geek (4) GTD (2) Humor (4) Interviews (1) Java (2) Office (1) Ramblings (8) Reviews (7) Scrum (2) Security (1) SharePoint (6) SOA (4) Speaking (2) Team System (10) Tech Ed 2008 (1) TechEd 2006 (5) Tips (4) Vista (1) Visual Studio (2) Web (11) Web2.0 (1) XP (1)