Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Moscow Python Meetup №107. Бесшовные релизы гла...

Moscow Python Meetup №107. Бесшовные релизы глазами разработчика: обновляем код Облака без API

Игорь Анохин (K2 Cloud / Руководитель платформенной разработки).

В докладе разберём, как эволюционируют подходы к обновлению приложений — от Big Bang до Rolling-Out релизов в высоконагруженном облаке. Поговорим о том, что на самом деле требуется от кода, миграций баз данных и API, когда сервисы нельзя останавливать, а клиенты зависят от контрактов годами. Отдельно обсудим, какой ценой достигаются бесшовные релизы и почему бесшовность — это инженерный компропис.

Видео: https://moscowpython.ru/meetup/107/seamless-releases/

Moscow Python: http://moscowpython.ru
Курсы Learn Python: http://learn.python.ru
Moscow Python Podcast: http://podcast.python.ru
Заявки на доклады: https://bit.ly/mp-speaker

Avatar for Moscow Python Meetup

Moscow Python Meetup PRO

January 23, 2026
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. 2
 Обо мне Более 8 лет в Python Веду канал

    Руковожу направлением платформенное разработки в K2 Cloud Красивая_картинка_спикера.png

  2. 4
 K2 Cloud — первое публичное облако собственной разработки в

    России и часть экосистемы К2Тех. 
 Мы создаём инфраструктуру для бизнеса, где всё работает стабильно: от сервисов по моделям IaaS и PaaS до частных облаков и выделенных инсталляций (HaaS). В основе нашего подхода — ответственность за все части сложных комплексных проектов, которые реализуем по собственным высоким стандартам. 
 < 800+ > заказчиков уже доверяют нам свою инфраструктуру 
 < с 2009 > опыт работы на облачном рынке
 < 400+ > экспертов реализуют проекты любой сложности
 [ Про ]
  3. 7
 1) Бизнес хочет быстрого выпуска фичей 2) Чем быстрее

    мы пишем код - тем быстрее мы делаем фичи Зачем говорить про обновление?
  4. 8
 1) Бизнес хочет быстрого выпуска фичей 2) Чем быстрее

    мы пишем код - тем быстрее мы делаем фичи 3) Чем проще код в проекте - тем быстрее мы его пишем Зачем говорить про обновление?
  5. 9
 1) Бизнес хочет быстрого выпуска фичей 2) Чем быстрее

    мы пишем код - тем быстрее мы делаем фичи 3) Чем проще код в проекте - тем быстрее мы его пишем 4) Апдейты напрямую влияют на сложность нашего кода. Зачем говорить про обновление?
  6. 10
 О чем сегодня поговорим? 4-х шаговый апдейт Что нужно

    сделать в коде, чтобы оно работало Обновление с окном обслуживания Обновление без простоя
  7. 19
 Обновление монолитного сервиса 3. Запустить миграции 2. Отключить сервис

    1. Обновить код сервиса 
 Schema
 DB
 Response
 Request
 Service

  8. 20
 Обновление монолитного сервиса 4. Запустить сервис 3. Запустить миграции

    2. Отключить сервис 1. Обновить код сервиса 
 Schema
 DB
 Response
 Request
 Service

  9. 21
 Обновление монолитного сервиса 4. Запустить сервис 3. Запустить миграции

    2. Отключить сервис 1. Обновить код сервиса 
 Schema
 DB
 Response
 Request
 Service

  10. 22
 Обновление монолитного сервиса 4. Запустить сервис 3. Запустить миграции

    2. Отключить сервис 1. Обновить код сервиса 
 Schema
 DB
 Response
 Request
 Service

  11. 23
 Обновление монолитного сервиса 4. Запустить сервис 3. Запустить миграции

    2. Отключить сервис 1. Обновить код сервиса 
 Schema
 DB
 Response
 Request
 Service

  12. 24
 Обновление монолитного сервиса 4. Запустить сервис 3. Запустить миграции

    2. Отключить сервис 1. Обновить код сервиса 
 Schema
 DB
 Response
 Request
 Service

  13. 30
 Big Bang Deployment Плюсы: • Разработчик просто пишет код

    • DevOps пишет простой CI по обновлению кода
  14. 31
 Big Bang Deployment Минусы: Плюсы: • Разработчик просто пишет

    код • DevOps пишет простой CI по обновлению кода
  15. 32
 Big Bang Deployment Минусы: • Временная недоступность сервиса Плюсы:

    • Разработчик просто пишет код • DevOps пишет простой CI по обновлению кода
  16. 33
 Big Bang Deployment Минусы: • Временная недоступность сервиса •

    Имеет большой Blast Radius, поэтому подходит только для небольших сервисов Плюсы: • Разработчик просто пишет код • DevOps пишет простой CI по обновлению кода
  17. 53
 Big Bang Deployment API можно делать частично недоступным. В

    K2 Cloud во время обновления вы не можете управлять инфраструктурой, но виртуальные машины доступны. CREATE

  18. 54
 Big Bang Deployment API можно делать частично недоступным. В

    K2 Cloud во время обновления вы не можете управлять инфраструктурой, но виртуальные машины доступны. CREATE

  19. 55
 Big Bang Deployment API можно делать частично недоступным. В

    K2 Cloud во время обновления вы не можете управлять инфраструктурой, но виртуальные машины доступны. CREATE

  20. 56
 Big Bang Deployment API можно делать частично недоступным. В

    K2 Cloud во время обновления вы не можете управлять инфраструктурой, но виртуальные машины доступны. CREATE

  21. 57
 Big Bang Deployment Минусы: • Временная недоступность сервиса •

    Имеет большой Blast Radius, поэтому подходит только для небольших сервисов Плюсы: • Разработчик просто пишет код • DevOps пишет простой CI по обновлению кода
  22. 58
 Big Bang Deployment Минусы: • Временная недоступность сервиса •

    Имеет большой Blast Radius, поэтому подходит только для небольших сервисов Плюсы: • Разработчик просто пишет код • DevOps пишет простой CI по обновлению кода
  23. 60
 Big Bang Deployment Graceful shutdown с обработкой Linux сигналов

    Что нужно от приложения, чтобы сократить Blast Radius?
  24. 61
 Big Bang Deployment Health-Check и Heartbeat Graceful shutdown с

    обработкой Linux сигналов Что нужно от приложения, чтобы сократить Blast Radius?
  25. 62
 Big Bang Deployment Health-Check и Heartbeat Иметь структурированные логи:

    request_id, app_version, host Graceful shutdown с обработкой Linux сигналов Что нужно от приложения, чтобы сократить Blast Radius?
  26. 63
 Big Bang Deployment Health-Check и Heartbeat Иметь структурированные логи:

    request_id, app_version, host Graceful shutdown с обработкой Linux сигналов Maintenance Service. Уметь работать с тем, что другой сервис ушёл в Maintenance
 Что нужно от приложения, чтобы сократить Blast Radius?
  27. 64
 Big Bang Deployment Health-Check и Heartbeat Иметь структурированные логи:

    request_id, app_version, host Graceful shutdown с обработкой Linux сигналов Maintenance Service. Уметь работать с тем, что другой сервис ушёл в Maintenance
 Фоновые задачи/очереди/кеши могут содержать старую структуру Что нужно от приложения, чтобы сократить Blast Radius?
  28. 73
 1) Количество железа растет
 2) Количество сервисов растет
 3)

    Количество заказчиков растет
 Big Bang Deployment в K2 Cloud
  29. 74
 1) Количество железа растет
 2) Количество сервисов растет
 3)

    Количество заказчиков растет
 4) Требования заказчиков растет
 Big Bang Deployment в K2 Cloud
  30. 75
 1) Количество железа растет
 2) Количество сервисов растет
 3)

    Количество заказчиков растет
 4) Требования заказчиков растет
 
 <График двигается вверх и вправо>
 Big Bang Deployment в K2 Cloud
  31. 98
 Обновление без простоя Rolling Out (Canary, Ring-based) Что нужно

    от DevOps: kubectl set image \ deployment/application \ application=application:1.23.1 Actor

  32. 99
 Обновление без простоя Rolling Out (Canary, Ring-based) Что нужно

    от DevOps: kubectl set image \ deployment/application \ application=application:1.23.1 Actor

  33. 113
 4-х шаговый апдейт 0. Обновление схемы БД Entity
 Response


    Request
 ALTER TABLE users ADD COLUMN phone STRING DEFAULT NULL;
  34. 114
 4-х шаговый апдейт 0. Обновление схемы БД Entity
 Response


    Request
 ALTER TABLE users ADD COLUMN phone STRING DEFAULT NULL;
  35. 132
 4-х шаговый апдейт 2. Убираем старую запись в базу

    Код может читать оба варианта Entity
 Response
 Entity
 Dual-Write Request
 Request

  36. 133
 4-х шаговый апдейт 2. Убираем старую запись в базу

    Код может читать оба варианта Entity
 Response
 Entity
 Dual-Write Request
 Request

  37. 134
 4-х шаговый апдейт 2. Убираем старую запись в базу

    Код может читать оба варианта Entity
 Response
 Entity
 Dual-Write Dual-Read Request
 Request

  38. 135
 4-х шаговый апдейт 2. Убираем старую запись в базу

    Код может читать оба варианта Entity
 Response
 Request
 Entity
 Dual-Read
  39. 136
 4-х шаговый апдейт 2. Убираем старую запись в базу

    Код может читать оба варианта Entity
 Response
 Request
 Entity
 Dual-Read Request

  40. 137
 4-х шаговый апдейт 2. Убираем старую запись в базу

    Код может читать оба варианта Entity
 Response
 Request
 Entity
 Dual-Read
  41. 143
 4-х шаговый апдейт. Как добавить поле в БД 1)

    Мигрируем БД. Добавляем новые поля так, чтобы старая версия приложения не заметила этого;
 2) Обновляем код. Он имеет записывать и читать как старый формат, так и новый. Он должен уметь принимать старый вид запросов
 3) Обновляем код. Читаем оба формата данных БД. Пишем только новый
 4) Мигрируем БД. Чистим базу, чтобы убрать старые записи;
 5) Обновляем код. Убираем поддержку чтения старого формата.

  42. 145
 4-х шаговый апдейт. Как убрать поле из БД 1)

    Обновляем код. Код предполагает, что поля МОЖЕТ НЕ БЫТЬ
 2) Мигрируем БД. Чистим базу, чтобы убрать старый код
 3) Обновляем код. Код УВЕРЕН, что поля нет

  43. 147
 4-х шаговый апдейт. Как переименовать поле в БД 1)

    Добавляем новое поле в БД за 4.5 шага
 2) Удаляем старое поле из БД за 3 шага

  44. 154
 Что нужно изменить в коде? Как можно меньше строгих

    валидаций: a) Не валидировать лишние request поля на сервере b) Не валидировать лишние response поля на клиенте c) Не валидировать лишние поля из БД
  45. 155
 Что нужно изменить в коде? Как можно меньше строгих

    валидаций: a) Не валидировать лишние request поля на сервере b) Не валидировать лишние response поля на клиенте c) Не валидировать лишние поля из БД Иметь политику депрекации API для микросервисов и публичных клиентов. Новые API поля только добавлять.
  46. 156
 Что нужно изменить в коде? Как можно меньше строгих

    валидаций: a) Не валидировать лишние request поля на сервере b) Не валидировать лишние response поля на клиенте c) Не валидировать лишние поля из БД Иметь политику депрекации API для микросервисов и публичных клиентов. Новые API поля только добавлять. Убрать SQL. Если SQL - делать все поля с DEFAULT значениями

  47. 157
 Что нужно изменить в коде? Как можно меньше строгих

    валидаций: a) Не валидировать лишние request поля на сервере b) Не валидировать лишние response поля на клиенте c) Не валидировать лишние поля из БД Иметь политику депрекации API для микросервисов и публичных клиентов. Новые API поля только добавлять. Идемпотентность операции где это возможно Убрать SQL. Если SQL - делать все поля с DEFAULT значениями

  48. 158
 Что нужно изменить в коде? Использовать maintenance если релиз

    сложный Как можно меньше строгих валидаций: a) Не валидировать лишние request поля на сервере b) Не валидировать лишние response поля на клиенте c) Не валидировать лишние поля из БД Иметь политику депрекации API для микросервисов и публичных клиентов. Новые API поля только добавлять. Идемпотентность операции где это возможно Убрать SQL. Если SQL - делать все поля с DEFAULT значениями