A Tale of Four Fuzzers
13 days ago
- #fuzzing
- #performance-optimization
- #distributed-systems
- TigerBeetle's routing algorithm was overhauled to handle varying network topologies, leading to the addition of four different fuzzers.
- The system ensures data durability through replication across multiple machines, with an append-only hash-chained log of prepare messages.
- Initial replication used a simple ring topology, which was efficient but had issues with static network assumptions and lacked redundancy.
- Adaptive Replication Routing (ARR) was introduced, placing the primary in the middle of the ring and dynamically adjusting the replica order based on performance.
- ARR avoids modeling network conditions directly, instead measuring replication performance end-to-end to determine the best route.
- Five fuzzers were developed to test ARR, including positive and negative space testing, exhaustive enumeration, and whole-system simulation.
- Fuzzers revealed bugs in the cost function and fuzz factor, leading to deeper understanding and improvements in the routing algorithm.
- The importance of minimal interfaces for effective fuzzing was highlighted, emphasizing data-oriented design principles.
- Testing strategies included deterministic and random seeds, boundary testing, and performance fuzzing to ensure robustness and optimal routing.
- The post concludes with key takeaways on fuzzing strategies, interface design, and the value of fuzzers in uncovering both code and conceptual bugs.