Benchmark tal-konsum tas-CPU għal Istio u Linkerd

Benchmark tal-konsum tas-CPU għal Istio u Linkerd

Introduzzjoni

Aħna qegħdin fih Shopify beda juża Istio bħala servizz malji. Fil-prinċipju, kollox tajjeb, ħlief għal ħaġa waħda: huwa għali.

В benchmarks ippubblikati għal Istio jgħid:

B'Istio 1.1, il-proxy jikkonsma madwar 0,6 vCPUs (virtwali cores) għal kull 1000 talba kull sekonda.

Għall-ewwel reġjun fil-malji tas-servizz (2 prokuri fuq kull naħa tal-konnessjoni), se jkollna 1200 qalba biss għall-prokura, b'rata ta 'miljun talba kull sekonda. Skont il-kalkulatur tal-ispiża ta 'Google, dan jirriżulta li jkun ta' madwar $40/xahar/qalba għall-konfigurazzjoni n1-standard-64, jiġifieri, dan ir-reġjun waħdu se jiswielna aktar minn 50 elf dollaru fix-xahar għal 1 miljun talba kull sekonda.

Ivan Sim (Ivan Sim) imqabbla viżwalment dewmien fil-malji tas-servizz is-sena li għaddiet u wiegħed l-istess għall-memorja u l-proċessur, iżda ma ħadmitx:

Apparentement, values-istio-test.yaml se jżid serjament it-talbiet tas-CPU. Jekk għamilt il-matematika tiegħi b'mod korrett, għandek bżonn madwar 24 CPU core għall-pannell tal-kontroll u 0,5 CPU għal kull prokura. M'għandix daqshekk. Ser nirrepeti t-testijiet meta jiġu allokati aktar riżorsi lili.

Xtaqt nara għalija nnifsi kemm hi simili l-prestazzjoni ta' Istio għal malja ta' servizz ta' sors miftuħ ieħor: Linkerd.

Installazzjoni tal-malji tas-servizz

L-ewwelnett, installajtha fi cluster 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!

Jien użajt SuperGloo għax jagħmel il-bootstrapping tal-malji tas-servizz ħafna aktar faċli. Ma kellix għalfejn nagħmel ħafna. Aħna ma nużawx SuperGloo fil-produzzjoni, iżda huwa ideali għal tali kompitu. Kelli nuża litteralment koppja ta 'kmandi għal kull malja tas-servizz. Jien użajt żewġ gruppi għall-iżolament - wieħed kull wieħed għal Istio u Linkerd.

L-esperiment sar fuq Google Kubernetes Engine. Jien użajt Kubernetes 1.12.7-gke.7 u ġabra ta 'nodi n1-standard-4 bi skala awtomatika ta 'node (minimu 4, massimu 16).

Imbagħad installajt iż-żewġ malji tas-servizz mil-linja tal-kmand.

L-Ewwel Konness:

$ 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 |
+---------+--------------+---------+---------------------------+

Imbagħad Istio:

$ 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      |
+---------+------------+---------+---------------------------+

Il-crash-loop ħa ftit minuti, u mbagħad il-pannelli tal-kontroll stabbilizzaw.

