Tondro fanjifana CPU ho an'ny Istio sy Linkerd

Tondro fanjifana CPU ho an'ny Istio sy Linkerd

fampidirana

Ao isika Shopify nanomboka nametraka Istio ho toy ny mesh serivisy. Amin'ny ankapobeny, tsara ny zava-drehetra, afa-tsy amin'ny zavatra iray: lafo izany.

Π’ navoaka benchmarks fa hoy Istio:

Miaraka amin'ny Istio 1.1, ny proxy dia mandany manodidina ny 0,6 vCPUs (core virtoaly) isaky ny fangatahana 1000 isan-tsegondra.

Ho an'ny faritra voalohany amin'ny serivisy serivisy (proxies 2 amin'ny lafiny tsirairay amin'ny fifandraisana), dia hanana cores 1200 izahay ho an'ny proxy, amin'ny tahan'ny fangatahana iray tapitrisa isan-tsegondra. Araka ny kajy ny vidin'ny Google, dia mety ho eo amin'ny $40/volana/fototra ho an'ny fanamboarana. n1-standard-64, izany hoe ity faritra ity fotsiny dia handany 50 arivo dolara mahery isam-bolana ho an'ny fangatahana 1 tapitrisa isan-tsegondra.

Ivan Sim (Ivan Sim) ampitahaina amin'ny maso fanemorana ny serivisy mesh tamin'ny taon-dasa ary nampanantena izany ho an'ny fitadidiana sy ny processeur, saingy tsy nety izany:

Toa hampitombo be ny fangatahana CPU ny values-istio-test.yaml. Raha nanao ny kajikajy tsara aho dia mila cores CPU 24 eo ho eo ianao ho an'ny tontonana fanaraha-maso ary CPU 0,5 ho an'ny proxy tsirairay. Tsy manana izany betsaka aho. Hamerimberiko ny fitsapana rehefa omena loharano bebe kokoa ho ahy.

Te-hahita ny tenako manokana aho hoe mitovy amin'ny zava-bitan'i Istio amin'ny harato serivisy loharano misokatra hafa: Linkerd.

Fametrahana harato serivisy

Voalohany indrindra, nametraka azy tao anaty cluster aho 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!

Nampiasa SuperGloo aho satria manamora kokoa ny bootstrap ny serivisy. Tsy nila nanao zavatra betsaka aho. Tsy mampiasa SuperGloo izahay amin'ny famokarana, fa mety amin'ny asa toy izany. Tsy maintsy nampiasa baiko roa aho isaky ny harato serivisy. Nampiasa cluster roa aho mba hitokana - iray ho an'ny Istio sy Linkerd.

Ny andrana dia natao tao amin'ny Google Kubernetes Engine. Nampiasa Kubernetes aho 1.12.7-gke.7 ary dobo nodes n1-standard-4 miaraka amin'ny scaling node mandeha ho azy (farafahakeliny 4, ambony indrindra 16).

Avy eo dia nametraka ny serivisy serivisy roa avy amin'ny baiko baiko aho.

Mpikambana voalohany:

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

Avy eo i 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      |
+---------+------------+---------+---------------------------+

Naharitra minitra vitsivitsy ny fikorontanana, ary avy eo dia nilamina ny tontonana fanaraha-maso.

(Fanamarihana: Istio 1.0.x ihany no manohana ny SuperGloo amin'izao fotoana izao. Naveriko indray ny fanandramana tamin'ny Istio 1.1.3, saingy tsy nahatsikaritra fahasamihafana miharihary.)

Fametrahana Istio Automatic Deployment

Mba hahatonga an'i Istio hametraka ny Envoy sidecar dia mampiasa ny injector sidecar βˆ’ MutatingAdmissionWebhook. Tsy hiresaka momba izany isika ato amin'ity lahatsoratra ity. Avelao aho hilaza fotsiny fa ity dia mpanara-maso izay manara-maso ny fidirana amin'ny pods vaovao rehetra ary manampy amin'ny fomba mavitrika ny sidecar sy initContainer, izay tompon'andraikitra amin'ny asa. iptables.

