Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Использование haproxy/
iptables + etcd + confd для
автоматического service-
discovering’а в
переменчивых сетях
Сергей Пузы...
Service-oriented architecture
1.  Приложение состоит из множества слабо связанных
сервисов, которые общаются друг с другом...
Service-oriented architecture
Что такое сервис?
1.  У сервиса есть интерфейс – API.
2.  Сервис имеет точку входа (endpoint...
Service-oriented architecture
Пример сервиса - memcached:
1.  API: стандартный протокол memcached.
2.  Endpoint: например,...
Service-oriented architecture
Пример сервиса - mcrouter: (github.com/facebook/mcrouter)
1.  API: стандартный протокол memc...
Service-oriented architecture
Несложное PHP-приложение:
Php-fpm
Memcached
MySQL
slave
Nginx
Php-fpm
MySQL
master Memcached...
Service-oriented architecture
Сложное приложение (мопед не мой):
Как связывать сервисы друг с
другом?
Дешево и сердито: хардкод endpoint’ов в конфиги.
Плюсы:
1.  Очень быстрый старт.
2.  ...
Как связывать сервисы друг с
другом?
Дешево и сердито: DNS + хардкод.
Плюсы:
1.  Лишь немного сложнее хардкода IP-адресов....
Появляются сотни
сервисов. Потом тысячи.
Как связывать сервисы друг с
другом?
Системы управления конфигурацией (Puppet, SaltStack,
etc.).
Плюсы:
1.  При правильной...
Как связывать сервисы друг с
другом?
Пусть роботы всё делают за нас!
Системы service-discovering’а.
Service-discovering
Что это такое?
Система обнаружения сервисов (СОС) – специальный
сервис, в котором другие сервисы могут...
Service-discovering
Etcd: что это такое и как с этим жить?
github.com/coreos/etcd
Etcd - высоконадёжное распределенное хра...
Service-discovering
Confd: что это такое и зачем оно нужно?
www.confd.io
Confd - легковесная система конфигурации, специал...
Service-discovering
Etcd
Client
Confd
Announcer
Mcrouter
Announcer
Memcached
Announcer
Memcached
Confd
Как связывать сервисы друг с
другом?
Системы service-discovering’а:
Плюсы:
1.  Очень быстрое внесение изменений.
2.  Не тр...
Как связывать сервисы друг с
другом?
Что мы хотели?
1.  Приложения не должны постоянно перезапускаться (до
свидания, confd...
Как связывать сервисы друг с
другом?
Как связывать сервисы друг с
другом?
Трудно связать сервисы друг с другом?
Давайте инкапсулируем связь между сервисами в
о...
Etcd + iptables/HAproxy + confd
Было так:
Etcd
Client
Confd
Announcer
Mcrouter
Announcer
Memcached
Announcer
Memcached
Con...
Etcd + iptables/HAproxy + confd
А стало так:
Etcd
Client
Confd
Announcer
Mcrouter
Announcer
Memcached
Announcer
Memcached
...
Etcd + iptables/HAproxy + confd
Почему так?
1.  Некоторые приложения трудно перезапускать.
2.  Постоянно писать шаблоны к ...
Etcd + iptables/HAproxy + confd
А iptables DNAT умеет:
Confd Confd
Etcd
iptables
DNAT
iptables
DNAT
Client statsd
Carbon
(...
Результат
1.  Миграции сервисов становятся безболезненными.
2.  Добавление новых инстансов сервисов в простых кейсах
(когд...
Спасибо за внимание.
s.puzirev@corp.mail.ru
Использование haproxy/iptables+etcd+confd для автоматического service discovery в переменчивых сетях / Сергей Пузырёв (Mai...
Upcoming SlideShare
Loading in …5
×

Использование haproxy/iptables+etcd+confd для автоматического service discovery в переменчивых сетях / Сергей Пузырёв (Mail.ru G

1,215 views

Published on

* Сервис-ориентированная архитектура - что это такое и зачем это нужно?
* Поиск сервисов: стандартные пути:
1) Хардкод endpoint'ов (IP:port).
+ работает
+ просто и топорно
- при росте числа сервисов начинается ад
- появляется документация, странички в вики, которые неактуальны, ночью изменения не внесешь
- при миграции серверов часто меняются эндпоинты, много лишней сопутствующей работы

далее см. - http://rootconf.ru/2015/abstracts/1779

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Использование haproxy/iptables+etcd+confd для автоматического service discovery в переменчивых сетях / Сергей Пузырёв (Mail.ru G

  1. 1. Использование haproxy/ iptables + etcd + confd для автоматического service- discovering’а в переменчивых сетях Сергей Пузырёв
  2. 2. Service-oriented architecture 1.  Приложение состоит из множества слабо связанных сервисов, которые общаются друг с другом с использованием четко определённого API. 2.  Сервисы ничего не знают о клиентах, их задача – оказывать сервис. 3.  Клиента не волнует, каким образом работает сервис. 4.  Сервисы используют другие сервисы.
  3. 3. Service-oriented architecture Что такое сервис? 1.  У сервиса есть интерфейс – API. 2.  Сервис имеет точку входа (endpoint) – обычно пара IP:port. 3.  Сервис может пользоваться другими сервисами. В этом случае он должен быть правильно сконфигурирован.
  4. 4. Service-oriented architecture Пример сервиса - memcached: 1.  API: стандартный протокол memcached. 2.  Endpoint: например, 10.0.0.7:11211. 3.  Сервисы, которыми пользуется memcached, отсутствуют. Client Memcached
  5. 5. Service-oriented architecture Пример сервиса - mcrouter: (github.com/facebook/mcrouter) 1.  API: стандартный протокол memcached. 2.  Endpoint: например, 10.0.0.6:11211. 3.  Mcrouter пользуется двумя сервис memcached. Endpoint сервиса memcached забит в конфиг mcrouter. Client Mcrouter MemcachedMemcached
  6. 6. Service-oriented architecture Несложное PHP-приложение: Php-fpm Memcached MySQL slave Nginx Php-fpm MySQL master Memcached Mcrouter Static storage 16 отношений client<->service
  7. 7. Service-oriented architecture Сложное приложение (мопед не мой):
  8. 8. Как связывать сервисы друг с другом? Дешево и сердито: хардкод endpoint’ов в конфиги. Плюсы: 1.  Очень быстрый старт. 2.  Просто, нужен только vim. 3.  Ничего не ломается само. Минусы: 1.  Не работает в большом проекте. 2.  Требуется вручную поддерживать документацию. 3.  Сложно вносить массовые изменения, подключать новые инстансы сервисов, мигрировать сервисы.
  9. 9. Как связывать сервисы друг с другом? Дешево и сердито: DNS + хардкод. Плюсы: 1.  Лишь немного сложнее хардкода IP-адресов. 2.  Почти так же просто, нужен только vim и DNS-сервер. 3.  Проще вносить массовые изменения. Минусы: 1.  По прежнему не работает в большом проекте. 2.  Так же требуется вручную поддерживать документацию. 3.  Сложно подключать новые инстансы сервисов. 4.  Асинхронность внесения изменений, лаги. 5.  Софт часто не перерезолвливает записи.
  10. 10. Появляются сотни сервисов. Потом тысячи.
  11. 11. Как связывать сервисы друг с другом? Системы управления конфигурацией (Puppet, SaltStack, etc.). Плюсы: 1.  При правильной организации проще вносить изменения. 2.  Один инструмент для всего. Минусы: 1.  Медленно! 2.  При неправильной организации вносить изменения становится очень сложно. 3.  Неактуальная документация продолжает существовать.
  12. 12. Как связывать сервисы друг с другом? Пусть роботы всё делают за нас! Системы service-discovering’а.
  13. 13. Service-discovering Что это такое? Система обнаружения сервисов (СОС) – специальный сервис, в котором другие сервисы могут делать две вещи: 1.  Регистрироваться (записывать свой endpoint). 2.  Находить другие сервисы (читать предварительно зарегистрированные endpoint’ы других сервисов). Часто системы обнаружения сервисов предоставляют также сервис распределённых блокировок. Примеры: Zookeeper, etcd, consul, SkyDNS, etc.
  14. 14. Service-discovering Etcd: что это такое и как с этим жить? github.com/coreos/etcd Etcd - высоконадёжное распределенное хранилище параметров конфигурации, задаваемых в форме key->value. Etcd также можно использовать как систему распределенных блокировок.
  15. 15. Service-discovering Confd: что это такое и зачем оно нужно? www.confd.io Confd - легковесная система конфигурации, специально созданная для отслеживания данных в etcd, шаблонизирования конфигов и перезапуска приложений при изменении данных в etcd. NB: нередко вместо Confd можно использовать скрипт на bash, наподобие while true ; do smth ; done .
  16. 16. Service-discovering Etcd Client Confd Announcer Mcrouter Announcer Memcached Announcer Memcached Confd
  17. 17. Как связывать сервисы друг с другом? Системы service-discovering’а: Плюсы: 1.  Очень быстрое внесение изменений. 2.  Не требуется документировать, что где работает и как должно быть сконфигурировано. Минусы: 1.  Сложно. 2.  Страшно – “а вдруг развалится?”. 3.  Внешние сущности в виде confd и announcer’а. В идеале нужно обучать сервисы общаться с etcd напрямую.
  18. 18. Как связывать сервисы друг с другом? Что мы хотели? 1.  Приложения не должны постоянно перезапускаться (до свидания, confd). 2.  Мы не хотели привязывать тонны legacy-кода наших приложений к СОС. 3.  Облегчить миграцию сервисов на новые endpoint’ы, не требующую переконфигурации тысяч других сервисов (ради чего и затевалось). 4.  Приложение не должно деградировать в условиях сломавшейся СОС, выключившегося датацентра, тормозящей сети и т.п. более, чем деградировало бы без СОС.
  19. 19. Как связывать сервисы друг с другом?
  20. 20. Как связывать сервисы друг с другом? Трудно связать сервисы друг с другом? Давайте инкапсулируем связь между сервисами в отдельный сервис!
  21. 21. Etcd + iptables/HAproxy + confd Было так: Etcd Client Confd Announcer Mcrouter Announcer Memcached Announcer Memcached Confd
  22. 22. Etcd + iptables/HAproxy + confd А стало так: Etcd Client Confd Announcer Mcrouter Announcer Memcached Announcer Memcached Confd HAProxy
  23. 23. Etcd + iptables/HAproxy + confd Почему так? 1.  Некоторые приложения трудно перезапускать. 2.  Постоянно писать шаблоны к разному софту утомляет. 3.  Бесплатная статистика от HAproxy. 4.  В простых кейсах получаем еще и бесплатную балансировку. Что плохо? 1. HAproxy не умеет в UDP.
  24. 24. Etcd + iptables/HAproxy + confd А iptables DNAT умеет: Confd Confd Etcd iptables DNAT iptables DNAT Client statsd Carbon (Graphite)
  25. 25. Результат 1.  Миграции сервисов становятся безболезненными. 2.  Добавление новых инстансов сервисов в простых кейсах (когда можно просто добавить инстанс в пул HAProxy) происходит очень легко. 3.  Нельзя забыть что-то переконфигурировать. 4.  Новых конфигов требуют только новые типы сервисов.
  26. 26. Спасибо за внимание. s.puzirev@corp.mail.ru

×