«Система развёртывания многокомпонентного сервиса»...
DESCRIPTION
Нельзя, да и неправильно, проектировать веб-сервис как монолитное приложение. Рано или поздно это приведёт к его закостенелости или даже умиранию. С другой стороны, декомпозиция системы на несколько компонент приносит проблемы интеграционной зависимости, которые усложняют развёртывание или эксплуатацию приложения. В докладе я представлю систему, которая позволяет нам оперативно развёртывать многокомпонентное приложение 2ГИС API на три сервера в Новосибирске, Москве, Амстердаме. Особое внимание уделю гибкой архитектуре приложения, процессу развёртывания, версионированию кеша и индексов (Sphinx, C++-демоны), миграции схем БД (PostgreSQL), инструментам мониторинга и развёртывания (Zabbix, Chef, Phing, Yii).TRANSCRIPT
Система развёртываниямногокомпонентного сервисаСалов Алексей
2gis.ru @rnd2gis
API 2GIS
Данные
• 5 стран
• 10 тыс. населенных пунктов
• 5 млн. гео-объектов
• 2 млн. организаций
• 15 тыс. маршрутов
Ключ можно заполучить на api.2gis.ru
4
Нагрузка
• 21 млн. пользователей в месяц
• 1600 RPS
• 80 мс - среднее время ответа
• 3 датацентра
• 30 виртуалок
• 99.9% uptime
5
Команда
Команда
• Разработчики
• Тестировщики
• Админы
7
«Хозяйство»
• Вебсервер (nginx)
• Код (PHP) + фреймворк (Yii)
• База (PostgreSQL + PgPool2)
• Кеш (Redis + TwemProxy)
• Изюминка (Поисковая движка на C++)
8
Требования
• Перечень функций
• Разношерстность
• Связанность
• Бесперебойность + SLA
• Масштабируемость
• Децентрализация
• Гибкость
• Польный OpsDev’ц
9
Выкатить
Что же делать?
Принимать до, во время и после релиза!
Чек-лист
Релиз-мастер
• Создание и стабилизация релизных веток
• Согласование release notes
• Слежение за ходом релиза
13
Релиз-тестировщик
• Финальные регрессии
• Unit & Functional & Integration & Load testing
• Релиз на PreProduction окружении
• Слежение за ходом релиза
14
Релиз-админ
• Согласование release notes
• Правки конфигураций
• Релиз на production окружении
• Настройка мониторинга
15
Боевой состав• Релиз-тестировщик
• Релиз-мастер
• Релиз-админ
16
Рутина?
DevOps &
Деплой данных• Framework как инструмент подготовки данных
• «Правильные» дельты
• База «на один релиз»
19
Код и структура баз• Phing
• Ant
• … и многое другое
20
Окружение
• Chef
• Puppet
• … и многое другое
21
Chef: nginx installpackage "nginx" do
action :install
end
01.
02.
03.
22
Chef: git clone & git updategit node[:path_to_app] do
repository node[:path_to_git_repo]
branch node[:app_branch_name]
action :sync
end
01.
02.
03.
04.
05.
23
Одна кнопка• Ansible
• RunDeck
• … и многое другое
24
Релиз
• Приложение одной командой
• Нода одной командой
• Production одной командой
25
Мониторинг
Мониторинг
• Все обо всем (Zabbix)
• Профилирование (Pinba)
• Исключения (Graylog2)
• В помощь админу (Monit)
27
Всё получится, бро!