System Design: Distributed Transactions and Two-Phase Commit