Course: Advanced Distributed System Design - Udi Dahan
Course: Advanced Distributed System Design - Udi Dahan |
Table of Contents |
Course Curriculum
Important info about the course
Fallacies of Distributed Computing
Coupling
Intro to messaging
Exercise: selling messaging to your organization
Messaging patterns
Architectural styles: Bus and Broker
Intro to SOA
Exercise: services modelling
Advanced SOA
CQRS
SOA: operational aspects
Sagas/Long-running business processes modelling
Exercise: saga design
SOA: modelling
Organizational transition to SOA
Web Services and User Interfaces
fallacy 11 |
[ ] Article: "4+1 views of software architecture"
def: Application |
def: System |
application !-> connectivity |
8 fallacies of distributed computing |
latency table |
backward compatibility is a requirement for CD |
unless you have multiple versions & backward compatibility, dont do CD
CD will become Cdowntime
functionally separate vs physically separate |
functionally separate vs physically separate
you can deploy monolith what is logically decoupled
Product vs Project |
maintenance is a bad metaphor, project is better
maintenance: less skill needed, no big architecture changes
role: Business Analist |
role: Architect |
role: Project Manager |
Estimates |
Given a
- well-formed team
(worked together)
- with required skills
(has done such things before)
- of size S
decentralize business logic |
3 more fallacies |
Coupling |
incoming vs outgoing coupling |
def: incoming coupling |
def: outgoing coupling |
clarity: incoming vs outgoing |
count coupling |
X->Y
x outboing 1
y incoming 1
A->B
x outgoing 5 "is this class single responsibility principle"
y incoming 1 "how many classes do I have to change"
static analysis tool
hidden coupling |
3 aspects of coupling |
aspect 1: platform (aka interoperability) |
text-based representation on the wire
http, smtp, udp, ...
soap / wsdl / rest
apect 2: time |
aspect time: Pub-Sub explicit caching |
make explicit in A that caching is happening
aspect time: Pub-Sub constraints |
aspect time: Pub-Sub add validity period to data |
aspect time: Pub-Sub consitency |
if pub sub not OK time-constraint,
then RPC also not OK (can use cache)
-> transaction across A and B needed
aspect space: routing |
aspect time: logical owner |
logical owner
coupling 5 dimensions tradeoffs |
tradeoffs between dimensions
per ''layer"
keep LOGIC away from all the other
"is the coupling reasonable for it's responsibility"
eg. fromend webapi, platform low, even if HTTP response which is time high coupling
internal component: low temporal at cost of higher platform (pub-sub platform framework)