LinkedIn Professional Network · View 18 of 30 · 5 · Runtime
Decisions
- One writer per conversation assigns the sequence number, so order is total within a conversation without a global clock
- The sender is acknowledged after the durable append and before delivery. Delivery is at-least-once, and the client dedupes by client message id
- Delivery front-ends hold SSE connections on Play and Akka. LinkedIn chose SSE over WebSocket because it is plain HTTP through every proxy (LinkedIn, 2016)
Numbers
- Delivery p95 under 500 ms to online recipients
- Hundreds of thousands of persistent connections per delivery host (LinkedIn, 2016)
- Presence comes from heartbeats on the same connections (LinkedIn, 2018)
Risks
- A large group conversation fans out on delivery; capping group size keeps that bounded
- InMail is metered, so credits live in MySQL, never in the message store