Как sre следит за стабильностью и скоростью headhunter /...

41
КАК SRE СЛЕДИТ ЗА СТАБИЛЬНОСТЬЮ HEADHUNTER Антон Иванов [email protected]

Upload: ontico

Post on 16-Apr-2017

313 views

Category:

Engineering


2 download

TRANSCRIPT

Page 1: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

КАК SRE СЛЕДИТЗА СТАБИЛЬНОСТЬЮ

HEADHUNTER

Антон Иванов[email protected]

Page 2: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

HEADHUNTERCайт, где соискатели находят работу, а работодатели - сотрудников.

frontfront ...

3K запросов / сек

backend backend...

26K запросов / сек

PostgreSQL CassandraPostgreSQL... ...

51K запросов / сек

Page 3: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

ДОСТУПНОСТЬ, %

Page 4: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

ПЛАН• SRE vs эксплуатация

• Мониторинг

• Реакция на инциденты

• Нагрузочные тесты

• Грабли, грабли и решения

Page 5: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

SRE VS ЭКСПЛУАТАЦИЯSRE - Site Reliability Engineering

Page 6: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

Эксплуатация• железо

• сеть

• ОС (ubuntu)

• инфраструктурные приложения(nginx, haproxy, rsyslog и др.)

• Отдельные люди следят за PostgreSQL

SRE• приложения

• их настройки (jvm, таймауты и др.)

• nginx, haproxy

• архитектура

Делаем одно и то же на разных уровнях

Page 7: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

МОНИТОРИНГ

Page 8: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

ЧТО ТАКОЕ “САЙТ ЛЕЖИТ”Хочется:

• клиенты перестали платить :-)

Эксплуатация:

• >= 20 пятисоток в секунду на фронтах

• 95% ответов >= 4 сек

Page 9: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

“САЙТ ЛЕЖИТ” @SRE• % пятисоток >= 0.5%

• site

• API

• mobile site

• из-за контролируемой деградации>= 5 пятисоток в секунду на любом бэкенде

site

2100 rps

API

700 rps

mobile site

200 rps

Page 10: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

НА ТЕЛЕВИЗОРАХ

Page 11: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

РЕАКЦИЯ НА ИНЦИДЕНТ

Page 12: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

АВТОМАТИЧЕСКИ• Оповещение в slack

• Вместе ищем причину

• Задача в JIRA

• Подробно разбираем, описываем, прикрепляем задачи

Page 13: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

ИНСТРУМЕНТЫ• Графики

Тотальный мониторинг:5xx, RPS, перцентили, jetty пулы, memcached, c3p0 пулы, CPU, RAM…

• Если нет графиков - логи

Page 14: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

ВСЕ ЛОГИ ЗАПРОСА

Page 15: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

REQUEST ID

front request id: 123

PostgreSQL PostgreSQL...

request id: 123request id: 123

backend backend...

request id: 123 request id: 123

Каждая строка лога имеет request id

Page 16: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

GRAYLOG НЕ ПОЛЕТЕЛ• Много логов (1.3 TB / день)

• 100% CPU на машинах Graylog

• Много потерь

Page 17: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

TIMESTAMPED REQUEST ID1477983593864a8976b43c3b85712abf

2016-11-01 09:59:53,864

Page 18: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

БИНАРНЫЙ ПОИСК В ЛОГАХГде 09:59:53?

…08:30:00 INFO ...…09:00:00 WARN ...…09:30:00 INFO ...…10:00:00 ERROR ...…10:30:00 INFO ...…

Page 19: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

ВСЕ ЛОГИ ПО REQUEST ID

Page 20: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

НАГРУЗОЧНЫЕ ТЕСТЫ

Page 21: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

НАГРУЗОЧНЫЕ ТЕСТЫ• Раз в несколько месяцев

• Когда естественная нагрузка максимальна (у нас - днем)

• Баланс между честностью и сложностью профиля нагрузки

• Наиболее частотные запросы (в основном GET)

• Отдельный профиль для соискателей, работодателей и анонимов

• Отдельный профиль для сайта, мобильного сайта и api

Page 22: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

Дальше работаем как с инцидентом.

Page 23: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

ГРАБЛИ 1ПРОТУХАНИЕ ЗАПРОСОВ

Page 24: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

ПРОТУХАНИЕ ЗАПРОСОВ

• Пока запрос лежит в очередях - он протухает

• FIFO - обрабатываем самые протухшие запросы

• Вхолостую тратим ресурсы

• Сервис не может сам восстановиться

request thread pool

9 10 11 ...12

db pool queue

13 14 ...

accept backlog

21

request thread pool queue

4 5 6 7 8

timeout!

