Backend-инженерия вокруг Python: БД и данные, надёжность, очереди, CI/CD, Docker, Kubernetes, сеть.
- https://system-design.space/chapter/database-selection-framework
- CAP theorem
- OLTP vs OLAP
- SQL vs NoSQL
- Почему не всё в PostgreSQL?
- ACID + уровни изоляции транзакций
- нормализация vs денормализация
- N+1 проблема
- Управление схемой БД как кодом
- Zero-downtime миграции
- Rollback-и и обратная совместимость
- Миграции != deploy
- schema migration vs data migration
- Как вы деплоите миграции без простоя?
- Индекс = ускорение чтения за счёт кеша
- B-tree по умолчанию
- read-heavy vs write-heavy
- composite indexes
- covering index
- Индексы вредят при write-heavy нагрузке и при низкой селективности
- EXPLAIN (ANALYZE)
- Почему индекс есть, а запрос медленный?
- Взаимная блокировка транзакций
- Lock graph
- Deadlock detection
- Причины: разный порядок обновления строк | длинные транзакции
- SELECT ... FOR UPDATE
- единый порядок захвата ресурсов
- короткие транзакции
- retry
- Язык бизнеса
- Измеряемые цели
- Error budget
- SLA — договорное обязательство
- SLO — внутренняя цель
- SLI — метрика
- Почему нельзя делать SLA 100?
- At-least-once delivery
- Exactly-once — почти миф
- Consumer responsibility
- ACK → сообщение обработано
- NOACK / timeout → requeue
- Типовые решения: RabbitMQ, SQS, Kafka
- Что будет если consumer упал после обработки, но до ACK?
- CI != CD
- Цель — быстро и безопасно доставить код в прод
- Минимум != примитив
- Минимальный pipeline CI: Checkout -> Install deps -> Linters -> Tests -> Build -> Push image
- Минимальный pipeline CD: Deploy (rolling / blue-green) -> Smoke check -> Rollback при ошибке
- Linters != форматирование
- Автоматизация code review
- Python stack (типовой senior-набор): ruff — быстрый all-in-one, black — форматирование, mypy — типы, vulture - stale code
- HTTP: методы, коды, идемпотентность
- REST vs RPC
- как работает TCP (в общих чертах)
- keep-alive, timeouts
- Docker layers
- Cache invalidation
- один RUN: меньше слоёв & меньше образ
- несколько RUN: разные cache boundaries & dev vs prod stages
- правильный порядок инструкций
- multi-stage builds
- .dockerignore
- кеш pip / poetry
- buildkit
- Почему изменение кода ломает кэш зависимостей?
Ставим миникуб и пишем хеловорд вебапишку на fastapi. Тебе понадобится деплоймент, сервис, ингрес и конфигмап Остальное можно просто почитать что и зачем. https://minikube.sigs.k8s.io/docs/start/?arch=%2Flinux%2Fx86-64%2Fstable%2Fbinary+download
- Deployment
- Service
- ConfigMap
- Secret
- Ingress
- HPA
- Deployment — управляет репликами
- Service — стабильная точка доступа внутри кластера
- Ingress — вход снаружи кластера
- Можно ли жить без Ingress? (конечно)
- scale по CPU / memory / custom metrics
- Какие проблемы HPA не решит?
- контроль размещения pod-ов по нодам
- fault domains
- не класть все pod’ы на один node
- spread по зонам
- Зачем anti-affinity если есть HPA?