continuous deployment (in russian)
TRANSCRIPT
Continuous Deployment
by Smartling, Inc
#SmartlingDevLove
Andrey Akselrod
Smartling, Founder & CTO
@chelya
Alexey Shesterov
Smartling, Senior Engineer
@AlexShesterov
Что мы делаем?
● Cloud-based enterprise software platform for
translation management
● Used for websites and dynamic Web
applications, desktop & mobile apps,
business documents, and all kinds of digital
content
Клиенты
Smartling Operational Scale
3active data centers: US
East, US West, Ireland
400+servers
~200production
deployments a month
2B+page views/month
84K+metrics monitored
17K+triggers for alerts
Техническая Команда
Нью-Йорк: 19
Днепропетровск: 32
Киев: <Набираем команду>
Технологии
Java+
Everything you can imagine
Continuous Deployment == Continuous
Releases
Continuous Deployment != Continuous
Integration
Мухи отдельно, котлеты отдельно
Жизнь До Того Как
● Тонна всего идет в релиз
○ Баги гаранитированны
○ Сложно понять из кучи нового кода где и что не
работает
○ Откатить назад сложно, иногда невозможно
● Баги которые бысто фиксятся ждут неделями,
чтобы быть запущенными в прод
● Давление закончить функциональность любой
ценой до запуска. Качество страдает
● В день релиза никто не работает и все в
ожидании бессонной ночи
● Фидбэк от пользователей приходит поздно
после существенного вложения времени в
девелопмент
● Отсутствие раннего фидбэка увеличивает
нагрузку на планирование и скатывается в
waterfall вместо agile
● Результаты фидбэка ждут следующего релиза -
циклы девелопмента заметно удлиняются
OODA Loop
Переходный период - команда
Сложности переходного периода
● Обязательна поддержка менеджментом
o Переход занимает время и ресурсы
o Полный переход может занять 6-8 месяцев
● Team culture претерпит существенные изменения
o Найти champions и заручится их поддержкой
o Лучше получить поддержку других отделов
компании обьяснив что они получат в конце
Сложности переходного периода
● Хороший повод создать DevOps
● Не нужно ждать идеальной имплементации.
Начните с одного компонента и с одной кнопки.
● Празднуйте каждое небольшое продвижение вперед
Что мы делали
● Команда пассивно-агессивно делать ничего не
хотела
● Перед запуском мы много убеждали, дискутировали
и шантажировали команду.
● Отменили недельные релизы.
● Добавили стикеры на мониторы на каждый деплой.
Смайлики и жопы. Смайлик - успешный деплой,
жопа - деплой проблемный
● Поначалу все боялись деплоить, постепенно
привыкли.
Смайлики и жопы
Правила Continuous Deployment
● Master (git) or Trunk (svn) is always stable
● Every commit to master (trunk) is deployed to prod asap
● Continuous integration
● Automated testing => where is QA Team?
● Single button deployment
● Monitoring
● Zero downtime software update
● Communication. Every deployment is in chat. Every
deployment should be confirmed. Skype => Slack
● Разработчик ответственный за фичу от начала и до
конца
QA
● Максимальная автоматизацияo unit testing
o integration testing
o front end testing - нужен баланс!
● Ручное тестирование делается
разработчиками, не QA
● QA ответственны за автоматизацию
Continuous Integration
● Bamboo or Jenkins
● Every branch is built and tested on every
commit
● Only green builds could be deployed
● Build time is critical (fighting for < 10min)
Bamboo
CDeploy
Slack communication
Monitoring
● Examples:o RPS
o avg resp time & percentile
o error rates
o CPU Utilization
o transaction rates
● Correlate Deployments with Metrics
● Мы используем: Splunk, Zabbix, Graphite,
New Relic, Loggly
Splunk
Splunk
● Простой и мощный язык запросоввыбор источника, временного диапазона, группирование, ...
● Визуализация
● Запрос отображается в URLбыстрый обмен запросами в чате
● Сохранённые запросы
● Автоматические уведомления (Alerts)Не нужно изобретать колесо для уведомлений, просто throw new MyException(); или log.warn("My message");
● По коду ошибки — прямо в stack trace! Не нужно подробного описания как воспроизвести ошибку.
Нет необходимости вручную искать ошибку в журналах.
● “Log duty” — «Дежурство по журналам»Поиск ошибок, анализ медленных запросов к БД, анализ кода
► Находим проблемы до того,
как их найдут клиенты!
Splunk
New Relic
New Relic
● Метрики для Web-приложений
● Отслеживание всех уровней, вкл. JS
● Метки deployment’ов
● Анализ поведения пользователей
● Рассылка отчётов
Zabbix
Wallboards
DB Updates
● Use DB version control system. DBMaintain
● Every change to DB is reviewed by two leads
● There is a single button deploy of DB changes
● Two phase DB updates
o Phase 1: new structures, backward compatible
New columns always nullable, etc.
o Phase 2: cleanup of unused stuff
Результаты
● Наступает привыкание - жизнь без
continuous deployment вызывает
недоумение.
● Результат твоей работы сразу начинает
использоваться юзерами. Это клево.
● Менеджмент доволен - идет постоянная
череда запусков. Пользователи довольны
- постоянно идут новые фичи.
● Быстрый фидбек и итерации приводят к
продукту который гораздо лучше
адаптирован к рынку
● Конкуренты не понимают как вы их стали
с легкостью обходить
● Приходит уважение других отделов
компании
● Практически нулевая текучка людей в
команде
Обсуждение
#SmartlingDevLove