Одни входы — один результат

Любимый вопрос аудитора — «покажите, как получилась эта цифра». На платформе ответ всегда один: проиграйте журнал.

Что здесь значит детерминизм

Бизнес-логика никогда не читает системные часы, не берёт случайных чисел и не использует плавающую точку. Время и другие внешние данные приходят как записанные события. Поэтому одни и те же входы всегда дают один и тот же результат — на любой машине и в любое время.

Журнал — это истина

Каждое изменение дописывается в журнал, который только растёт. Состояние, которое вы видите, — чистая функция этого журнала: восстановление из журнала даёт ровно то состояние, что дало исполнение. Исправления — новые записи, а не правки.

Повтор журнала даёт тот же результатЖурнал: входы по порядку, только дописываетсяe1e2e3e4e5e6Работа сегодняПовтор через годна чистой машинеОстаткидо центаОстаткидо цента=Одни входы — один результат
Журнал — единственный вход. Проигранный позже на другой машине, он даёт те же остатки.
Возьмите журнал прошлого года, проиграйте его на чистой машине — получите те же остатки до цента. Спросите, что система считала верным на 31 марта, — получите то, что она считала тогда, а не то, что известно сейчас.

Два вида времени

Каждая запись хранит два времени: когда факт был верен в мире и когда система о нём узнала. Можно спросить и «какой была цена 1 марта?», и «какой мы считали цену на 1 марта по состоянию на 15 марта?» — второй вопрос как раз задают аудиторы и суды.

Всё, что из этого следует

  • Журнал аудита с защитой от подделки: каждое действие и отказ сцеплены хешами, поэтому правка, удаление или обрезка записи обнаруживаются
  • Изменения ровно один раз: повторный запрос никогда не применится дважды
  • Репетиция: изменение правила можно проиграть по истории и увидеть, какие результаты оно изменит, до включения
  • Воспроизводимые программы: две сборки образа операционной системы из одних исходников дают побайтно одинаковый файл
  • Движок рассуждений тоже детерминирован: два одинаковых экземпляра думают и действуют одинаково, любой прогон можно повторить

Детерминизм — не надстройка, которую проверяют в конце. Это правило кода: у бизнес-логики просто нет способа прочитать часы или взять случайное число.

Следующий шаг

Посмотрите на примере своего бизнеса

Запросите демо: покажем платформу на ваших процессах и договоримся, где будут жить ваши данные, — в нашем облаке или на ваших узлах.