Introduzzjoni
Aħna qegħdin fih
В
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 (
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:
Installazzjoni tal-malji tas-servizz
L-ewwelnett, installajtha fi cluster
$ 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
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ġiba200/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 kullirs-client
.irs-client
: 3 repliki li jirċievu t-talba, stenna 100ms u jgħaddu t-talba lilirs-server
.irs-server
: 3 repliki li jirritornaw200/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
Sejbiet
Pannelli tal-kontroll
L-ewwel, eżaminajna l-konsum tas-CPU.
Panel tal-kontroll Linkerd ~ 22 millicore
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.
Linkerd: ~100 millicores għal irs-client, ~50 millicores għal irs-client-loadgen
Результаты выглядят логично, ведь прокси client получает в два раза больше трафика, чем прокси loadgen: на каждый исходящий запрос от loadgen у client приходится один входящий и один исходящий.
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:
Linkerd: ~ 50 millicore għal irs-server
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