Izahay ao amin'ny Shopify dia nanoratra ny mpanara-maso ny fidiranay manokana mba hampiharana sidecars, fa ho an'ity mari-pamantarana ity dia nampiasa ny controller miaraka amin'i Istio aho. Ny controller dia manindrona sidecars amin'ny alΓ lan'ny default rehefa misy hitsin-dΓ lana amin'ny namespace 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

Fametrahana ny fametrahana Linkerd mandeha ho azy

Mba hametrahana ny fampidirana sidecar Linkerd dia mampiasa fanamarihana izahay (nampiako azy ireo tamin'ny alΓ lan'ny 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

Simulator Fandeferana Istio Fault

Nanangana simulator fandeferana fahadisoana antsoina hoe Istio izahay hanandrana ny fifamoivoizana tokana amin'ny Shopify. Nila fitaovana izahay hamoronana topologie manokana izay maneho ampahany manokana amin'ny kisary serivisy, namboarina mavitrika mba hamolavola enta-mavesatra manokana.

Enta-mavesatra ny fotodrafitrasa Shopify mandritra ny fivarotana tselatra. Mandritra izany fotoana izany, Shopify Manoro hevitra ireo mpivarotra mba hanao varotra toy izany matetika kokoa. Ny mpanjifa lehibe indraindray dia mampitandrina momba ny fivarotana tselatra nomanina. Ny hafa dia mitondra azy ireo tsy nampoizina ho antsika na oviana na oviana na andro na alina.

Tianay ny simulator ho an'ny fahatanjahanay mba hamolavola ny workflow izay mifanandrify amin'ny topologie sy ny enta-mavesatra izay nanenika ny fotodrafitrasa Shopify taloha. Ny tanjona lehibe amin'ny fampiasana harato serivisy dia ny mila fahamendrehana sy fandeferana amin'ny tambajotra, ary zava-dehibe ho antsika ny fiatrehana tsara ny enta-mavesatry ny serivisy taloha.

Ao am-pon'ny simulator fandeferana fahadisoana dia node mpiasa, izay miasa toy ny node mesh serivisy. Ny node mpiasa dia azo amboarina static amin'ny fanombohana na mavitrika amin'ny alΓ lan'ny REST API. Mampiasa fanefena mavitrika amin'ny node mpiasa izahay mba hamoronana rindran-damina amin'ny endrika fitsapana fihemorana.

Ity misy ohatra amin'ny dingana toy izany:

  • Manokatra mpizara 10 izahay toy ny bar serivisy izay mamerina valiny 200/OK aorian'ny 100 ms.
  • Manomboka mpanjifa 10 izahay - samy mandefa fangatahana 100 isan-tsegondra ny tsirairay bar.
  • Isaky ny 10 segondra dia manala mpizara 1 izahay ary manara-maso ny lesoka 5xx amin'ny mpanjifa.

Amin'ny fiafaran'ny fizotran'ny asa dia mandinika ny diary sy ny metrika isika ary manamarina raha nandalo ny fitsapana. Amin'izany fomba izany no ianarantsika momba ny fahombiazan'ny serivisy serivisy ary manao andrana mihemotra mba hitsapana ny hevitsika momba ny fandeferana diso.

(Fanamarihana: Mieritreritra ny hisokatra malalaka ny simulator fandeferana Istio izahay, saingy mbola tsy vonona ny hanao izany.)

Simulator fandeferana Istio ho an'ny mari-pamantarana mesh serivisy

Nanangana nodes miasa maromaro amin'ny simulator izahay:

  • irs-client-loadgen: Replika 3 mandefa fangatahana 100 isan-tsegondra isaky ny irs-client.
  • irs-client: Dika mitovy 3 mandray ny fangatahana, miandry 100ms ary alefaso any amin'ny irs-server.
  • irs-server: Replika 3 miverina 200/OK aorian'ny 100 ms.

Miaraka amin'ity fanamafisana ity, azontsika atao ny mandrefy ny fikorianan'ny fifamoivoizana eo anelanelan'ny teboka 9. Sidecar in irs-client-loadgen ΠΈ irs-server mahazo fangatahana 100 isan-tsegondra, ary irs-client - 200 (miditra sy mivoaka).

Manara-maso ny fampiasana loharano izahay DataDogsatria tsy manana cluster Prometheus izahay.

vokatra

Takelaka fanaraha-maso

Voalohany, nandinika ny fanjifana CPU izahay.

Tondro fanjifana CPU ho an'ny Istio sy Linkerd
Panel fanaraha-maso Linkerd ~ 22 millicore

Tondro fanjifana CPU ho an'ny Istio sy Linkerd
Panel fanaraha-maso Istio: ~ 750 millicore

Ny tontonana fanaraha-maso Istio dia mampiasa eo ho eo 35 heny ny loharanon-karena CPUnoho ny Linkerd. Mazava ho azy, ny zava-drehetra dia napetraka amin'ny alΓ lan'ny default, ary ny istio-telemetry dia mandany loharanon-karenan'ny processeur be dia be eto (mety ho kilemaina amin'ny alΓ lan'ny fanesorana ny fiasa sasany). Raha esorina ity singa ity dia mbola mahazo mihoatra ny 100 millicores, izany hoe 4 heny bebe kokoanoho ny Linkerd.

Sidecar proxy

Nanandrana ny fampiasana proxy izahay avy eo. Tokony hisy fifandraisana tsipika miaraka amin'ny isan'ny fangatahana, fa ho an'ny sidecar tsirairay dia misy ny overhead izay misy fiantraikany amin'ny curve.

Tondro fanjifana CPU ho an'ny Istio sy Linkerd
Linkerd: ~100 millicores ho an'ny irs-client, ~50 milicores ho an'ny irs-client-loadgen

Ny valiny dia toa mitombina, satria ny proxy mpanjifa dia mahazo fifamoivoizana avo roa heny noho ny proxy loadgen: isaky ny fangatahana mivoaka avy amin'ny loadgen, ny mpanjifa dia manana iray miditra ary iray mivoaka.

Tondro fanjifana CPU ho an'ny Istio sy Linkerd
Istio/Envoy: ~155 millicores ho an'ny irs-client, ~75 milicores ho an'ny irs-client-loadgen

Mahita valiny mitovitovy amin'izany izahay ho an'ny sidecars Istio.

Saingy amin'ny ankapobeny, ny proxy Istio/Envoy dia mandany eo ho eo amin'ny 50% ny loharanon-karena CPUnoho ny Linkerd.

Hitantsika ny tetika mitovy amin'ny lafiny mpizara:

Tondro fanjifana CPU ho an'ny Istio sy Linkerd
Linkerd: ~50 millicore ho an'ny irs-server

Tondro fanjifana CPU ho an'ny Istio sy Linkerd
Istio/Iraka: ~80 millicore ho an'ny irs-server

Eo amin'ny lafiny mpizara dia mampiasa sidecar Istio/Envoy eo ho eo amin'ny 60% ny loharanon-karena CPUnoho ny Linkerd.

famaranana

Ny proxy Istio Envoy dia mandany CPU 50+% bebe kokoa noho ny Linkerd amin'ny enta-mavesatra ataontsika. Ny tontolon'ny fanaraha-maso Linkerd dia mandany loharanon-karena kely kokoa noho ny Istio, indrindra ho an'ireo singa fototra.

Mbola mieritreritra ny fomba hampihenana ireo fandaniana ireo izahay. Raha manana hevitra ianao dia mba zarao!

Source: www.habr.com

Add a comment