Распределенный журнал упреждающей записи был открыт WePay. Изначально Waltz был разработан как реестр денежных транзакций в системе WePay и с тех пор был обобщен для использования в других распределенных системах, требующих сериализуемой согласованности.
Разработчики говорят, что Waltz похож на существующие системы журналов, такие как Kafka, в том, что он принимает, сохраняет и распространяет данные транзакций, которые были созданы или потреблены многими службами. Отличие Waltz заключается в том, что он предоставляет механизм, который можно использовать для достижения сериализуемой согласованности в распределенных приложениях, поскольку он обнаруживает конфликтующие транзакции до того, как они будут записаны в журнал. Waltz считается единственным источником истины, а не базой данных, и он обеспечивает высоконадежную архитектуру системы, ориентированную на журнал.
Разработчики описывают Waltz как журнал с упреждающей записью. Записи транзакций неизменяемы и упорядочены в журнале, и если приложение применяет транзакции к своей собственной базе данных в том же порядке, результат должен быть детерминированным. Процесс выглядит следующим образом:
Приложение составляет сообщение о транзакции, которое состоит из описаний предполагаемого изменения данных.
Приложение отправляет его в Waltz. На данный момент база данных приложения еще не обновлена.
Waltz получает сообщение о транзакции и сохраняет его в журнале Waltz.
Waltz отправляет сообщение о транзакции обратно в приложение.
Приложение получает сообщение о транзакции и применяет изменение данных к своей собственной базе данных.
Журнал Waltz содержит все изменения данных. Обновления баз данных приложений управляются сообщениями (данными транзакций) от Waltz, поэтому Waltz становится держателем первичной информации, в то время как служебные базы данных являются производной информацией, материализованными представлениями журнала Waltz.