Какая база данных используется в проекте
Что проверяют
Для DevOps-инженера это вопрос не про выбор СУБД, а про эксплуатацию: как база развёрнута, как её бэкапят, как она переживает отказ узла и как в неё попадают миграции. Следом почти всегда спрашивают, когда вы последний раз проверяли восстановление из бэкапа.
Как отвечать
Назовите СУБД и версию, дальше идите по вопросам эксплуатации. На примере PostgreSQL:
- где живёт: managed-сервис облака, виртуальные машины или Kubernetes с оператором вроде CloudNativePG. В managed часть настроек вам недоступна, в Kubernetes нужно понимать, как ведёт себя том при переезде пода;
- отказоустойчивость: потоковая репликация, переключение через Patroni или средствами оператора, что видит приложение в момент смены мастера;
- пулинг соединений: PgBouncer перед базой, режим
transactionи почему в нём не работают сессионные вещи вродеSET,LISTENи advisory-блокировок уровня сессии; - бэкапы: pgBackRest или WAL-G, полная копия плюс архив WAL для восстановления на момент времени (PITR), хранение в объектном хранилище, регулярная проверка восстановления;
- миграции: Flyway, Liquibase или инструмент фреймворка, отдельный шаг пайплайна или job до выкатки приложения, совместимость схемы с предыдущей версией кода;
- наблюдаемость:
postgres_exporterв Prometheus,pg_stat_statementsдля тяжёлых запросов, алерты на отставание реплики, место на диске и число соединений; - секреты: пароли в Vault или в менеджере секретов облака, а не открытым текстом в переменных пайплайна.
Если рядом есть Redis или ClickHouse, скажите, какую роль они играют: кеш, очередь, аналитика.
Где спотыкаются
Говорят «бэкапы есть» и не могут вспомнить, когда проверяли восстановление и сколько оно длится. Непроверенный бэкап это надежда, а не бэкап.
Катят миграцию, которая удаляет или переименовывает колонку, вместе с новым кодом. Во время rolling update или отката старые поды падают. Правильный порядок: расширить схему, переключить код и только потом удалить старое.
Поднимают базу в Kubernetes как обычный Deployment, без StatefulSet или оператора, без понимания томов и anti-affinity, а потом теряют данные при переезде пода.