1. A method comprising: receiving a transaction from a client device, the transaction including a sequence of data operations for a plurality of data components; adding one or more data operations to the transaction; for each of the data operations: identifying one or more records associated with the data operation; locking the one or more identified records; identifying one of the plurality of data components to process the data operation; transmitting the data operation to the identified data component; receiving a reply from the identified data component, the reply including information used to undo or redo the data operation; and writing the data operation and the information from the reply to a log; after receiving replies for each data operation, determining whether each data operation has been made stable; transmitting a command to each of the plurality of data components to indicate that the data operations are permitted to be written to stable storage when it has been determined that each of the data operations have been made stable; writing a transaction commit record to the log; releasing any locks on the identified records; committing the transaction after each of the data operations of the transaction and the commit record have been determined to be stable; and transmitting a committed transaction reply to the client device to indicate that the transaction has been committed.