«Система развёртывания многокомпонентного сервиса»...

Post on 22-Jun-2015

729 views 4 download

description

Нельзя, да и неправильно, проектировать веб-сервис как монолитное приложение. Рано или поздно это приведёт к его закостенелости или даже умиранию. С другой стороны, декомпозиция системы на несколько компонент приносит проблемы интеграционной зависимости, которые усложняют развёртывание или эксплуатацию приложения. В докладе я представлю систему, которая позволяет нам оперативно развёртывать многокомпонентное приложение 2ГИС API на три сервера в Новосибирске, Москве, Амстердаме. Особое внимание уделю гибкой архитектуре приложения, процессу развёртывания, версионированию кеша и индексов (Sphinx, C++-демоны), миграции схем БД (PostgreSQL), инструментам мониторинга и развёртывания (Zabbix, Chef, Phing, Yii).

Transcript of «Система развёртывания многокомпонентного сервиса»...

Система развёртываниямногокомпонентного сервисаСалов Алексей

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

Всё получится, бро!

Вопросы?

Салов Алексей

a.salov@2gis.ru

29