Обеспечение надёжности процессов обработки данных
Надёжность данных — это не только доступность БД. Процесс должен выдавать корректный результат, не терять подтверждённые изменения и уметь восстанавливаться после частичного сбоя.
Свойства
- целостность — выполняются ограничения и инварианты;
- долговечность — подтверждённые данные переживают отказ;
- доступность — операция выполняется в допустимое время;
- согласованность — читатель видит допустимую версию состояния;
- восстановимость — известен и проверен путь возврата к работе;
- аудируемость — можно объяснить происхождение изменения.
Механизмы
- транзакции для связанных изменений;
- ограничения БД вместо проверки только в приложении;
- идемпотентные команды и ключ дедупликации;
- журналирование и неизменяемый аудит;
- checksum для обнаружения повреждения;
- репликация для доступности;
- резервные копии для восстановления;
- шифрование, аутентификация и минимальные права;
- мониторинг задержки реплики, ошибок и заполнения хранилища.
Репликация не является резервной копией: ошибочное удаление может быстро размножиться на все реплики.
RPO и RTO
- RPO — сколько данных допустимо потерять по времени;
- RTO — сколько времени допустимо восстанавливать сервис.
Они определяют частоту копирования, архитектуру и процедуру восстановления.
Частичный сбой обработки
Если транзакция БД завершилась, а публикация события — нет, возникает рассогласование. Типичный способ — сохранить изменение и запись outbox в одной транзакции, а отправку выполнять отдельно с повтором и дедупликацией получателя.
Выбор защиты
Начинаю с угрозы и цены потери, а не со списка технологий:
- какие данные критичны;
- от какого сбоя или субъекта защищаем;
- какой RPO/RTO;
- кто имеет доступ;
- как регулярно проверяется восстановление.
Бэкап считается рабочим только после успешного тестового восстановления.
Связано: Транзакции принцип ACID, Изоляция транзакций, Оперативная обработка транзакций.
Самопроверка
- Почему реплика не заменяет backup?
- Чем идемпотентность помогает при неизвестном результате операции?
- Как RPO отличается от RTO?