Обеспечение надёжности процессов обработки данных

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

Свойства

  • целостность — выполняются ограничения и инварианты;
  • долговечность — подтверждённые данные переживают отказ;
  • доступность — операция выполняется в допустимое время;
  • согласованность — читатель видит допустимую версию состояния;
  • восстановимость — известен и проверен путь возврата к работе;
  • аудируемость — можно объяснить происхождение изменения.

Механизмы

  • транзакции для связанных изменений;
  • ограничения БД вместо проверки только в приложении;
  • идемпотентные команды и ключ дедупликации;
  • журналирование и неизменяемый аудит;
  • checksum для обнаружения повреждения;
  • репликация для доступности;
  • резервные копии для восстановления;
  • шифрование, аутентификация и минимальные права;
  • мониторинг задержки реплики, ошибок и заполнения хранилища.

Репликация не является резервной копией: ошибочное удаление может быстро размножиться на все реплики.

RPO и RTO

  • RPO — сколько данных допустимо потерять по времени;
  • RTO — сколько времени допустимо восстанавливать сервис.

Они определяют частоту копирования, архитектуру и процедуру восстановления.

Частичный сбой обработки

Если транзакция БД завершилась, а публикация события — нет, возникает рассогласование. Типичный способ — сохранить изменение и запись outbox в одной транзакции, а отправку выполнять отдельно с повтором и дедупликацией получателя.

Выбор защиты

Начинаю с угрозы и цены потери, а не со списка технологий:

  1. какие данные критичны;
  2. от какого сбоя или субъекта защищаем;
  3. какой RPO/RTO;
  4. кто имеет доступ;
  5. как регулярно проверяется восстановление.

Бэкап считается рабочим только после успешного тестового восстановления.

Связано: Транзакции принцип ACID, Изоляция транзакций, Оперативная обработка транзакций.

Самопроверка

  • Почему реплика не заменяет backup?
  • Чем идемпотентность помогает при неизвестном результате операции?
  • Как RPO отличается от RTO?