Page 25: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

FAIL-FAST• Если образовалась очередь - дальше затор - падать• Отказаться от ненужных очередей

• например, нет свободных тредов - отпинывать задачу

• Очередь нужна? Замониторить, зажать размер• например, зажать accept backlog• еще лучше Connection: Keep-Alive

• Нет размера очереди? Жесткий таймаут ожидания• например, на время взятия соединение из пула соединений к базе

• Асинхронная архитектура? Ограничить количество запросов в работе• Как можно ближе к узкому ресурсу,

ограничение на балансировщике - так себе

Page 26: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

ГРАБЛИ 2ЛАВИНА РЕТРАЕВ

Page 27: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

ЛАВИНА РЕТРАЕВfront

balancer

front front

backendbalancer

backend backend

• Бэкенды завалены ретраями

• А если front’ов больше?

• А если 3х-уровневая архитектура?

Page 28: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

ПРИНЦИПЫ РЕТРАЕВ• Только непосредственно перед проблемой

• например, не ретраить на фронтах, если лежит бэкенд

• Четко понимать: упал сам сервис, или тот кто под ним• например, 500/503 - упал сервис, 502 - тот, кто под ним• помогает разбирать инциденты

• Ограничение на количество ретраев• у нас 1-2

• Ограничение на время, в течение которого можно ретраить• Лучше недоретраить, чем переретраить• Ретрай “вдруг сервис затупил” - заметание проблемы под ковер

Page 29: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

НУЖНО РЕТРАИТЬ• Connection refused

• например, остановили приложение на время релиза

• Connect timeout

• например, выключили сервер для обслуживания

• Read timeout для идемпотентных запросов

• например, сервер упал в момент выполнения запроса

• Думать об этих проблемах при разработке!

• например, соединение к PostgreSQL, RabbitMQ, Cassandra

Page 30: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

ГРАБЛИ 3ЛИШНИЕ ПРОМЕЖУТОЧНЫЕ ЗВЕНЬЯ

Page 31: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

БАЛАНСИРОВЩИКИ - БОЛЬ• Лишний оверхед

• Точка отказа

• Кто должен балансировать балансировщики?

• Что делать с connect timeout до балансировщика?

• Балансировать на уровне клиентов

Page 32: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

ТУПИТ PGBOUNCER

backend backend

pgbouncer

postgresql

При ~10K запросов в секунду затупил pgbouncer

Page 33: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

ЗАЧЕМ PGBOUNCER

backend backend

pgbouncer

postgresql

• Бэкенду понадобилось больше соединений? Пожалуйста!

• А если тупит база?

• Всем требуется > 10 соединений

• Бэкенды все равно ждут

• Давать бэкендам > 10 соединений бессмысленно

5-15 5-15

20

Page 34: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

УБРАЛИ PGBOUNCER

backend backend

postgresql

• Жесткий пул 10 соединений

• Понадобилось больше?Fail-fast!

• Походы на реплики без транзакций

10 10

Page 35: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

ТО, ЧЕГО НЕТ,СЛОМАТЬСЯ НЕ МОЖЕТ

Page 36: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

МАСШТАБИРОВАНИЕРЕПЛИК

POSTGRESQL

Page 37: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

БАЛАНСИРОВКА МЕЖДУ РЕПЛИКАМИ• Driver открывает соединение на

произвольную реплику

• Connect timeout / connection refused - пробует другой сервер

• Умер postgresql - connection error - переподключение

• Потеряли соединение - socket timeout - переподключение

• Время жизни соединения - 1 мин

• Бэкендов и соединений много,в пределе равномерно

backend

postgresql driver

backend

postgresql driver

postgresql postgresql

jdbc:postgresql://postgresql1,postgresql2?loadBalanceHosts=true&connectTimeout=1&socketTimeout=3

Page 38: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

МИКРОСЕРВИСЫ

Page 39: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

МИКРОСЕРВИСЫmobile sitesite API

core vacancy search

resume searchbillingsession

hhid negotiations banner relations rs

mailer autosearch cms corrector +100500

Page 40: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

МИКРОСЕРВИСЫPros:

• Демонструация монолита(точно нужен отдельный deploy unit?)

• Контролируемая деградация

• Специфичные требования к оборудованию

Cons:

• Владеет бизнес-команда, но знания об отказоустойчивости в SRE

• Часто забрасывают• Оверхед на

сериализацию/десериализацию, сетевые походы

• Оверхед при программировании(вызвать метод проще, чем написать RPC)

• Инфраструктурная копипаста• Виртуалки -> docker -> оркестрация

Page 41: Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHunter)

СПАСИБО

Антон Иванов[email protected]