Нишондиҳандаи истеъмоли CPU барои Istio ва Linkerd

Нишондиҳандаи истеъмоли CPU барои Istio ва Linkerd

Муқаддима

Мо дар он ҳастем Shopify Истио-ро ба сифати торчаи хизматрасонй чорй карданй шуд. Умуман, ҳама чиз хуб аст, ба истиснои як чиз: кимат аст.

В нишондиҳандаҳои интишоршуда барои Истио мегӯяд:

Бо Istio 1.1, прокси барои 0,6 дархост дар як сония тақрибан 1000 vCPU (аслҳои виртуалӣ) истеъмол мекунад.

Барои минтақаи аввал дар шабакаи хидматрасонӣ (2 прокси дар ҳар як тарафи пайвастшавӣ), мо танҳо барои прокси 1200 ядро ​​​​дорем, ки бо суръати як миллион дархост дар як сония. Мувофиқи ҳисобкунаки хароҷоти Google, он барои конфигуратсия тақрибан 40 доллар дар як моҳ аст. n1-standard-64, яъне танҳо ҳамин минтақа барои 50 миллион дархост дар як сония ба мо беш аз 1 ҳазор доллар дар як моҳ арзиш хоҳад дошт.

Иван Сим (Иван Сим) ба таври визуалӣ муқоиса карда мешавад таъхирҳои хидматрасонии mesh соли гузашта ва барои хотира ва протсессор ваъда дода буд, аммо ин натиҷа надод:

Эҳтимол, values-istio-test.yaml дархостҳои CPU-ро ба таври ҷиддӣ афзоиш хоҳад дод. Агар ман математикаи худро дуруст иҷро карда бошам, ба шумо тақрибан 24 ядрои CPU барои панели идоракунӣ ва 0,5 CPU барои ҳар як прокси лозим аст. Ман ин қадар надорам. Вақте ки ба ман захираҳои бештар ҷудо карда мешаванд, ман санҷишҳоро такрор мекунам.

Ман мехостам худам бубинам, ки чӣ гуна иҷрои Истио ба шабакаи дигари хидматрасонии кушодаасос шабоҳат дорад: Линкерд.

Насби торҳои хидматрасонӣ

Пеш аз ҳама, ман онро дар кластер насб кардам SuperGloo:

$ supergloo init
installing supergloo version 0.3.12
using chart uri https://storage.googleapis.com/supergloo-helm/charts/supergloo-0.3.12.tgz
configmap/sidecar-injection-resources created
serviceaccount/supergloo created
serviceaccount/discovery created
serviceaccount/mesh-discovery created
clusterrole.rbac.authorization.k8s.io/discovery created
clusterrole.rbac.authorization.k8s.io/mesh-discovery created
clusterrolebinding.rbac.authorization.k8s.io/supergloo-role-binding created
clusterrolebinding.rbac.authorization.k8s.io/discovery-role-binding created
clusterrolebinding.rbac.authorization.k8s.io/mesh-discovery-role-binding created
deployment.extensions/supergloo created
deployment.extensions/discovery created
deployment.extensions/mesh-discovery created
install successful!

Ман SuperGloo-ро истифода кардам, зеро он пурбор кардани шабакаи хидматрасониро хеле осон мекунад. Ба ман лозим набуд, ки бисёр кор кунам. Мо SuperGloo-ро дар истеҳсолот истифода намебарем, аммо он барои чунин вазифа беҳтарин аст. Ба ман лозим омад, ки барои ҳар як шабакаи хидматӣ чанд фармонро истифода барам. Ман ду кластерро барои ҷудокунӣ истифода кардам - ​​яке барои Истио ва Linkerd.

Таҷриба дар Google Kubernetes Engine гузаронида шуд. Ман Kubernetes истифода кардам 1.12.7-gke.7 ва ҳавзи гиреҳҳо n1-standard-4 бо миқёси автоматии гиреҳ (ҳадди ақал 4, максимум 16).

Сипас ман ҳарду торҳои хидматрасониро аз сатри фармон насб кардам.

Пайванди аввал:

$ supergloo install linkerd --name linkerd
+---------+--------------+---------+---------------------------+
| INSTALL |     TYPE     | STATUS  |          DETAILS          |
+---------+--------------+---------+---------------------------+
| linkerd | Linkerd Mesh | Pending | enabled: true             |
|         |              |         | version: stable-2.3.0     |
|         |              |         | namespace: linkerd        |
|         |              |         | mtls enabled: true        |
|         |              |         | auto inject enabled: true |
+---------+--------------+---------+---------------------------+

Баъд Истио:

$ supergloo install istio --name istio --installation-namespace istio-system --mtls=true --auto-inject=true
+---------+------------+---------+---------------------------+
| INSTALL |    TYPE    | STATUS  |          DETAILS          |
+---------+------------+---------+---------------------------+
| istio   | Istio Mesh | Pending | enabled: true             |
|         |            |         | version: 1.0.6            |
|         |            |         | namespace: istio-system   |
|         |            |         | mtls enabled: true        |
|         |            |         | auto inject enabled: true |
|         |            |         | grafana enabled: true     |
|         |            |         | prometheus enabled: true  |
|         |            |         | jaeger enabled: true      |
+---------+------------+---------+---------------------------+

