Link to the talk: https://www.infoq.com/presentations/microservices-data-centric
- Service for each table
- Local/own/isolated database for each service
- Cache join query information locally on respective service's DBs on each write to avoid cascaded service calls (aka joins in monolithic/shared DB)
- Alternative to ACID transactions is to perform multi-step operations using a state machine which can be rollbacked
- Dealing with events 5.1 At most once delivery - When you don't care about such events, like logging stuff using UDP 5.2 At least once delivery - When you care about it, so it will retry if it doesn't get ack of delivery 5.2.1 Receiving multiple times - Need consumer logic to be idemptotent (which means it should yield same result if the same operation/function is performed multiple times, i.e. f(x) == f(f(x)) == f(f(f(f(x))))) 5.2.2 Receiving out of order - Need CRDT data types (https://github.com/ericmoritz/crdt) or something, which for e.g. keeps the next one in memory for a while until the prior event is received