Patterns for solving distributed systems problems in our applications
Modern applications increasingly tend to be full on distributed systems and consequently suffer from all the challenges of working with distributed systems. This talk is based on practical project experiences and talks about some of these challenges and patterns for addressing them. It is based on experiences in real world projects and uses a simplified representation of one of these projects to express the core ideas. These patterns are heavily inspired by the world of nosql databases.
- Context setting Introduces a sample problem exhibiting distributed system characteristics which will be used in the rest of the talk - Consistency Explores typical consistency challenges by using the sample problem.Introduces a few different patterns for addressing them. - Reasoning about system tradeoffs using CAP and PACELC - Pattern for detecting inconsistencies - Pattern for applying tunable consistency during writes - Pattern for applying tunable consistency during reads - Recovery Explores patterns for how applications can recover when facing consistency issues. Once again uses the sample problem to explore patterns - Using hinted handoffs and healing during application writes - Read repair and healing during reads - Background full node repairs - Immutability Explores patterns for how applications can achieve immutability in a scalable fashion. - Event sourcing or new entries for versions - Background compactions - Time and clocks Explores typical problems distributed systems face due to clock skew and time dependence. Explores patterns we can use to address these problems using the sample application - Use logical time - Use time synchronization patterns and monitoring to surface time skew - Model time skew deltas in domain - Testing Explores typical approaches to testing distributed systems issues. - Tools like Jepsen - TLA+ specifications