Доираи фалокат чанд дақиқа тӯл кашид ва баъд панелҳои идоракунӣ устувор шуданд.

(Эзоҳ: SuperGloo ҳоло танҳо Istio 1.0.x -ро дастгирӣ мекунад. Ман таҷрибаро бо Istio 1.1.3 такрор кардам, аммо ягон фарқияти назаррасро мушоҳида накардам.)

Танзими истихроҷи худкори Истио

Барои насб кардани Istio Envoy паҳлӯ, мо инжектори канори − -ро истифода мебарем MutatingAdmissionWebhook. Мо дар ин мақола дар бораи он сӯҳбат намекунем. Бигзор ман танҳо бигӯям, ки ин контролерест, ки дастрасии ҳама подкастҳои навро назорат мекунад ва ба таври динамикӣ паҳлӯ ва initContainer илова мекунад, ки барои вазифаҳо масъул аст. iptables.

Мо дар Shopify контролери дастрасии худро барои татбиқи мошинҳои канорӣ навиштем, аммо барои ин нишондод ман контроллереро, ки бо Istio меояд, истифода кардам. Вақте ки дар фазои ном миёнабур мавҷуд аст, контроллер ба таври нобаёнӣ мошинҳои канориро сӯзандору мекунад istio-injection: enabled:

$ kubectl label namespace irs-client-dev istio-injection=enabled
namespace/irs-client-dev labeled

$ kubectl label namespace irs-server-dev istio-injection=enabled
namespace/irs-server-dev labeled

Танзими ҷойгиркунии худкори Linkerd

Барои насб кардани ҷобаҷогузории канори Linkerd, мо эзоҳҳоро истифода мебарем (ман онҳоро тавассути дастӣ илова кардам kubectl edit):

metadata:
  annotations:
    linkerd.io/inject: enabled

$ k edit ns irs-server-dev 
namespace/irs-server-dev edited

$ k get ns irs-server-dev -o yaml
apiVersion: v1
kind: Namespace
metadata:
  annotations:
    linkerd.io/inject: enabled
  name: irs-server-dev
spec:
  finalizers:
  - kubernetes
status:
  phase: Active

Истио симулятори таҳаммулпазирии хатогиҳо

Мо як симулятори таҳаммулпазирии хатогиҳоро бо номи Istio сохтем, то бо трафики беназири Shopify таҷриба кунад. Барои сохтани топологияи фармоишӣ ба мо асбобе лозим буд, ки як қисми мушаххаси графики хидматрасонии моро ифода кунад, ки барои моделсозии сарбории мушаххаси динамикӣ танзим карда шудааст.

Ҳангоми фурӯши флеш инфрасохтори Shopify зери бори вазнин аст. Дар айни замон, Shopify ба фурӯшандагон тавсия медиҳад, ки ин гуна фурӯшро бештар гузаронанд. Мизоҷони калон баъзан дар бораи фурӯши флеши ба нақша гирифташуда огоҳ мекунанд. Дигарон онҳоро ба таври ғайричашмдошт барои мо дар ҳар вақти рӯз ё шаб мегузаронанд.

Мо мехостем, ки симулятори устувории мо ҷараёнҳои кориро модел кунад, ки ба топологияҳо ва сарбории корӣ мувофиқат кунанд, ки дар гузашта инфрасохтори Shopify-ро пур карда буданд. Ҳадафи асосии истифодаи шабакаи хидматрасонӣ дар он аст, ки мо ба эътимоднокӣ ва таҳаммулпазирии хатогиҳо дар сатҳи шабака ниёз дорем ва барои мо муҳим аст, ки шабакаи хидматрасонӣ бо сарбориҳое, ки қаблан хидматҳоро халалдор мекарданд, самаранок мубориза барад.

Дар маркази симулятори таҳаммулпазирии хатогиҳо як гиреҳи корӣ мебошад, ки ҳамчун гиреҳи тории хидматӣ амал мекунад. Гиреҳи коргариро ҳангоми оғозёбӣ ё ба таври динамикӣ тавассути REST API танзим кардан мумкин аст. Мо конфигуратсияи динамикии гиреҳҳои коргариро барои эҷоди ҷараёнҳои корӣ дар шакли санҷишҳои регрессионӣ истифода мебарем.

Дар ин ҷо як мисоли чунин раванд аст:

  • Мо оғоз 10 серверҳо ҳамчун bar хидмате, ки посух медиҳад 200/OK пас аз 100 мс.
  • Мо 10 муштариро оғоз мекунем - ҳар як ба як сония 100 дархост мефиристад bar.
  • Ҳар 10 сония мо 1 серверро нест мекунем ва хатогиҳоро назорат мекунем 5xx дар бораи муштарӣ.

