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

Continuous deployment Smartling event

  • 1.
  • 2.
    Andrey Akselrod Smartling, Founder& CTO @chelya Alexey Shesterov Smartling, Senior Engineer @AlexShesterov
  • 3.
    Что мы делаем? ●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
  • 4.
  • 5.
    Smartling Operational Scale 3activedata centers: US East, US West, Ireland 400+servers ~200production deployments a month 2B+page views/month 84K+metrics monitored 17K+triggers for alerts
  • 6.
  • 7.
  • 8.
    Continuous Deployment ==Continuous Releases Continuous Deployment != Continuous Integration Мухи отдельно, котлеты отдельно
  • 10.
  • 12.
    ● Тонна всегоидет в релиз ○ Баги гаранитированны ○ Сложно понять из кучи нового кода где и что не работает ○ Откатить назад сложно, иногда невозможно ● Баги которые бысто фиксятся ждут неделями, чтобы быть запущенными в прод ● Давление закончить функциональность любой ценой до запуска. Качество страдает
  • 13.
    ● В деньрелиза никто не работает и все в ожидании бессонной ночи
  • 14.
    ● Фидбэк отпользователей приходит поздно после существенного вложения времени в девелопмент ● Отсутствие раннего фидбэка увеличивает нагрузку на планирование и скатывается в waterfall вместо agile ● Результаты фидбэка ждут следующего релиза - циклы девелопмента заметно удлиняются
  • 15.
  • 16.
  • 17.
    Сложности переходного периода ●Обязательна поддержка менеджментом o Переход занимает время и ресурсы o Полный переход может занять 6-8 месяцев ● Team culture претерпит существенные изменения o Найти champions и заручится их поддержкой o Лучше получить поддержку других отделов компании обьяснив что они получат в конце
  • 18.
    Сложности переходного периода ●Хороший повод создать DevOps ● Не нужно ждать идеальной имплементации. Начните с одного компонента и с одной кнопки. ● Празднуйте каждое небольшое продвижение вперед
  • 19.
    Что мы делали ●Команда пассивно-агессивно делать ничего не хотела ● Перед запуском мы много убеждали, дискутировали и шантажировали команду. ● Отменили недельные релизы. ● Добавили стикеры на мониторы на каждый деплой. Смайлики и жопы. Смайлик - успешный деплой, жопа - деплой проблемный ● Поначалу все боялись деплоить, постепенно привыкли.
  • 20.
  • 21.
  • 22.
    ● 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 ● Разработчик ответственный за фичу от начала и до конца
  • 23.
    QA ● Максимальная автоматизация ounit testing o integration testing o front end testing - нужен баланс! ● Ручное тестирование делается разработчиками, не QA ● QA ответственны за автоматизацию
  • 24.
    Continuous Integration ● Bambooor Jenkins ● Every branch is built and tested on every commit ● Only green builds could be deployed ● Build time is critical (fighting for < 10min)
  • 25.
  • 26.
  • 27.
  • 28.
    Monitoring ● Examples: o RPS oavg resp time & percentile o error rates o CPU Utilization o transaction rates ● Correlate Deployments with Metrics ● Мы используем: Splunk, Zabbix, Graphite, New Relic, Loggly
  • 29.
  • 30.
    Splunk ● Простой имощный язык запросоввыбор источника, временного диапазона, группирование, ... ● Визуализация ● Запрос отображается в URLбыстрый обмен запросами в чате ● Сохранённые запросы ● Автоматические уведомления (Alerts)Не нужно изобретать колесо для уведомлений, просто throw new MyException(); или log.warn("My message");
  • 31.
    ● По кодуошибки — прямо в stack trace! Не нужно подробного описания как воспроизвести ошибку. Нет необходимости вручную искать ошибку в журналах. ● “Log duty” — «Дежурство по журналам»Поиск ошибок, анализ медленных запросов к БД, анализ кода► Находим проблемы до того, как их найдут клиенты! Splunk
  • 32.
  • 33.
    New Relic ● Метрикидля Web-приложений ● Отслеживание всех уровней, вкл. JS ● Метки deployment’ов ● Анализ поведения пользователей ● Рассылка отчётов
  • 34.
  • 35.
  • 36.
    DB Updates ● UseDB 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
  • 37.
  • 38.
    ● Наступает привыкание- жизнь без continuous deployment вызывает недоумение. ● Результат твоей работы сразу начинает использоваться юзерами. Это клево. ● Менеджмент доволен - идет постоянная череда запусков. Пользователи довольны - постоянно идут новые фичи.
  • 39.
    ● Быстрый фидбеки итерации приводят к продукту который гораздо лучше адаптирован к рынку ● Конкуренты не понимают как вы их стали с легкостью обходить ● Приходит уважение других отделов компании ● Практически нулевая текучка людей в команде
  • 40.

Editor's Notes

  • #3 Mogu tupit’ - obychno govoryu na anglijskom. Pomogajte.
  • #4 V oanovnom rabotaem s zhivymi pervodchikami - ochen’ malo perevodov delaetsya cherez machine translattion
  • #5 detali - foursquare - website and mobile apps - pereklyuchite na russkij Tesla - Elon Mask - perevodim sites na raznye yazyki
  • #7 Nabiraem komandu djavistov - esli interesno - vse voprosy k Vike, 2 cheloveka uzhe nanyali.
  • #9 А что делаете вы? Eto kak v anekdote pro professora po seksologii (eto budet zavtra, zavtra)
  • #16  USAF полковник John Boyd, истребитель F-16. ne letaet tak vysoko i tak daleko kak F15, no v 2 raza legche i manevrennej dazhe na nizkih skorostyax Vazhnee produkt vypustit’ bystree, chem ego dolgo vylivat’.
  • #18 Team culture = Processes, Priorities, Values
  • #19 Team culture = Processes, Priorities, Values devOps = development toolset support
  • #20 Жопа - печальный смайлик Шантаж - кто не хочит делать конт деплой - отвечает за следующий релиз Сейчас бай-ин будет легче - continuous deployment is a trend Pyat’ stadii prinyatiya neizbezhnogo: otricanie, gnev, torg, depressiya, prinyatie
  • #23 Is someone is commited but did not deploy -> skandal - nikto ne xochet otvechat’ za chej-to code feature branches vs switches in the code
  • #24 no sending the ball over the wall testirovanie parserov - sravnenie versij po rezul’tatam parsinga i skorosti
  • #25 U nas Bamboo kazhdyj raz pri sozdanii brancha avtomaticheski podhvatyvaet i build. Pro+Con Bamboo (branches+costs)
  • #26 screenshot bamboo. 18 min average
  • #27 3 steps: component, environment, build -> push a button, DOD. Environment: ENV = kompaktno 4 vitrualnih servera (soa: mysql, mongo, gdn, tms). Po nazhatiju knopki a developer can launch his own env.
  • #28 1. communication, synchronization. 2. history of deploys 3. before: skype, now: slack automatic. 4. 1-deploy, 2-check, 3-confirm.
  • #29 MySQL stops being responsive at 60% CPU utilization New Relic - prikol’nyj (around performance) - zhivaya profiling data. Automatic call stacks, shows query performance (java code vs db time)