Continuous Deployment by Smartling, Inc
#SmartlingDevLove
Andrey AkselrodSmartling, 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 testingo integration testingo 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 RPSo avg resp time & percentileo error rateso CPU Utilizationo 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