Дар охири ҷараёни кор, мо гузоришҳо ва ченакҳоро тафтиш мекунем ва тафтиш мекунем, ки оё санҷиш гузаштааст. Ин аст, ки мо дар бораи кори шабакаи хидматрасонии худ маълумот мегирем ва санҷиши регрессияро мегузаронем, то тахминҳои худро дар бораи таҳаммулпазирии хатоҳо санҷем.

(Эзоҳ: Мо дар бораи манбаи кушодаи симулятори таҳаммулпазирии хатогиҳои Istio фикр мекунем, аммо ҳоло ба ин кор омода нестем.)

Istio симулятори таҳаммулпазирии хатогиҳо барои меҳвари хидматрасонӣ

Мо якчанд гиреҳҳои кории симуляторро насб кардем:

  • irs-client-loadgen: 3 нусха, ки дар як сония 100 дархост мефиристанд irs-client.
  • irs-client: 3 реплика, ки дархостро қабул мекунад, 100 мс интизор шавед ва дархостро ба он равон кунед irs-server.
  • irs-server: 3 нусхае, ки бармегардад 200/OK пас аз 100 мс.

Бо ин конфигуратсия мо метавонем ҷараёни мӯътадили трафикро байни 9 нуқтаи ниҳоӣ чен кунем. Вагонҳо дар irs-client-loadgen и irs-server қабул 100 дархост дар як сония, ва irs-client — 200 (даромад ва баромад).

Мо истифодаи захираҳоро тавассути DataDogзеро мо кластери Prometheus надорем.

натиҷаҳои

Панелҳои идоракунӣ

Аввалан, мо истеъмоли CPU-ро тафтиш кардем.

Нишондиҳандаи истеъмоли CPU барои Istio ва Linkerd
Панели идоракунии Linkerd ~ 22 милликор

Нишондиҳандаи истеъмоли CPU барои Istio ва Linkerd
Панели идоракунии Истио: ~ 750 милликор

Панели идоракунии Истио тахминан истифода мебарад 35 маротиба бештар захираҳои CPUназар ба Линкерд. Албатта, ҳама чиз бо нобаёнӣ насб карда мешавад ва истио-телеметрия дар ин ҷо захираҳои зиёди протсессорро истеъмол мекунад (онро бо хомӯш кардани баъзе функсияҳо ғайрифаъол кардан мумкин аст). Агар мо ин компонентро хориҷ кунем, мо ҳоло ҳам зиёда аз 100 милликор мегирем, яъне 4 баробар зиёд астназар ба Линкерд.

Прокси мошини паҳлӯ

Мо баъдан истифодаи проксиро санҷидем. Бо шумораи дархостҳо бояд робитаи хаттӣ вуҷуд дошта бошад, аммо барои ҳар як варақи паҳлӯӣ каме сарборӣ вуҷуд дорад, ки ба каҷ таъсир мерасонад.

Нишондиҳандаи истеъмоли CPU барои Istio ва Linkerd
Linkerd: ~100 милликор барои irs-client, ~50 милликор барои irs-client-loadgen

Натиҷаҳо мантиқӣ ба назар мерасанд, зеро прокси мизоҷ назар ба прокси loadgen ду маротиба зиёдтар трафик мегирад: барои ҳар як дархости содиротӣ аз loadgen, муштарӣ як воридотӣ ва як баромад дорад.

Нишондиҳандаи истеъмоли CPU барои Istio ва Linkerd
Истио/фиристода: ~155 милликор барои irs-client, ~75 милликор барои irs-client-loadgen

Мо натиҷаҳои шабеҳро барои канораҳои Истио мебинем.

Аммо дар маҷмӯъ, проксиҳои Истио / Envoy истеъмол мекунанд тақрибан 50% захираҳои CPU бештарназар ба Линкерд.

Мо ҳамон схемаро дар тарафи сервер мебинем:

Нишондиҳандаи истеъмоли CPU барои Istio ва Linkerd
Linkerd: ~ 50 милликор барои irs-сервер

Нишондиҳандаи истеъмоли CPU барои Istio ва Linkerd
Истио / фиристода: ~ 80 милликор барои irs-сервер

Дар тарафи сервер, канори Истио/Энвой истеъмол мекунад тақрибан 60% захираҳои CPU бештарназар ба Линкерд.

хулоса

Прокси Istio Envoy дар сарбории тақлидшудаи мо нисбат ба Linkerd 50+% бештар CPU истеъмол мекунад. Панели идоракунии Linkerd нисбат ба Istio, махсусан барои ҷузъҳои асосӣ, захираҳои камтар истеъмол мекунад.

Мо то хол дар бораи он фикр мекунем, ки ин харочот чй тавр кам карда шавад. Агар шумо идеяҳо дошта бошед, лутфан мубодила кунед!

Манбаъ: will.com

Илова Эзоҳ