Engineering challenges FoundationDB began with ambitious goals for both high performance per node and scalability . We knew that to achieve these goals we would face serious engineering challenges while developing the FoundationDB core. We’d need efficient asynchronous communicating processes, the speed and I/O efficiency of C++, and extensive simulation to engineer for reliability and fault tolerance on large clusters. Flow provides the asynchronous runtime for these processes. FoundationDB uses standard C++ coroutines with Flow futures, streams, and cooperative scheduling. The C++ compiler preserves each coroutine’s execution state across suspension points, and Flow connects awaited operations to the event loop. The same runtime supports deterministic simulation of the system, including its physical interfaces and failure modes. Flow supports three major engineering goals: high performance through native code, asynchronous concurrency through coroutines and message passing, simulation support for testing.…