Parameterized Reasoning for Distributed Systems with Consensus
Programmers make building distributed systems tractable by using a wide variety of abstractions to compose complex systems out of smaller components—for example, managing coordination between distributed processes using libraries that provide locking or consensus. Unfortunately, verification techniques for distributed systems typically do not match this style of programming, and modeling distributed systems often requires erasing these layers of abstraction to represent an entire program as a monolithic whole. This paper presents a new approach to automatically verifying distributed systems that use consensus as a component. We first define a new system model that offers a carefully designed consensus abstraction to provide global semantics for consensus while eliding specific algorithmic details. We then present a sound and relatively complete parameterized verification procedure for safety properties of distributed systems that use consensus. We further show how to use this procedure to synthesize correct systems given partial process definitions. We build a tool, Treaty, and show on several case studies that we are able to successfully synthesize and verify distributed systems that build on consensus without having to reason directly about the internals of consensus.
READ FULL TEXT