SlideShare a Scribd company logo
1 of 35
Download to read offline
Преимущества и недостатки
микросервисной архитектуры
в HeadHunter
Иванов Антон
SRE team lead
СПОЙЛЕРЫ
● Микросервисы упростят жизнь в одном, но усложнят в другом
● Важно смотреть на эффект для компании в целом
● Далее опыт и мнение
2
ОБО МНЕ
● ~ 2 года — просто разработчик в HeadHunter
● ~ 2 года — тимлид команды SRE (Site Reliability Engineering)
3
НАША АРХИТЕКТУРА
2006
Монолит
DB
Java
Struts
JSP
Torque
Memcached
5
ПЕРЕХОД К СЕРВИСАМ
Монолит
DB
Search
Banners
DB
HHID
DB
6
КАК СЕЙЧАС
hh.ru m.hh.ruAPI
Correktor
Recommen
dations
MLHHID ...
Монолит SearchBannersSession Responses
Integration
7
ЧТО КРУТО?
ЧТО КРУТО?
● Декомпозиция монолита
(несколько простых сервисов с явным API проще монстра-монолита)
● Проще тестировать
(застабил внешние походы и вперед)
● Независимые релизы
(когда хочу, тогда тестирую и выпускаю свой сервис)
9
ЧТО ЕЩЕ КРУТО?
● Независимая деградация
(когда лежит сервис А, сервис Б продолжает работать)
● Независимое масштабирование
(закупаем серверы только под те сервисы,
которые нужно отмасштабировать)
● Возможность пробовать новые технологии
(небольшой сервис переписать проще)
● Команда-владелец
(отвечает за сервис, заинтересована в поддержке и развитии)
10
ЧТО НЕКРУТО?
ВЕСЬ КОНТЕКСТ ЗАПРОСА
Сервис А:
● сделал то
● сделал се
● сходил туда
● сходил сюда
● ошибка
Сервис Б:
● сделал то
● сделал се
● сходил туда
● сходил сюда
● сделал тото
● вернул тото
Сервис В:
● сделал что
● сделал то
● сходил ли
● вернул ли
Сервис Г:
● сделал то
● сделал се
● сделал тото
● сделал сето
Сервис Ж:
● сделал то
● сходил туда
● сделал се
● упал
12
ВЕСЬ КОНТЕКСТ ЗАПРОСА
● Присваиваем каждому пользовательскому запросу идентификатор
● Ищем все логи по идентификатору с помощью Graylog:
○ Много логов (1.3 TB / день)
○ 100% CPU на машинах Graylog
○ Много потерь
● Вложились в собственное решение
(timestamped request id + бинарный поиск в логах)
13
RPC ТЯЖЕЛЕЕ ВЫЗОВА МЕТОДА
Железо дешевое,
а его обслуживание?
https://github.com/AntonIvanov87/java-benchmarks/tree/master/rpc-benchmarks
14
RPC СЛОЖНЕЕ ВЫЗОВА МЕТОДА
● Пулы соединений, пулы байт-буферов, эвент-лупы…
Все это — много непростого кода с множеством настроек
● Требуется думать, что будет при ошибках RPC
Search client
HH http client
Async http client
Netty
15
РАСПРЕДЕЛЕННОСТЬ
Выделяя сервисы, вы сразу попадаете на сложности распределенных
систем: отказы, таймауты, ретраи, дубли и т. д.
16
таймаут 2 сек
balancer
service A service A
balancer
service B service B
balancer
service C service C
● Все запросы на service C укладываются
в 0.25 сек?
● Есть запас?
● Отдельные таймауты для “тяжелых”
запросов?
● Как не завалить себя ретраями во
время проблем с базой сервиса C?
● Что делать, если service A хочет ходить
в service C напрямую?
● Что делать, если хотим не один ретрай,
а больше?
1 сек
1 сек
0.5 сек
0.5 сек
0.25 сек
17
ЦЕРЕМОНИЯ: НОВЫЙ СЕРВИС
● Выбираем на чем писать, дописываем под себя
● Упаковываем (деабинизируем / докеризируем / ...)
● Настраиваем процедуру выкладки
● Настраиваем ротацию и заливку логов
● Настраиваем мониторинг и триггеры
● Подключаем систему мониторинга низкочастотных ошибок
● ...
18
ПОДДЕРЖКА В АКТУАЛЬНОМ СОСТОЯНИИ
● Решили замониторить походы в memcached
○ Выделяем библиотеку hh-memcached-client
○ Проходимся по 100500 сервисов и обновляем
● Решили отпинывать запросы, если сервис перегружен
○ Выделяем библиотеку hh-http-server-utils
○ Проходимся по 100500 сервисов и обновляем
○ Опять проходимся по 100500 сервисов и донастраиваем пороги срабатывания
● Часто выбираем 3-5 главных сервиса, на остальные забиваем (((
○ Потом таки надо обновить и долго обновляем, перепрыгивая несколько версий
19
ТРАНЗАКЦИИ
Иногда хочется межсервисных транзакций...
20
ТАК ЛИ КРУТО, КАК КАЖЕТСЯ?
21
ЕСТЬ ЛИ ЕЩЕ СПОСОБЫ ДЕКОМПОЗИРОВАТЬ?
● ru.hh.dao
○ public VacancyDAO
○ public ResumeDAO
○ public UserDAO
○ ...
● ru.hh.service
○ public VacancyService
○ public ResumeService
○ public UserService
○ ...
● ru.hh.resource
○ public VacancyResource
○ public ResumeResource
○ public UserResource
○ …
22
● Пакеты (“папки”) классов по бизнес-
фичам, а не по слоям
● Модули - коллекция пакетов - с явными
зависимости от других модулей
● Потом проще выделять сервис
“ПРОЩЕ” ТЕСТИРОВАТЬ
Протестировать сервис — хорошо, а как протестировать всю систему?
Сложные стенды, в которых нужно развернуть все сервисы,
откорректировать настройки (таймауты, например),
а потом поддерживать.
23
“НЕЗАВИСИМЫЕ” РЕЛИЗЫ
Предположим, вам нужно изменить API одного из вызовов сервиса C:
● релиз C с совместимым API
● релиз B с совместимым API
● переключение A на использование нового API
● выпиливание старого API из B
● выпиливание старого API из C
service A service B service C
24
“НЕЗАВИСИМАЯ” ДЕГРАДАЦИЯ
● Лежит сервис поиска
○ лежит половина сайта
● Лежит сервис откликов и приглашений
○ лежит половина сайта
● Лежит сервис сессии
○ лежит весь сайт
25
“ОТКАЗОУСТОЙЧИВОСТЬ”
● Сетевой вызов упадет с бОльшей вероятностью, чем внутрипроцессный.
● База данных каждого сервиса тоже отдельная?
26
СЛОЖНОСТИ МАСШТАБИРОВАНИЯ
● Виртуалки, docker, оркестрация…
● “Независимое” масштабирование круто,
когда требуется специфичное оборудование.
Server
App
Server
App
Server
App
Server
App
Server
App
Server
AppApp
App
App
App
App
AppApp App App
27
ВОЗМОЖНОСТЬ ПРОБОВАТЬ ТЕХНОЛОГИИ
● Зоопарк технологий
(где-то Spring, где-то Guice, надо знать оба)
● Зоопарк подходов
(где-то юнит-тесты пишутся так, где-то — иначе)
● Гибко, но не единообразно.
28
КОМАНДА-ВЛАДЕЛЕЦ
● В некоторые сервисы пишут все
● SRE быстрее реагирует на проблемы, чем бизнес-команда-владелец,
у них — свои задачи
● В SRE больше технологических знаний
29
Все проблемы микросервисов решаются,
для этого не требуется rocket science,
хотите ли вы их решать?
30
КАК ПИЛИТЬ?
31
ГОРИЗОНТАЛЬНО VS. ВЕРТИКАЛЬНО
● Слой не самодостаточен
● Много сетевых походов
● Максимум боли
● Минимум профита
● Сервис самодостаточен
● Мало сетевых походов
● Максимум профита
● Минимум боли
32
МОНОЛИТ
Слой 1
Слой 2
Сервис 1 Сервис n
hh.ru m.hh.ruAPI
Монолит SearchBannersSession Responses
Integration
33
Сервисная архитектура должна соответствовать
бизнес-фичам.
34
Спасибо.
Вопросы?
an.ivanov@hh.ru

More Related Content

What's hot

"Flux — новый взгляд на старые проблемы" — Сергей Прохоров, MoscowJS 18
"Flux — новый взгляд на старые проблемы" — Сергей Прохоров, MoscowJS 18"Flux — новый взгляд на старые проблемы" — Сергей Прохоров, MoscowJS 18
"Flux — новый взгляд на старые проблемы" — Сергей Прохоров, MoscowJS 18
MoscowJS
 
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Ontico
 
Проектирование архитектуры крупных веб-систем
Проектирование архитектуры крупных веб-системПроектирование архитектуры крупных веб-систем
Проектирование архитектуры крупных веб-систем
TKConf
 
Павел Кудинов: Сетевая многозадачность: событийные машины
Павел Кудинов: Сетевая многозадачность: событийные машиныПавел Кудинов: Сетевая многозадачность: событийные машины
Павел Кудинов: Сетевая многозадачность: событийные машины
guestf673
 
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
Provectus
 
AgileCamp'11. Build Automation
AgileCamp'11. Build AutomationAgileCamp'11. Build Automation
AgileCamp'11. Build Automation
Dmitry Panshin
 

What's hot (19)

Александр Афенов
Александр АфеновАлександр Афенов
Александр Афенов
 
"Flux — новый взгляд на старые проблемы" — Сергей Прохоров, MoscowJS 18
"Flux — новый взгляд на старые проблемы" — Сергей Прохоров, MoscowJS 18"Flux — новый взгляд на старые проблемы" — Сергей Прохоров, MoscowJS 18
"Flux — новый взгляд на старые проблемы" — Сергей Прохоров, MoscowJS 18
 
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.
 
Real-time данные на фронтенде
Real-time данные на фронтендеReal-time данные на фронтенде
Real-time данные на фронтенде
 
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
 
Проектирование архитектуры крупных веб-систем
Проектирование архитектуры крупных веб-системПроектирование архитектуры крупных веб-систем
Проектирование архитектуры крупных веб-систем
 
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» ...
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» ...ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» ...
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» ...
 
Symfony в архитектуре Upwork Enterprise
Symfony в архитектуре Upwork EnterpriseSymfony в архитектуре Upwork Enterprise
Symfony в архитектуре Upwork Enterprise
 
Павел Кудинов: Сетевая многозадачность: событийные машины
Павел Кудинов: Сетевая многозадачность: событийные машиныПавел Кудинов: Сетевая многозадачность: событийные машины
Павел Кудинов: Сетевая многозадачность: событийные машины
 
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
 
Как верстать сайты быстрее чем их рисуют
Как верстать сайты быстрее чем их рисуютКак верстать сайты быстрее чем их рисуют
Как верстать сайты быстрее чем их рисуют
 
Микросервисы: откуда столько шума?
Микросервисы: откуда столько шума?Микросервисы: откуда столько шума?
Микросервисы: откуда столько шума?
 
Микросервисы: откуда столько шума?
Микросервисы: откуда столько шума?Микросервисы: откуда столько шума?
Микросервисы: откуда столько шума?
 
Андрей Чебукин "Построение успешных API"
Андрей Чебукин "Построение успешных API"Андрей Чебукин "Построение успешных API"
Андрей Чебукин "Построение успешных API"
 
Как верстать сайты быстрее, чем их рисуют
Как верстать сайты быстрее, чем их рисуютКак верстать сайты быстрее, чем их рисуют
Как верстать сайты быстрее, чем их рисуют
 
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
 
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
 
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
 
AgileCamp'11. Build Automation
AgileCamp'11. Build AutomationAgileCamp'11. Build Automation
AgileCamp'11. Build Automation
 

Similar to Преимущества и недостатки микросервисной архитектуры в HeadHunter / Антон Иванов (HeadHunter)

Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Ontico
 
Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?
Vadim Madison
 
Баннерокрутилка
БаннерокрутилкаБаннерокрутилка
Баннерокрутилка
yaevents
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...
Dmitry Samsonov
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...
Ontico
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
it-people
 
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
JSFestUA
 
микроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубымикроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубы
Aleksandr Tarasov
 

Similar to Преимущества и недостатки микросервисной архитектуры в HeadHunter / Антон Иванов (HeadHunter) (20)

Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
 
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
 
Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?
 
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNextВнедрение зависимостей в ASP.NET MVС и ASP.NET vNext
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext
 
Jbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterJbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot Starter
 
Баннерокрутилка
БаннерокрутилкаБаннерокрутилка
Баннерокрутилка
 
Микросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс РоссияМикросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс Россия
 
Sivko
SivkoSivko
Sivko
 
DevOps в реальном времени
DevOps в реальном времениDevOps в реальном времени
DevOps в реальном времени
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...
 
Что вас ждет на пути реализации Soa (Битрикс отступает)
Что вас ждет на пути реализации Soa (Битрикс отступает)Что вас ждет на пути реализации Soa (Битрикс отступает)
Что вас ждет на пути реализации Soa (Битрикс отступает)
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
 
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
 
владивосток форум производительность_ha
владивосток форум производительность_haвладивосток форум производительность_ha
владивосток форум производительность_ha
 
SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013
 
Workflow одной OPS-команды
Workflow одной OPS-командыWorkflow одной OPS-команды
Workflow одной OPS-команды
 
SECON'2016. Кузнецов Вячеслав, Workflow одной Ops-команды
SECON'2016. Кузнецов Вячеслав, Workflow одной Ops-командыSECON'2016. Кузнецов Вячеслав, Workflow одной Ops-команды
SECON'2016. Кузнецов Вячеслав, Workflow одной Ops-команды
 
Страх и ненависть в мире релиз-инжиниринга
Страх и ненависть в мире релиз-инжинирингаСтрах и ненависть в мире релиз-инжиниринга
Страх и ненависть в мире релиз-инжиниринга
 
микроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубымикроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубы
 

More from Ontico

Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 

More from Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Преимущества и недостатки микросервисной архитектуры в HeadHunter / Антон Иванов (HeadHunter)

  • 1. Преимущества и недостатки микросервисной архитектуры в HeadHunter Иванов Антон SRE team lead
  • 2. СПОЙЛЕРЫ ● Микросервисы упростят жизнь в одном, но усложнят в другом ● Важно смотреть на эффект для компании в целом ● Далее опыт и мнение 2
  • 3. ОБО МНЕ ● ~ 2 года — просто разработчик в HeadHunter ● ~ 2 года — тимлид команды SRE (Site Reliability Engineering) 3
  • 7. КАК СЕЙЧАС hh.ru m.hh.ruAPI Correktor Recommen dations MLHHID ... Монолит SearchBannersSession Responses Integration 7
  • 9. ЧТО КРУТО? ● Декомпозиция монолита (несколько простых сервисов с явным API проще монстра-монолита) ● Проще тестировать (застабил внешние походы и вперед) ● Независимые релизы (когда хочу, тогда тестирую и выпускаю свой сервис) 9
  • 10. ЧТО ЕЩЕ КРУТО? ● Независимая деградация (когда лежит сервис А, сервис Б продолжает работать) ● Независимое масштабирование (закупаем серверы только под те сервисы, которые нужно отмасштабировать) ● Возможность пробовать новые технологии (небольшой сервис переписать проще) ● Команда-владелец (отвечает за сервис, заинтересована в поддержке и развитии) 10
  • 12. ВЕСЬ КОНТЕКСТ ЗАПРОСА Сервис А: ● сделал то ● сделал се ● сходил туда ● сходил сюда ● ошибка Сервис Б: ● сделал то ● сделал се ● сходил туда ● сходил сюда ● сделал тото ● вернул тото Сервис В: ● сделал что ● сделал то ● сходил ли ● вернул ли Сервис Г: ● сделал то ● сделал се ● сделал тото ● сделал сето Сервис Ж: ● сделал то ● сходил туда ● сделал се ● упал 12
  • 13. ВЕСЬ КОНТЕКСТ ЗАПРОСА ● Присваиваем каждому пользовательскому запросу идентификатор ● Ищем все логи по идентификатору с помощью Graylog: ○ Много логов (1.3 TB / день) ○ 100% CPU на машинах Graylog ○ Много потерь ● Вложились в собственное решение (timestamped request id + бинарный поиск в логах) 13
  • 14. RPC ТЯЖЕЛЕЕ ВЫЗОВА МЕТОДА Железо дешевое, а его обслуживание? https://github.com/AntonIvanov87/java-benchmarks/tree/master/rpc-benchmarks 14
  • 15. RPC СЛОЖНЕЕ ВЫЗОВА МЕТОДА ● Пулы соединений, пулы байт-буферов, эвент-лупы… Все это — много непростого кода с множеством настроек ● Требуется думать, что будет при ошибках RPC Search client HH http client Async http client Netty 15
  • 16. РАСПРЕДЕЛЕННОСТЬ Выделяя сервисы, вы сразу попадаете на сложности распределенных систем: отказы, таймауты, ретраи, дубли и т. д. 16
  • 17. таймаут 2 сек balancer service A service A balancer service B service B balancer service C service C ● Все запросы на service C укладываются в 0.25 сек? ● Есть запас? ● Отдельные таймауты для “тяжелых” запросов? ● Как не завалить себя ретраями во время проблем с базой сервиса C? ● Что делать, если service A хочет ходить в service C напрямую? ● Что делать, если хотим не один ретрай, а больше? 1 сек 1 сек 0.5 сек 0.5 сек 0.25 сек 17
  • 18. ЦЕРЕМОНИЯ: НОВЫЙ СЕРВИС ● Выбираем на чем писать, дописываем под себя ● Упаковываем (деабинизируем / докеризируем / ...) ● Настраиваем процедуру выкладки ● Настраиваем ротацию и заливку логов ● Настраиваем мониторинг и триггеры ● Подключаем систему мониторинга низкочастотных ошибок ● ... 18
  • 19. ПОДДЕРЖКА В АКТУАЛЬНОМ СОСТОЯНИИ ● Решили замониторить походы в memcached ○ Выделяем библиотеку hh-memcached-client ○ Проходимся по 100500 сервисов и обновляем ● Решили отпинывать запросы, если сервис перегружен ○ Выделяем библиотеку hh-http-server-utils ○ Проходимся по 100500 сервисов и обновляем ○ Опять проходимся по 100500 сервисов и донастраиваем пороги срабатывания ● Часто выбираем 3-5 главных сервиса, на остальные забиваем ((( ○ Потом таки надо обновить и долго обновляем, перепрыгивая несколько версий 19
  • 21. ТАК ЛИ КРУТО, КАК КАЖЕТСЯ? 21
  • 22. ЕСТЬ ЛИ ЕЩЕ СПОСОБЫ ДЕКОМПОЗИРОВАТЬ? ● ru.hh.dao ○ public VacancyDAO ○ public ResumeDAO ○ public UserDAO ○ ... ● ru.hh.service ○ public VacancyService ○ public ResumeService ○ public UserService ○ ... ● ru.hh.resource ○ public VacancyResource ○ public ResumeResource ○ public UserResource ○ … 22 ● Пакеты (“папки”) классов по бизнес- фичам, а не по слоям ● Модули - коллекция пакетов - с явными зависимости от других модулей ● Потом проще выделять сервис
  • 23. “ПРОЩЕ” ТЕСТИРОВАТЬ Протестировать сервис — хорошо, а как протестировать всю систему? Сложные стенды, в которых нужно развернуть все сервисы, откорректировать настройки (таймауты, например), а потом поддерживать. 23
  • 24. “НЕЗАВИСИМЫЕ” РЕЛИЗЫ Предположим, вам нужно изменить API одного из вызовов сервиса C: ● релиз C с совместимым API ● релиз B с совместимым API ● переключение A на использование нового API ● выпиливание старого API из B ● выпиливание старого API из C service A service B service C 24
  • 25. “НЕЗАВИСИМАЯ” ДЕГРАДАЦИЯ ● Лежит сервис поиска ○ лежит половина сайта ● Лежит сервис откликов и приглашений ○ лежит половина сайта ● Лежит сервис сессии ○ лежит весь сайт 25
  • 26. “ОТКАЗОУСТОЙЧИВОСТЬ” ● Сетевой вызов упадет с бОльшей вероятностью, чем внутрипроцессный. ● База данных каждого сервиса тоже отдельная? 26
  • 27. СЛОЖНОСТИ МАСШТАБИРОВАНИЯ ● Виртуалки, docker, оркестрация… ● “Независимое” масштабирование круто, когда требуется специфичное оборудование. Server App Server App Server App Server App Server App Server AppApp App App App App AppApp App App 27
  • 28. ВОЗМОЖНОСТЬ ПРОБОВАТЬ ТЕХНОЛОГИИ ● Зоопарк технологий (где-то Spring, где-то Guice, надо знать оба) ● Зоопарк подходов (где-то юнит-тесты пишутся так, где-то — иначе) ● Гибко, но не единообразно. 28
  • 29. КОМАНДА-ВЛАДЕЛЕЦ ● В некоторые сервисы пишут все ● SRE быстрее реагирует на проблемы, чем бизнес-команда-владелец, у них — свои задачи ● В SRE больше технологических знаний 29
  • 30. Все проблемы микросервисов решаются, для этого не требуется rocket science, хотите ли вы их решать? 30
  • 32. ГОРИЗОНТАЛЬНО VS. ВЕРТИКАЛЬНО ● Слой не самодостаточен ● Много сетевых походов ● Максимум боли ● Минимум профита ● Сервис самодостаточен ● Мало сетевых походов ● Максимум профита ● Минимум боли 32 МОНОЛИТ Слой 1 Слой 2 Сервис 1 Сервис n
  • 34. Сервисная архитектура должна соответствовать бизнес-фичам. 34