(Nota: SuperGloo jappoġġja biss Istio 1.0.x għalissa. Irrepetu l-esperiment b'Istio 1.1.3, iżda ma ndunajt l-ebda differenza notevoli.)

Twaqqif ta' Istio Awtomatiku Skjerament

Biex tagħmel Istio tinstalla s-sidecar Envoy, nużaw l-injettur sidecar − MutatingAdmissionWebhook. Mhux se nitkellmu dwarha f'dan l-artikolu. Ħa ngħid biss li dan huwa kontrollur li jimmonitorja l-aċċess tal-pods ġodda kollha u jżid b'mod dinamiku sidecar u initContainer, li huwa responsabbli għall-kompiti iptables.

Aħna ta 'Shopify ktibna l-kontrollur tal-aċċess tagħna stess biex nimplimentaw sidecars, iżda għal dan il-punt ta' referenza użajt il-kontrollur li jiġi ma 'Istio. Il-kontrollur jinjetta sidecars awtomatikament meta jkun hemm shortcut fl-ispazju tal-isem 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

Twaqqif ta' skjerament awtomatiku ta' Linkerd

Biex twaqqaf l-inkorporazzjoni tal-sidecar Linkerd, nużaw annotazzjonijiet (żidejthom manwalment permezz 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 Simulatur tat-Tolleranza tal-Ħtija

Bnejna simulatur tat-tolleranza tal-ħsarat imsejjaħ Istio biex nesperimenta bi traffiku uniku għal Shopify. Neħtieġu għodda biex noħolqu topoloġija tad-dwana li tirrappreżenta porzjon speċifiku tal-graff tas-servizz tagħna, ikkonfigurat b'mod dinamiku biex jimmudella tagħbija tax-xogħol speċifika.

L-infrastruttura ta 'Shopify hija taħt tagħbija kbira waqt il-bejgħ flash. Fl-istess ħin, Shopify jirrakkomanda lill-bejjiegħa biex jagħmlu tali bejgħ aktar spiss. Klijenti kbar kultant iwissu dwar bejgħ flash ippjanat. Oħrajn imexxuhom għalina bla mistenni fi kwalunkwe ħin tal-ġurnata jew tal-lejl.

Ridna li s-simulatur ta’ reżiljenza tagħna jimmudella flussi tax-xogħol li jaqblu mat-topoloġiji u l-piżijiet tax-xogħol li għelbu l-infrastruttura ta’ Shopify fil-passat. L-għan ewlieni tal-użu ta 'malji ta' servizz huwa li neħtieġu affidabbiltà u tolleranza ta 'ħsarat fil-livell tan-netwerk, u huwa importanti għalina li l-malja tas-servizz tlaħħaq b'mod effettiv ma' tagħbijiet li qabel kienu jfixklu s-servizzi.

Fil-qalba tas-simulatur tat-tolleranza tal-ħsarat hemm nodu tal-ħaddiem, li jaġixxi bħala nodu tal-malji tas-servizz. In-nodu tal-ħaddiem jista 'jiġi kkonfigurat b'mod statiku fl-istartjar jew b'mod dinamiku permezz ta' REST API. Aħna nużaw konfigurazzjoni dinamika ta 'nodi tal-ħaddiema biex noħolqu flussi tax-xogħol fil-forma ta' testijiet ta 'rigressjoni.

Hawn eżempju ta 'proċess bħal dan:

  • Inniedu 10 servers bħala bar servizz li jirritorna tweġiba 200/OK wara 100 ms.
  • Inniedu 10 klijenti - kull wieħed jibgħat 100 talba kull sekonda lil bar.
  • Kull 10 sekondi inneħħu server 1 u nissorveljaw l-iżbalji 5xx fuq il-klijent.

Fl-aħħar tal-fluss tax-xogħol, aħna neżaminaw ir-zkuk u l-metriċi u niċċekkjaw jekk it-test għadda. B'dan il-mod nitgħallmu dwar il-prestazzjoni tal-malji tas-servizz tagħna u nwettqu test ta 'rigressjoni biex nittestjaw is-suppożizzjonijiet tagħna dwar it-tolleranza tal-ħsarat.

(Nota: Qed naħsbu dwar il-ftuħ tas-simulatur tat-tolleranza tal-ħsarat Istio, iżda għadna m'aħniex lesti li nagħmlu dan.)

Istio simulatur tat-tolleranza tal-ħsarat għall-benchmark tal-malji tas-servizz

Aħna waqqafna diversi nodi tax-xogħol tas-simulatur:

  • irs-client-loadgen: 3 repliki li jibagħtu 100 talba kull sekonda kull irs-client.
  • irs-client: 3 repliki li jirċievu t-talba, stenna 100ms u jgħaddu t-talba lil irs-server.
  • irs-server: 3 repliki li jirritornaw 200/OK wara 100 ms.

B'din il-konfigurazzjoni, nistgħu nkejlu fluss stabbli tat-traffiku bejn 9 endpoints. Sidecars ġewwa irs-client-loadgen и irs-server tirċievi 100 talba kull sekonda, u irs-client — 200 (deħlin u ħerġin).

Aħna nsegwu l-użu tar-riżorsi permezz DataDoggħax m'għandniex cluster Prometheus.

Sejbiet

Pannelli tal-kontroll

L-ewwel, eżaminajna l-konsum tas-CPU.

Benchmark tal-konsum tas-CPU għal Istio u Linkerd
Panel tal-kontroll Linkerd ~ 22 millicore

Benchmark tal-konsum tas-CPU għal Istio u Linkerd
Istio pannell tal-kontroll: ~ 750 millicore

Il-pannell tal-kontroll Istio juża bejn wieħed u ieħor 35 darba aktar riżorsi tas-CPUminn Linkerd. Naturalment, kollox huwa installat b'mod awtomatiku, u l-istio-telemetrija tikkonsma ħafna riżorsi tal-proċessur hawn (jista 'jiġi diżattivat billi jiġu diżattivati ​​xi funzjonijiet). Jekk inneħħu dan il-komponent, xorta jkollna aktar minn 100 millicores, jiġifieri 4 darbiet aktarminn Linkerd.

Prokura sidecar

Imbagħad ittestjajna l-użu ta’ prokura. Għandu jkun hemm relazzjoni lineari man-numru ta 'talbiet, iżda għal kull sidecar hemm xi overhead li jaffettwa l-kurva.

Benchmark tal-konsum tas-CPU għal Istio u Linkerd
Linkerd: ~100 millicores għal irs-client, ~50 millicores għal irs-client-loadgen

Результаты выглядят логично, ведь прокси client получает в два раза больше трафика, чем прокси loadgen: на каждый исходящий запрос от loadgen у client приходится один входящий и один исходящий.

Benchmark tal-konsum tas-CPU għal Istio u Linkerd
Istio/Mibgħut: ~155 millicores għal irs-client, ~75 millicores għal irs-client-loadgen

Naraw riżultati simili għas-sidecars Istio.

Iżda b'mod ġenerali, il-prokuri Istio/Envoy jikkunsmaw madwar 50% aktar riżorsi tas-CPUminn Linkerd.

Naraw l-istess skema fuq in-naħa tas-server:

Benchmark tal-konsum tas-CPU għal Istio u Linkerd
Linkerd: ~ 50 millicore għal irs-server

Benchmark tal-konsum tas-CPU għal Istio u Linkerd
Istio/Mibgħut: ~80 millicore għal irs-server

Fuq in-naħa tas-server, is-sidecar Istio/Envoy jikkonsma madwar 60% aktar riżorsi tas-CPUminn Linkerd.

Konklużjoni

Il-proxy Istio Envoy jikkonsma 50+% aktar CPU minn Linkerd fuq il-volum tax-xogħol simulat tagħna. Il-pannell tal-kontroll Linkerd jikkonsma ħafna inqas riżorsi minn Istio, speċjalment għall-komponenti ewlenin.

Għadna qed naħsbu kif innaqqsu dawn l-ispejjeż. Jekk għandek ideat, jekk jogħġbok aqsam!

Sors: www.habr.com

Żid kumment