29

«Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

  • Upload
    2-

  • View
    717

  • Download
    4

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013
Page 2: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

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

2gis.ru @rnd2gis

Page 3: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

API 2GIS

Page 4: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

Данные

• 5 стран

• 10 тыс. населенных пунктов

• 5 млн. гео-объектов

• 2 млн. организаций

• 15 тыс. маршрутов

Ключ можно заполучить на api.2gis.ru

4

Page 5: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

Нагрузка

• 21 млн. пользователей в месяц

• 1600 RPS

• 80 мс - среднее время ответа

• 3 датацентра

• 30 виртуалок

• 99.9% uptime

5

Page 6: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

Команда

Page 7: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

Команда

• Разработчики

• Тестировщики

• Админы

7

Page 8: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

«Хозяйство»

• Вебсервер (nginx)

• Код (PHP) + фреймворк (Yii)

• База (PostgreSQL + PgPool2)

• Кеш (Redis + TwemProxy)

• Изюминка (Поисковая движка на C++)

8

Page 9: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

Требования

• Перечень функций

• Разношерстность

• Связанность

• Бесперебойность + SLA

• Масштабируемость

• Децентрализация

• Гибкость

• Польный OpsDev’ц

9

Page 10: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

Выкатить

Page 11: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

Что же делать?

Page 12: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

Принимать до, во время и после релиза!

Чек-лист

Page 13: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

Релиз-мастер

• Создание и стабилизация релизных веток

• Согласование release notes

• Слежение за ходом релиза

13

Page 14: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

Релиз-тестировщик

• Финальные регрессии

• Unit & Functional & Integration & Load testing

• Релиз на PreProduction окружении

• Слежение за ходом релиза

14

Page 15: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

Релиз-админ

• Согласование release notes

• Правки конфигураций

• Релиз на production окружении

• Настройка мониторинга

15

Page 16: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

Боевой состав• Релиз-тестировщик

• Релиз-мастер

• Релиз-админ

16

Page 17: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

Рутина?

Page 18: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

DevOps &

Page 19: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

Деплой данных• Framework как инструмент подготовки данных

• «Правильные» дельты

• База «на один релиз»

19

Page 20: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

Код и структура баз• Phing

• Ant

• … и многое другое

20

Page 21: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

Окружение

• Chef

• Puppet

• … и многое другое

21

Page 22: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

Chef: nginx installpackage "nginx" do

action :install

end

01.

02.

03.

22

Page 23: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

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

Page 24: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

Одна кнопка• Ansible

• RunDeck

• … и многое другое

24

Page 25: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

Релиз

• Приложение одной командой

• Нода одной командой

• Production одной командой

25

Page 26: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

Мониторинг

Page 27: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

Мониторинг

• Все обо всем (Zabbix)

• Профилирование (Pinba)

• Исключения (Graylog2)

• В помощь админу (Monit)

27

Page 28: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

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

Page 29: «Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013

Вопросы?

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

[email protected]

29