Slide 1

Slide 1 text

Django Blue-Green Migrations

Slide 2

Slide 2 text

Вступление: Обо мне - 6 лет опыта Backend разработки - 4 года опыта работы в HoReCa // FoodTech - 2 года опыта в позиции Team Lead Меня зовут Алексей Я – Team Lead команды разработки Мобильного приложения и Сайта - Токио Сити

Slide 3

Slide 3 text

Вступление: О Компании Фаст Софт Цифровая платформа для HoReCa & QSR Foodtech 80+ ресторанов 40+ dark-kitchen работают с нашими продуктами 7 Городов присутствия 6 Брендов ресторанов Одна экосистема вместо набора систем Сайт и МП, доставка, ресторанная автоматизация, склад, финансы, аналитика — в одной системе Продукт→Архитектура→Эксплуатация Витрины · Доставка · Ресторан · Склад · Финансы · Аналитика Фокус: на бизнес результат 24/7 поддержка и надёжная эксплуатация ИТ-ландшафта

Slide 4

Slide 4 text

О теме доклада - Об одном очень неудачном релизе - Об инженерном вызове и горящих глазах - О Балансе между процессами и технологиями - Об опыте патчинга Django Command makemigrations

Slide 5

Slide 5 text

Акт I: Когда деревья были большими

Slide 6

Slide 6 text

Контекст: 2022г. Стоимость ошибки тогда - нам еще лишь предстояло узнать

Slide 7

Slide 7 text

Ошибка: Утро Утрат

Slide 8

Slide 8 text

Схема БД уехала вперед - назад дороги нет

Slide 9

Slide 9 text

Цена отсутствия практик Приложение оставалось недоступно почти весь день

Slide 10

Slide 10 text

Последствия

Slide 11

Slide 11 text

Акт II: Благими Намерениями

Slide 12

Slide 12 text

Контекст: Год спустя

Slide 13

Slide 13 text

Выбор решения

Slide 14

Slide 14 text

Canary Deployment

Slide 15

Slide 15 text

Blue-Green Deployment

Slide 16

Slide 16 text

Что делать с согласованностью БД?

Slide 17

Slide 17 text

А что, если… Разделить миграцию на 2 фазы?

Slide 18

Slide 18 text

Django: Blue-Green Migrations

Slide 19

Slide 19 text

Давайте попробуем!

Slide 20

Slide 20 text

Акт III: Инженерная Романтика

Slide 21

Slide 21 text

План реализации:

Slide 22

Slide 22 text

Двухфазные миграции в Django

Slide 23

Slide 23 text

Разделение операций

Slide 24

Slide 24 text

Редкие операции

Slide 25

Slide 25 text

Django: пример

Slide 26

Slide 26 text

Ну как можно не любить Django?

Slide 27

Slide 27 text

Django: Drop Default

Slide 28

Slide 28 text

Django: Issue

Slide 29

Slide 29 text

Django: Release Note’v5.0

Slide 30

Slide 30 text

Django: Обновляемся

Slide 31

Slide 31 text

Django: Drop Alias

Slide 32

Slide 32 text

Всему Свое Время…

Slide 33

Slide 33 text

Акт IV: Новая Надежда

Slide 34

Slide 34 text

Как перейти на дневные релизы?

Slide 35

Slide 35 text

Контекст: Начало 2025г.

Slide 36

Slide 36 text

BlueGreen’25 - Roadmap

Slide 37

Slide 37 text

Архитектурный Комитет Или как спрятать слона в комнате

Slide 38

Slide 38 text

DevOps: невозможное возможно

Slide 39

Slide 39 text

Обновление Стека Python3.13 // Django5.1 // Ruff

Slide 40

Slide 40 text

Рефакторинг ветки

Slide 41

Slide 41 text

CodeReview Осуждаю подход, каким образом были внесены эти доработки, нарушая все принципы ООП ©

Slide 42

Slide 42 text

Expand & Contract Pattern Избыточно для всех релизов, но необходимо в ряде случаев

Slide 43

Slide 43 text

Взгляд вглубь

Slide 44

Slide 44 text

2 Перехода // 4 Миграции

Slide 45

Slide 45 text

Акт V: Граница Применимости

Slide 46

Slide 46 text

Спор двух лидов

Slide 47

Slide 47 text

Ключевой вопрос Кто является потребителем БД?

Slide 48

Slide 48 text

Проблема двух-фазных миграций

Slide 49

Slide 49 text

Пазл сложился

Slide 50

Slide 50 text

Дневной Релиз

Slide 51

Slide 51 text

Финал: Выводы ● Технологии не заменяют инженерного мышления и контрактов ● Когда рисуешь глаз - смотри на ухо © ● Инженерная зрелость - это умение понять, какую проблему ты решаешь на самом деле И отказаться от красивого, но бесполезного решения ● Если решения нигде нету - возможно, оно никому и не нужно

Slide 52

Slide 52 text

Blue-Green мы все таки внедрили И вернулись к дневным релизам

Slide 53

Slide 53 text

Спасибо за внимание!

Slide 54

Slide 54 text

Прямая, обратная и полная совместимость Classic article by Robert Yakota

Slide 55

Slide 55 text

Паттерн Expand & Contract Об обеспечении полной совместимости с контрактом в БД

Slide 56

Slide 56 text

Django Blue-Green Migrations Репозиторий Github https://github.com/Futusio/django-t wo-phase-migrations

Slide 57

Slide 57 text

Telegram ● История Blue-Green’a и другие эпосы ● Tech Заметки из log’a в IT ● Ссылки из доклада & контакт для связи

Slide 58

Slide 58 text

Blitz Time Ответы на ваши вопросы