70 000 подов 3 ЦОДа > 6 100 серверов Go, C# — основные языки программирования Через gRPC — большая часть микросервисного взаимодействия Warden — собственное решение для Service Mesh
1 Service 2 Service 2 Service 2 ServiceMesh client library Control plane Механизмы балансировки Поиск upstreams Retry policy PaaS Resource Managers API • Снижение потребления ресурсов (практически ничего не стоит) • Усложнение клиентского приложения • Нет возможности быстрого добавления новых discovery- и balancing-политик Результат НО!
Service 2 Реализуем control-plane 25 Service 1 Service 2 Service 2 Service 2 Clientside balancer Service mesh v1 Warden Server Service 1 Clientside balancer
robin Реализуем все! Service 1 Service 1 Service 2 Service 2 Service 1 Service 2 • Weight round robin • Consistent Hash • Least Connected Возможные решения: Balancer Достоверные сведения о загруженности Service 2
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 Возможные решения:
рандомных бэкенда из общего списка и делается выбор между ними Подробнее тут и тут Service2 Service2 CurrentLoad: 10 CurrentLoad: 7 Service 1 Clientside balancer ?
рандомных бэкенда из общего списка и делается выбор между ними Подробнее тут и тут Service2 Service2 CurrentLoad: 10 CurrentLoad: 8 Service 1 Clientside balancer
каждый запрос получаем дополнительный заголовок, в котором содержатся сведения о текущем количестве запросов на поде PeakEWMA Рассчитываем скользящее среднее времени длительности запросов и, исходя из этого, выбираем бэкенд, на который вышлем нагрузку Подробнее тут Issue на реализацию в envoy тут
Service 2 Service 2 Service 2. Release 1 Service 2 Service 2 Service 2. Release 2 Warden Server 1 решение: изменять ответ от серверной части 90% 10% 45
Service 2 Service 2 Service 2. Release 1 Service 2 Service 2 Service 2. Release 2 Warden Server 1 решение: изменять ответ от серверной части 90% 10% Ответ без канарейки Ответ с канарейкой 10% Ответ с канарейкой 50%
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%
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%
S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S
S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S
статистику для корректной работы (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
S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S
S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S
запросов для балансировщиков S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S
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
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
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 в других кластерах
API Server API Server Istio Mesh Cluster: West Cluster: East Con fi g/ Endpoints Endpoints Con fi g/ Endpoints Discovery осуществляется за счет походов в API других кластеров
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 через прокси
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 через прокси
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 ресурсов также через прокси
(Peak EWMA) • Реализовали subsetting для экономии соединений • Локализовали большую часть трафика в дата-центрах • Добавили нулевую канарейку для тестирования • Кастомизировали решение под OzonTech
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