$30 off During Our Annual Pro Sale. View Details »

«Безопасное взаимодействие в распределенных системах» — Алексей Солодкий, Badoo

Badoo Tech
April 09, 2018
8.2k

«Безопасное взаимодействие в распределенных системах» — Алексей Солодкий, Badoo

Выступление на Badoo PHP Meetup 7.04.2018.

В эпоху микросервисов все острее становится проблема распределенного взаимодействия между различными частями инфраструктуры. Алексей расскажет как обеспечить безопасное синхронное общение между монолитом на PHP и кучей различных сервисов. Рассмотрим основные проблемы и решения.

Badoo Tech

April 09, 2018
Tweet

More Decks by Badoo Tech

Transcript

  1. Солодкий Алексей · 7 апреля 2018
    Безопасное взаимодействие
    в распределённых системах

    View Slide

  2. About
    3k
    серверов
    600
    серверов баз
    данных
    350k
    запросов в
    секунду
    50
    типов самописных
    сервисов
    2

    View Slide

  3. • сервера падают;
    • сервис может затупить.
    Темы
    3
    Как выживать в мире, где…
    • правильно мониторить сервисы;
    • грамотно умирать.
    А также как…

    View Slide

  4. Падение сервиса

    View Slide

  5. • проблемы с железом;
    • сеть;
    • код;
    • неудачный деплой;
    • русские хакеры.
    Что может вывести
    из строя ваш
    сервис?
    5

    View Slide

  6. Failover схема
    6

    View Slide

  7. Failover схема
    7

    View Slide

  8. Failover схема
    8

    View Slide

  9. Failover распределение нагрузки
    9

    View Slide

  10. Failover распределение нагрузки
    10

    View Slide

  11. 11
    Failover распределение нагрузки

    View Slide

  12. • Async:
    • eventual consistency;
    • можно потерять часть данных;
    • быстрее на запись;
    • более простые схемы.
    • Sync:
    • данные всегда согласованы;
    • медленная запись;
    • кворумы, split-brain и прочие
    сложности.
    sync vs async
    репликация
    12

    View Slide

  13. • резервируйте;
    • проводите учения!
    • учитывайте падения при расчёте нагрузки;
    • выбирайте синхронность репликации,
    исходя из задач;
    • не кладите все яйца в одну корзину.
    Выводы

    раздела
    13

    View Slide

  14. Тупка сервиса

    View Slide

  15. • чрезмерная нагрузка;
    • сеть;
    • проблемы с железом.
    Из-за чего сервис
    может затупить?
    15

    View Slide

  16. 16

    View Slide

  17. 17
    Система из 10 воркеров может обработать 500 запросов в секунду (по 50 на воркер)

    View Slide

  18. 18

    View Slide

  19. 19
    Система из 10 воркеров может обработать 10 запросов в секунду. (по 1 на воркер)

    View Slide

  20. 20
    Circuit breaker принцип работы

    View Slide

  21. 21
    Circuit breaker принцип работы

    View Slide

  22. 22
    Circuit breaker принцип работы

    View Slide

  23. 23
    Circuit breaker принцип работы

    View Slide

  24. • PHP + storage:
    • https://github.com/ackintosh/ganesha
    • https://github.com/ejsmont-artur/php-
    circuit-breaker
    • В виде отдельного демона:
    • Envoy
    • Linkerd
    Реализации
    24

    View Slide

  25. • не полагайтесь на сеть;
    • все запросы по сети должны иметь таймаут;
    • используете Circuit Breaker
    https://docs.microsoft.com/en-us/azure/
    architecture/patterns/circuit-breaker
    Выводы

    раздела
    25

    View Slide

  26. Мониторинг

    View Slide

  27. • прогнозирование нагрузки;
    • расследование инцидентов;
    • предотвращение аварий
    Зачем?

    View Slide

  28. • Интеграционные метрики
    • RPS, время ответа, процентили;
    • количество ошибок логики;
    • количество системных ошибок.
    Что?
    • Внутренние метрики
    • портебление cpu, памяти;
    • количество хранимых ресурсов.

    View Slide

  29. Что? • Очереди
    • EPS (Скорость прихода)
    • Время на разных этапах
    • Размер очереди в данный
    момент времени

    View Slide

  30. Мониторинг memcache
    30

    View Slide

  31. Мониторинг memcache
    31

    View Slide

  32. Мониторинг memcache
    32

    View Slide

  33. Мониторинг memcache
    33

    View Slide

  34. Мониторинг memcache
    34

    View Slide

  35. Мониторинг memcache
    35

    View Slide

  36. Мониторинг memcache
    36

    View Slide

  37. Мониторинг memcache
    37

    View Slide

  38. Мониторинг memcache
    38

    View Slide

  39. Мониторинг memcache
    39

    View Slide

  40. • SaaS
    • datadoghq.com
    • rollbar.com
    • newrelic.com
    • Self-hosted
    • Zabbix
    • Grafana
    • ELK
    Как?

    View Slide

  41. • собирайте все данные, какие можете;
    • не забывайте об асинхронном
    взаимодействии;
    • встраивайте в самописные сервисы отдачу
    статки;
    • настройте автоматические триггеры.
    Выводы

    раздела
    41

    View Slide

  42. Memento mori

    View Slide

  43. Как умирать People near by

    View Slide

  44. Как умирать People near by

    View Slide

  45. Как умирать People near by

    View Slide

  46. Как умирать People near by

    View Slide

  47. Как умирать People near by

    View Slide

  48. Как умирать People near by

    View Slide

  49. • будьте готовы к полному падению сервиса;
    • не допускайте каскадного отказа;
    • отключайте некритичный функционал в
    случае падения сервиса.
    Выводы

    раздела
    49

    View Slide

  50. Итоги

    View Slide

  51. • Балансировка нагрузки
    • Таймауты
    • Логика failover
    • Circuit breaker
    • Мониторинг
    • Логика авторизации
    • Сериализация, десериализация
    Слой интеграции
    51

    View Slide

  52. Спасибо!
    52

    View Slide

  53. Литература
    53

    View Slide