azovdevmeetup 2016 | zero downtime — как релизить продукт миллионам...

34
Zero downtime – как релизить продукт миллионам пользователей Виктор Димбровский, Аркадия

Upload: jsc-arcadia-inc

Post on 13-Apr-2017

308 views

Category:

Software


2 download

TRANSCRIPT

Page 1: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Zero downtime –как релизить продукт миллионам пользователей

Виктор Димбровский, Аркадия

Page 2: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

О себе

2

Виктор ДимбровскийАркадия

[email protected]

Работаю в Аркадии с 2013 года, тимлид в одной из команд, разрабатывающих платформу дистанционного обучения с большим количеством пользователей.

Page 3: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

О проекте•Веб-платформа дистанционного

обучения

•Более 4 млн активных пользователей

•Пользователи из Европы и США

•Доступ 24/7

3

Page 4: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Доступность системыDowntime – метрика, которая определяет период, в течение которого система не выполняет свои основные функции

Uptime – метрика, которая определяет период, в течение которого система доступна и выполняет свои функции.

4

Page 5: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Доступность системы

Downtime = 1/20 = 5%

Uptime = 19/20 = 95%

5

19 дней 1 день

Online Offline

Page 6: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Допустимый downtimeГарантированный uptime >= 99.9%

Допустимый downtime~ 8 часов 46 минут в год

~ 44 минуты в месяц

https://uptime.is/99.9

6

Online Offline

Page 7: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Причины простоя

7

Программные проблемы

Аппаратныепроблемы

Форс-мажор

Page 8: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

ЗадачаУстранить или минимизировать все возможные факторы, которые могут привести к простою системы

8

OPS Development

Page 9: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Зоны ответственностиЭксплуатация системы в штатном режиме

Обеспечение высокого качества продукта

Релиз новой версии

9

Page 10: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

10

Это downtime, а во время downtime-а где-то грустит котёнок

Page 11: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Формула успешного релиза

11

Page 12: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Сделайте релиз рутиной

12

Page 13: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Убедитесь, что процесс релиза прозрачен для всех его участников

13

Page 14: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Максимально подробно спланируйте и задокументируйте процесс релиза

14

Page 15: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Стратегия

15

Page 16: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Меньше и чаще

16

Небольшие и частые релизы несут в себе меньше рисков

Page 17: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Ничего лишнего

17

Всё, что может быть сделано безотносительно релиза, должно остаться за пределами релиза.

Page 18: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Что нам готовит день грядущий?

18

Подробно изучите изменения в новом релизе, рассмотрите потенциальные риски.

Page 19: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Что важнее: качество или сроки?

19

¯\_(ツ)_/¯

Page 20: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Обновляйтесь в период минимальной нагрузки

20

Меньше пользователей могут заметить нестабильность в работе системы и проблемы, в случае из возникновения.

Page 21: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Основной сценарий и запасной план

21

Список всех необходимых работ, последовательность их выполнения, план на случай наступления риска, и т.д.

Определите необходимые ресурсы и назначьте менеджера релиза.

Page 22: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Коммуникация важна как никогда!

22

Page 23: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Нет предела совершенству

23

Всегда выполняйте работу над ошибками.

Page 24: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Разработчикам

24

Page 25: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Начните думать о своём коде с точки зрения релиза

25

Как вы собираетесь это релизить? Установите очередность, определите, что требуется для обновления (обновить код, базу, и т.д.)

Page 26: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Одна задача — один компонент

26

Разбейте систему на компоненты, которые можно релизитьнезависимо — single deployable.

Page 27: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Помните об обратной совместимости!

27

Устраните потенциальные проблемы несовместимости уже обновлённого компонента и ещё не обновлённых.

Page 28: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Наш опыт

28

Page 29: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Особенности релиза

- Одно основное веб-приложение и множество неосновных компонентов

- Каждые 2 недели- Утро субботы- Практика пилотного релиза- 1 неделя после релиза – мониторинг- Приостановка некоторых компонентов на

период обновления системы

29

Page 30: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Особенности релиза

- Используется собственное решение для развертывания новой версии

- Процесс обновления максимально автоматизирован

- Процесс тестирования конфигурации автоматизирован

- Балансировка нагрузки и несколько копий каждого веб-приложения

30

Page 31: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Упрощённая схема релиза

31

1

Обновление БД до обновления приложения

Обновление всех сервисов и компонентов, кроме основного приложения

Обновление основного приложения для пилотных пользователей

Обновление основного приложения для пилотных пользователей

Обновление БД после обновления приложения

2 3 4 5

День релиза

1 неделя до релиза

1 неделя после релиза

Развертывание новых компонентов

Изменения данных по запросу

1 Часть релиза

Не включено в релиз

Page 32: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Обратная сторона

- Нужно больше думать!

- Дополнительные издержки

- Больше бюрократии

32

Page 33: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Выводы

- Релиз крупного веб-приложения — это всегда интересная инженерная задача

- Сложно, но возможно!

- Семь раз отмерь — один раз отправь в релиз

- Результат оправдывает издержки

33

Page 34: AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользователей | Виктор Димбровский

Виктор Димбровский, Аркадия

Q & A