Using Pot and LSD to improve ACID transactions
State machine replication is one of the most popular ways to achieve fault tolerance. In a nutshell, the state machine replication approach maintains multiple replicas that both store a copy of the systems data and execute operations on that data. When requests to execute operations arrive, an "agree-execute" protocol keeps replicas synchronized: they first agree on an order to execute the incoming operations, and then execute the operations one at a time in the agreed upon order, so that every replica reaches the same final state.
Nowadays, with multi-core processors, there is a dilemma between improving performance by taking advantage of the available processor cores to execute multiple operations simultaneously, and the need to enforce the replicas to abide to the operation order that they agreed upon so that the system remains consistent. In this talk we will propose a solution to this dilemma in three steps: We (1) propose to execute operations as serializable transactions, (2) develop a new concurrency control protocol that ensures that the concurrent execution of a set of transactions respects the serialization order the replicas agreed upon, and (3) propose a modification to the typical API to declare transactions, which allows transactions to execute their logic over an abstract replica state, which results in fewer conflicts between transactions, and thus improving performance by improving the effectiveness of the speculative executions.
An experimental evaluation shows a performance improvement of a state-machine-replicated server up to 4×, reaching up to 75% the performance of a concurrent fault-prone server.