Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ильяс Нежибицкий — Warden — зачем нам свой service mesh?

Ильяс Нежибицкий — Warden — зачем нам свой service mesh?

Ozon Tech

June 29, 2023
Tweet

More Decks by Ozon Tech

Other Decks in Technology

Transcript

  1. Краткая предыстория Ozon Tech 2 ~ 4 000 микросервисов >

    70 000 подов 3 ЦОДа > 6 100 серверов Go, C# — основные языки программирования Через gRPC — большая часть микросервисного взаимодействия Warden — собственное решение для Service Mesh
  2. О чем пойдет речь 3 • Обсудим механизмы реализации Service

    Mesh • Рассмотрим процесс создания собственного Service Mesh • Обсудим функционал Service Mesh, реализованного в Ozon
  3. Proxy в виде nginx Механизмы реализации межсервисного взаимодействия 12 Service

    2 Service 2 Service 2 Service 1 Service 1 Service 1 Механизмы балансировки
 Поиск upstreams
 Retry policy
 Ejections
  4. Sidecar proxy Механизмы реализации межсервисного взаимодействия 14 Service 2 Service

    2 Service 2 Механизмы балансировки
 Поиск upstreams
 Retry policy
 Ejections Service 1
  5. Per Node Proxy Механизмы реализации межсервисного взаимодействия 16 Service 2

    Node Service 3 Service 1 Service 4 Node Service 6 Service 5 Механизмы балансировки
 Поиск upstreams
 Retry policy
 Ejections
  6. Механизмы реализации межсервисного взаимодействия 18 Динозавры Монолит Монолит из нескольких

    частей Reverse proxy Sidecar per pod Sidecar per node Cloud-Native решения Client-side До Cloud-Native
  7. Data-plane, встроенный в клиента 19 Механизмы реализации межсервисного взаимодействия Service

    1 Service 2 Service 2 Service 2 ServiceMesh client library Control plane Механизмы балансировки
 Поиск upstreams
 Retry policy
 PaaS Resource Managers API • Снижение потребления ресурсов (практически ничего не стоит) • Усложнение клиентского приложения • Нет возможности быстрого добавления новых discovery- и balancing-политик Результат НО!
  8. Ходим из клиента напрямую в источник данных 23 Service 1

    Service 2 Service 2 Service 2 Clientside balancer K8s API не резиновый(
  9. Реализуем control-plane 24 Service 1 Service 2 Service 2 Service

    2 Clientside balancer Service mesh v1 Warden Server
  10. Service 2 Service 2 Service 2 Service 2 Service 2

    Service 2 Реализуем control-plane 25 Service 1 Service 2 Service 2 Service 2 Clientside balancer Service mesh v1 Warden Server Service 1 Clientside balancer
  11. Алгоритмы балансировки 28 • Weight round robin • Consistent Hash

    • Least Connected Возможные решения: gRPC default load balancing algorithm — round robin
  12. Алгоритмы балансировки 29 Реализуем все! • Weight round robin •

    Consistent Hash • Least Connected Возможные решения: gRPC default load balancing algorithm — round robin
  13. Алгоритмы балансировки 30 gRPC default load balancing algorithm — round

    robin Реализуем все! Service 1 Service 1 Service 2 Service 2 Service 1 Service 2 • Weight round robin • Consistent Hash • Least Connected Возможные решения: Balancer Достоверные сведения о загруженности Service 2
  14. Алгоритмы балансировки 31 gRPC default load balancing algorithm — round

    robin Реализуем все! Выбранный алгоритм сложим в ответ от control-plane Service 1 Clientside balancer Service 1 Clientside balancer Service 2 Service 2 Service 1 Clientside balancer Service 2 Warden Server Сведения о загруженности Service 2 только по собственным запросам • Weight round robin • Consistent Hash • Least Connected Возможные решения:
  15. Power of two choices 32 Service2 Service2 Service2 Выбирается 2

    рандомных бэкенда из общего списка и делается выбор между ними
 
 Подробнее тут и тут Service2 Service2 Service 1 Clientside balancer ?
  16. Power of two choices 33 Service2 Service2 Service2 Выбирается 2

    рандомных бэкенда из общего списка и делается выбор между ними
 
 Подробнее тут и тут Service2 Service2 Service 1 Clientside balancer ?
  17. Power of two choices 34 Service2 Service2 Service2 Выбирается 2

    рандомных бэкенда из общего списка и делается выбор между ними
 
 Подробнее тут и тут Service2 Service2 CurrentLoad: 10 CurrentLoad: 7 Service 1 Clientside balancer ?
  18. Power of two choices 35 Service2 Service2 Service2 Выбирается 2

    рандомных бэкенда из общего списка и делается выбор между ними
 
 Подробнее тут и тут Service2 Service2 CurrentLoad: 10 CurrentLoad: 8 Service 1 Clientside balancer
  19. Согласованный LeastConn и peakEWMA 36 Согласованный LeastConn В ответе на

    каждый запрос получаем дополнительный заголовок, в котором содержатся сведения о текущем количестве запросов на поде PeakEWMA Рассчитываем скользящее среднее времени длительности запросов и, исходя из этого, выбираем бэкенд, на который вышлем нагрузку Подробнее тут
 Issue на реализацию в envoy тут
  20. Peak EWMA Проверим влияние 41 q50 Было: 36 Стало: 23

    q75 Было: 53 Стало: 37 q90 Было: 63 Стало: 51 q98 Было: 68 Стало: 62
  21. Canary deployment и несколько параллельных release’ов 44 Service 1 Service

    2 Service 2 Service 2. Release 1 Service 2 Service 2 Service 2. Release 2 90% 10%
  22. Canary deployment и несколько параллельных release’ов Service 1 Clientside balancer

    Service 2 Service 2 Service 2. Release 1 Service 2 Service 2 Service 2. Release 2 Warden Server 1 решение: изменять ответ от серверной части 90% 10% 45
  23. Canary deployment и несколько параллельных release’ов Service 1 Clientside balancer

    Service 2 Service 2 Service 2. Release 1 Service 2 Service 2 Service 2. Release 2 Warden Server 1 решение: изменять ответ от серверной части 90% 10% Ответ без канарейки Ответ с канарейкой 10% Ответ с канарейкой 50%
  24. Canary deployment и несколько параллельных release’ов Service 1 Clientside balancer

    Service 2 Service 2 Service 2. Release 1 Service 2 Service 2 Service 2. Release 2 Warden Server 1 решение: изменять ответ от серверной части 90% 10% Очевидные проблемы: 1. Процент зависит от количества бэкендов (должно быть кратно) 2. Нельзя реализовать поход на конкретную версию Ответ без канарейки Ответ с канарейкой 10% Ответ с канарейкой 50%
  25. Canary deployment и несколько параллельных release’ов Service 1 Clientside balancer

    Service 2 Service 2 Service 2. Release 1 Service 2 Service 2 Service 2. Release 2 Warden Server R1 R1 R1 R1 R1 R1 R1 R1 R1 R1 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 2 решение: выбирать релиз на клиенте 90% 10% Ответ от сервера: + информация о том, что на R1 отправляем 90% запросов, а на R2 — 10%
  26. Canary deployment и несколько параллельных release’ов Service 1 Clientside balancer

    Service 2 Service 2 Service 2. Release 1 Service 2 Service 2 Service 2. Release 2 Warden Server R1 R1 R1 R1 R1 R1 R1 R1 R1 R1 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 0% canary Req + header:
 service_versions: service2 — release2
  27. Canary deployment и несколько параллельных release’ов Service 1 Clientside balancer

    Service 2 Service 2 Service 2. Release 1 Service 2 Service 2 Service 2. Release 2 Warden Server R1 R1 R1 R1 R1 R1 R1 R1 R1 R1 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 0% canary Req + header:
 service_versions: service2 — release2 Resp from 
 service2 — release2
  28. Решаемая проблема 52 Service 1 Clientside balancer Service 1 Clientside

    balancer Service 2 Service 2 Service 1 Clientside balancer Service 2
  29. 53 S S S S S S S S S

    S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S
  30. 54 S S S S S S S S S

    S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S
  31. Проблема: 1. Большое количество TCP-соединений 2. Балансировщики не могут набрать

    статистику для корректной работы (leastConn, peakEWMA) S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S
  32. 56 S2 S2 S2 S2 S2 S2 S2 S2 S2

    S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 Service1
  33. 57 S2 S2 S2 S2 S2 S2 S2 S2 S2

    S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 Service1
  34. 58 Service1 Service1 S2 S2 S2 S2 S2 S2 S2

    S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2
  35. Service1 Service1 59 S2 S2 S2 S2 S2 S2 S2

    S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 Service1
  36. Service1 60 S2 S2 S2 S2 S2 S2 S2 S2

    S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 Service1 Service1 Service1
  37. 61 S2 S2 S2 S2 S2 S2 S2 S2 S2

    S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 Service1 Service1 Service1 Service1 Service1
  38. 62 S2 S2 S2 S2 S2 S2 S2 S2 S2

    S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 Service1 Service1 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 Service1 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 Service1 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 S2 Service1
  39. 63 S S S S S S S S S

    S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S
  40. 64 S S S S S S S S S

    S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S
  41. Результат: 
 Сэкономили более 60% соединений 
 Набрали нужное количество

    запросов для балансировщиков S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S
  42. Добавление иных источников данных 68 Service2 Service1 Clientside balancer Warden

    Server Postgres Manager Redis Manager Kafka Manager Clickhouse Manager MSSQL Manager
  43. Добавление иных источников данных 69 Service2 Service1 Clientside balancer Warden

    Server Postgres Manager Redis Manager Kafka Manager ClickHouse Manager MSSQL Manager Postgres Kafka bus
  44. MultiDC 71 DC 1 Service 1 Clientside balancer Service 1

    Clientside balancer Service 2 Service 2 Service 1 Clientside balancer Service 2
  45. MultiDC DC 1 Service 1 Clientside balancer Service 1 Clientside

    balancer Service 2 Service 2 Service 1 Clientside balancer Service 2 DC 2 Service 1 Clientside balancer Service 1 Clientside balancer Service 2 Service 2 Service 1 Clientside balancer Service 2 DC 3 Service 1 Clientside balancer Service 1 Clientside balancer Service 2 Service 2 Service 1 Clientside balancer Service 2
  46. Локализация трафика DC 1 Service 1 Clientside balancer Service 1

    Clientside balancer Service 2 Service 2 Service 1 Clientside balancer Service 2 DC 2 Service 1 Clientside balancer Service 1 Clientside balancer Service 2 Service 2 Service 1 Clientside balancer Service 2 DC 3 Service 1 Clientside balancer Service 1 Clientside balancer Service 2 Service 2 Service 1 Clientside balancer Service 2
  47. DC 1 Дополнительное резервирование системы 77 Service1 Clientside balancer Warden

    Server Req Resp: Endpoints in DC2 + DC3 Service2 Service2 Service2 DC 3 Service2 Service2 Service2 DC 2 Service2 Service2 Service2 Mode Auto
  48. DC 1 Дополнительное резервирование системы 78 Service1 Clientside balancer Warden

    Server Req Resp: Endpoints in DC1 Endpoints in DC2, DC3 … Service2 Service2 Service2 DC 3 Service2 Service2 Service2 DC 2 Service2 Service2 Service2 Mode DC_Priority
  49. Future Plans: Federation Architecture DC 3 S1 Clientside balancer S1

    Clientside balancer S2 S2 S1 Clientside balancer S2 DC 1 S1 Clientside balancer S1 Clientside balancer S2 S2 S1 Clientside balancer S2 DC 1 S1 Clientside balancer S1 Clientside balancer S2 S2 S1 Clientside balancer S2 K8S-Common DC1 DC2 DC3
  50. Future Plans: Federation Architecture DC 1 S1 Clientside balancer S1

    Clientside balancer S2 S2 S1 Clientside balancer S2 K8S- DC1 DC1 DC 1 S1 Clientside balancer S1 Clientside balancer S2 S2 S1 Clientside balancer S2 K8S- DC3 DC3 DC 1 S1 Clientside balancer S1 Clientside balancer S2 S2 S1 Clientside balancer S2 K8S- DC2 DC2
  51. 90 Istio Mesh Cluster: West-1 Service A Service B Control

    Plane Service A Service B Control Plane Cluster: East-1 Service A Service B Cluster: West-2 Service B Service A Cluster: East-2 Istio mesh federation Data-plane могут ходить в control-plane в других кластерах
  52. Istio mesh federation 91 Service B Service A Istiod Istiod

    API Server API Server Istio Mesh Cluster: West Cluster: East Con fi g/ Endpoints Endpoints Con fi g/ Endpoints Discovery осуществляется за счет походов в API других кластеров
  53. Warden mesh federation DC 1 S1 S2 S3 Warden Server

    K8s
 api K8S-DC1 DC 2 S1 S2 S3 Warden Server K8s
 api K8S-DC2 DC 3 S1 S2 S3 Warden Server K8s
 api K8S-DC3 Собственные data- plane в каждом кластере
  54. Warden mesh federation DC 1 S1 S2 S3 Warden Server

    Warden Informer K8s
 api K8S-DC1 DC 2 S1 S2 S3 Warden Server Warden Informer K8s
 api K8S-DC2 DC 3 S1 S2 S3 Warden Server Warden Informer K8s
 api K8S-DC3 Общение с K8s API через прокси
  55. Warden mesh federation DC 1 S1 S2 S3 Warden Server

    Warden Informer K8s
 api K8S-DC1 DC 2 S1 S2 S3 Warden Server Warden Informer K8s
 api K8S-DC2 DC 3 S1 S2 S3 Warden Server Warden Informer K8s
 api K8S-DC3 Межкластерный discovery через прокси
  56. Warden mesh federation DC 1 S1 S2 S3 Warden Server

    Warden Informer PaaS Resource Managers API PaaS Resource Managers API K8s
 api K8S-DC1 DC 2 S1 S2 S3 Warden Server Warden Informer PaaS Resource Managers API PaaS Resource Managers API K8s
 api K8S-DC2 DC 3 S1 S2 S3 Warden Server Warden Informer PaaS Resource Managers API PaaS Resource Managers API K8s
 api K8S-DC3 Discovery ресурсов также через прокси
  57. Выводы 97 • Улучшили RT за счет современных алгоритмов балансировки

    (Peak EWMA) • Реализовали subsetting для экономии соединений • Локализовали большую часть трафика в дата-центрах • Добавили нулевую канарейку для тестирования • Кастомизировали решение под OzonTech
  58. Список литературы 98 • Power of two choices • NGINX

    and the “Power of Two Choices” • The Power of Two Random Choices • The Power of Two Choices in Randomized Load Balancing • Алгоритмы балансировки • Load Balancing for latency • Issue на разработку в envoy • Subsetting • Статья от Google: Load Balancing in the Datacenter • Federation architecture • Istio Deployment Models