distributed architecture philosophy why asynchronous messaging?

8
Distributed Architecture Philosophy Why asynchronous messaging?

Upload: caroline-daniels

Post on 23-Dec-2015

216 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Distributed Architecture Philosophy Why asynchronous messaging?

Distributed Architecture Philosophy

Why asynchronous messaging?

Page 2: Distributed Architecture Philosophy Why asynchronous messaging?

As selected from the ten fallacies of enterprise computing:

The network is reliableLatency is zeroTopology doesn’t changeThe network is homogeneousThe system is finished

From Ted Neward’s book:Effective Enterprise Java

Page 3: Distributed Architecture Philosophy Why asynchronous messaging?

Ted Neward’s Item 19:Prefer data-driven communication over

behavior-driven communicationThis means is better to interact remotely by

sending documents (data-driven) than it is to invoke methods (behavior-driven) remotely on a distributed object

Ted listed three primary reasons to prefer data-driven to behavior-driven – I’ve added several more…

Page 4: Distributed Architecture Philosophy Why asynchronous messaging?

Ted’s three reasons: Evolution

distributed object interfaces are brittle because interface consuming code becomes very intimately intertwined with the details of the remote interface (i.e., very high coupling)

the two (interface provider and interface consumer) must carefully be evolved in lock step

XML documents in practice are easier to evolve so as to not break existing deployed code

whereas trying to manage versions of component interfaces over time can become intractable

Intermediaries filtering, routing, bridging, transformation, processing hook points, etc.,

can be transparently interposed in the middle Recoverable operations

easier to build auditing systems reliable queued backing of messaging makes it easier to build multi-

resource transactional systems that support roll-back

Page 5: Distributed Architecture Philosophy Why asynchronous messaging?

My additional reasons: Less network chattiness

Ted Neward’s Item 18 – Prefer context-complete communication styles sending context-complete documents evokes less chattiness than calling

various methods on a remote interface (unfettered OOP design becomes a definite detriment here)

Non-programmer business analyst can understand XML documents and messaging web services and other various distributed object RPC are for geeks

only (and even they struggle with the complex ws* stack) OOP approach offers no advantage across distributed computing

boundaries OOP is good for internal app design but offers no value to distributed

systems

Page 6: Distributed Architecture Philosophy Why asynchronous messaging?

Still more reasons: Publish/subscriber pattern is easy to implement with

messaging approach Messaging is symmetrically bi-directional

Event-driven distributed systems are thus readily possible Messaging is loosely coupled

With RPC, every direct end-point to end-point coupling in the system introduces fragility/brittleness in the overall system topology design

It pays to be oblivious as to who is getting your messages and what they’re doing with them

Page 7: Distributed Architecture Philosophy Why asynchronous messaging?

Ted Neward’s Item 20: Avoid waiting for remote service request to respond

Learn to build distributed components that behave asynchronously when interacting with the network

My embellishments: Use a design that separates and centralizes the concern of

communication layer exception handling from business logic processing (i.e., remote interface methods that throw RPC i/o related exceptions are bad and to be avoided)

Asynchronous RPC by itself can be semantically dangerous – prefer asynchronous queued messaging instead

Page 8: Distributed Architecture Philosophy Why asynchronous messaging?

Author: Roger Voss

August 14, 2006