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

Вам не нужен Service Mesh, но это не точно

Вам не нужен Service Mesh, но это не точно

📢 Service Mesh обещает нам много крутого, но так ли это на практике? Понимать всегда приятнее на конкретных примерах. Именно поэтому мы познакомимся с Service Mesh при помощи истории его внедрения в отдельно взятой компании.
Вам не нужен Service Mesh, но это не точно
👨‍💻 Казалось бы, Service Mesh — это и observability, и разные стратегии балансировки клиентских запросов, и улучшение внутренней безопасности, и много чего ещё. Вплоть до розовых единорогов, извергающих радугу.
💥 Полтора года назад в ANNA Money задумались над внедрением Service Mesh-решения, так как с увеличением количества сервисов, увеличивается и количество того, что может пойти не так. В свою очередь, понимания того, что происходит внутри системы, становится меньше. Service Mesh должен был стать серебряной пулей, но не стал.

Aleksandr Tarasov

November 14, 2021
Tweet

More Decks by Aleksandr Tarasov

Other Decks in Programming

Transcript

  1. Минздрав предупреждает Мнение докладчика может не совпадать с официальной позицией

    его работодателя, коллег или других специалистов. Все представленные в докладе сведения, примеры, выводы и другую информацию вы можете использовать на свой страх и риск. За все ваши действия ответственность несёте только вы сами. 3
  2. When We Were Young • 10 сервисов • 2 интеграции

    с партнерами • 1 команда • 4 тестовых среды 6
  3. We Are Still Young, But... • 10 -> 150+ сервисов

    • 2 -> 10+ интеграций с партнерами • 1 -> 7 независимых команд • 4 -> 30+ тестовых сред 7
  4. Преимущества • Platform-agnostic • Простота реализации • Нативно для разработчиков

    Недостатки • Управление зависимостями • Библиотека на каждый ЯП • Требует пересборки сервисов Подход с shared-библиотеками 13
  5. Преимущества • Консистентность • Ортогональное использование • Централизация Недостатки •

    Сайдкар под платформу • Возможная сложность сайдкара • Имеет цену ◦ производительность ◦ ресурсы CPU/Mem/Network Подход с Service Mesh 18
  6. Recap Нужны трейсы, а не Service Mesh Лендинги и бренд

    могут вводить в заблуждение 39
  7. Recap Нужны трейсы, а не Service Mesh Лендинги и бренд

    могут вводить в заблуждение Могли бы мы обойтись без Service Mesh? Да! 40
  8. Хотелки • mTLS • Zero-Trust Security • Canary Releases •

    Robust Load Balancing • Observability • Low Resource Consumption • Pretty UI • Easy Configuration 45
  9. Преимущества • Децентрализация • Хорошая масштабируемость • Возможность трассировки по

    кастомному заголовку Недостатки • Ограниченные возможности роутинга запросов • Отсутствие mTLS • Отсутствие политик авторизации Netramesh 47
  10. Kuma Istio Linkerd mTLS Authorization Policies Canary Releases Robust Load

    Balancing Load Balancing Options Observability Resource Consumption UI Configuration Красно-зеленая таблица сравнения 49
  11. Kuma Istio Linkerd mTLS Authorization Policies Canary Releases Robust Load

    Balancing Load Balancing Options Observability Resource Consumption Very High High Low UI Configuration Сравнительное потребление ресурсов 54
  12. Kuma Istio Linkerd mTLS Authorization Policies Canary Releases Robust Load

    Balancing Load Balancing Options Observability Tracing requires app modification Tracing requires app modification Tracing requires app modification Resource Consumption Very High High Low UI Configuration Без модификации сервисов не обойтись 56
  13. Kuma Istio Linkerd mTLS Authorization Policies Canary Releases Robust Load

    Balancing Load Balancing Options Observability Tracing requires app modification Tracing requires app modification Tracing requires app modification Resource Consumption Very High High Low UI Configuration Без модификации сервисов не обойтись 57 А Netramesh то это умел :(
  14. Kuma Istio Linkerd mTLS Authorization Policies Canary Releases Robust Load

    Balancing Least Requests Least Requests EWMA Load Balancing Options Rich Rich No circuit breaker Observability Tracing requires app modification Tracing requires app modification Tracing requires app modification Resource Consumption Very High High Low UI Configuration Load Balancing + Options 62
  15. L4 Traffic Routing via Traffic Split SMI apiVersion: split.smi-spec.io/v1alpha4 kind:

    TrafficSplit metadata: name: banking-service-split namespace: banking spec: service: banking-service backends: - service: banking-service-primary weight: 900m - service: banking-service-canary weight: 100m 65
  16. L7 Traffic Routing via Traffic Split SMI ... spec: service:

    banking-service matches: - kind: HTTPRouteGroup name: beta-users backends: - service: banking-service-primary weight: 0 - service: banking-service-canary weight: 100 --- kind: HTTPRouteGroup metadata: name: beta-users matches: - name: beta-users headers: - user-group: "Beta" 66
  17. Kuma Istio Linkerd mTLS Authorization Policies Canary Releases L4/L7 Own

    specification L4/L7 Own specification L4 only Traffic Split SMI Robust Load Balancing Least Requests Least Requests EWMA Load Balancing Options Rich Rich No circuit breaker Observability Tracing requires app modification Tracing requires app modification Tracing requires app modification Resource Consumption Very High High Low UI Configuration Canary Releases 67
  18. Frontend Backend A Backend B Backend C Hacked Service Уровень

    защиты определяется самым слабым звеном 70
  19. Frontend Backend A Backend B Backend C Hacked Service Без

    политик авторизации Get Data 71
  20. Frontend Backend A Backend B Backend C Hacked Service Без

    шифрования трафика Listen traffic 72
  21. Frontend Backend A Backend B Backend C Hacked Service Ограничение

    доступа по политикам авторизации Restrict access 73
  22. Frontend Backend A Backend B Backend C Hacked Service Использование

    mTLS Prevent listening traffic because it is encrypted 74
  23. Kuma Istio Linkerd mTLS Authorization Policies Disabled by default, Authorization

    policies are available Enabled by default, Authorization policies are available Enabled by default, Authorization policies are available Canary Releases L4/L7 Own specification L4/L7 Own specification L4 only Traffic Split SMI Robust Load Balancing Least Requests Least Requests EWMA Load Balancing Options Rich Rich No circuit breaker Observability Tracing requires app modification Tracing requires app modification Tracing requires app modification Resource Consumption Very High High Low UI Configuration Canary Releases 75
  24. Kuma Istio Linkerd mTLS Authorization Policies Disabled by default, Authorization

    policies are available Enabled by default, Authorization policies are available Enabled by default, Authorization policies are available Canary Releases L4/L7 Own specification L4/L7 Own specification L4 only Traffic Split SMI Robust Load Balancing Least Requests Least Requests EWMA Load Balancing Options Rich Rich No circuit breaker Observability Tracing requires app modification Tracing requires app modification Tracing requires app modification Resource Consumption Very High High Low UI Good External (Kiali) Good Configuration Easy Hard Easy Красивости и субъективное удобство 77
  25. Kuma Istio Linkerd mTLS Authorization Policies Disabled by default, Authorization

    policies are available Enabled by default, Authorization policies are available Enabled by default, Authorization policies are available Canary Releases L4/L7 Own specification L4/L7 Own specification L4 only Traffic Split SMI Robust Load Balancing Least Requests Least Requests EWMA Load Balancing Options Rich Rich No circuit breaker Observability Tracing requires app modification Tracing requires app modification Tracing requires app modification Resource Consumption Very High High Low UI Good External (Kiali) Good Configuration Easy Hard Easy Выбери свои трейд-оффы 78
  26. Recap Каждое решение имеет свои трейд-оффы Service Mesh is not

    a free lunch Мы выбрали более легкое решение с минимальным оверхедом 81
  27. Recap Каждое решение имеет свои трейд-оффы Service Mesh is not

    a free lunch Мы выбрали более легкое решение с минимальным оверхедом 82 Ваш выбор может быть иной!
  28. Linkerd Routes Configuration apiVersion: linkerd.io/v1alpha2 kind: ServiceProfile metadata: name: banking-service.banking.svc.cluster.local

    namespace: banking spec: routes: - condition: method: GET pathRegex: "/.*" name: GET /* isRetryable: true timeout: 300ms retryBudget: retryRatio: 0.2 minRetriesPerSecond: 10 ttl: 10s 91
  29. Linkerd Routes Configuration apiVersion: linkerd.io/v1alpha2 kind: ServiceProfile metadata: name: banking-service.banking.svc.cluster.local

    namespace: banking spec: routes: - condition: method: GET pathRegex: "/.*" name: GET /* isRetryable: true timeout: 300ms retryBudget: retryRatio: 0.2 minRetriesPerSecond: 10 ttl: 10s 92
  30. Linkerd Routes Configuration apiVersion: linkerd.io/v1alpha2 kind: ServiceProfile metadata: name: banking-service.banking.svc.cluster.local

    namespace: banking spec: routes: - condition: method: GET pathRegex: "/.*" name: GET /* isRetryable: true timeout: 300ms retryBudget: retryRatio: 0.2 minRetriesPerSecond: 10 ttl: 10s 93
  31. Linkerd Routes Configuration apiVersion: linkerd.io/v1alpha2 kind: ServiceProfile metadata: name: banking-service.banking.svc.cluster.local

    namespace: banking spec: routes: - condition: method: GET pathRegex: "/.*" name: GET /* isRetryable: true timeout: 300ms retryBudget: retryRatio: 0.2 minRetriesPerSecond: 10 ttl: 10s 94
  32. Canary Releases не взлетели • Continuous Delivery Pipeline как конкурент

    ◦ 5-10 минут на выкатку сервиса ◦ тестирование критичного функционала ◦ rolling update стратегия выкатки 98
  33. Canary Releases не взлетели • Continuous Delivery Pipeline как конкурент

    ◦ 5-10 минут на выкатку сервиса ◦ тестирование критичного функционала ◦ rolling update стратегия выкатки • Автоматизированная процедура отката ◦ метрики и алерты ◦ разработчик принимает решение ◦ откат за 3-5 минут (с учетом миграций) 99
  34. Canary Releases не взлетели • Continuous Delivery Pipeline как конкурент

    ◦ 5-10 минут на выкатку сервиса ◦ тестирование критичного функционала ◦ rolling update стратегия выкатки • Автоматизированная процедура отката ◦ метрики и алерты ◦ разработчик принимает решение ◦ откат за 3-5 минут (с учетом миграций) • Статистически необходим в 1 на 5 000 релизов 100
  35. Explicit Configuration #no one allowed allowedServiceAccounts: [] #only service #3

    is allowed allowedServiceAccounts: - namespace: elephants name: service3 Легко понять Легко шаблонизировать Но! Нужно идентифицировать всех клиентов 121
  36. Native Configuration #no dependencies dependencies: [] #service #3 depends on

    #1 and #2 dependencies: - namespace: elephants name: service1 - namespace: elephants name: service2 Более естественный способ описания Но! Нужно решить обратную задачу (обратный граф) 122
  37. Наша конфигурация --- #service #1 depends on #2 and #3

    dependencies: - namespace: elephants name: service2 - namespace: elephants name: service3 123 Разрешено, пока не запрещено
  38. Наша конфигурация --- #service #1 depends on #2 and #3

    dependencies: - namespace: elephants name: service2 - namespace: elephants name: service3 --- #service3 #only service #2 is allowed allowedServiceAccounts: - namespace: elephants name: service2 124 Разрешено, пока не запрещено
  39. Выводы Service Mesh как концепция, и Service Mesh как решение

    Как концепция тем лучше, чем более разнородна и сложна архитектура 128
  40. Выводы Service Mesh как решение не является серебряной пулей Выбор

    конкретного решения зависит от приемлемых вам трейд-оффов 129 Финальный результат требует напильника и может удивлять