Slat-tomhais caitheamh CPU airson Istio agus Linkerd

Slat-tomhais caitheamh CPU airson Istio agus Linkerd

Ro-ràdh

Tha sinn a-staigh Shopify thòisich e air Istio a chleachdadh mar mhogal seirbheis. Ann am prionnsabal, tha a h-uile dad gu math, ach a-mhàin aon rud: tha e daor.

В slatan-tomhais foillsichte airson Istio tha e ag ràdh:

Le Istio 1.1, bidh an neach-ionaid ag ithe timcheall air 0,6 vCPU (coraidean brìgheil) gach 1000 iarrtas gach diog.

Airson a’ chiad roinn anns a’ mhogal seirbheis (2 proxies air gach taobh den cheangal), bidh 1200 cores againn dìreach airson an neach-ionaid, aig ìre millean iarrtas gach diog. A rèir àireamhair cosgais Google, tha e ag obrachadh a-mach gu bhith timcheall air $ 40 / mìos / cridhe airson rèiteachadh n1-standard-64, is e sin, cosgaidh an roinn seo leis fhèin barrachd air 50 mìle dolar gach mìos airson 1 millean iarrtas gach diog.

Ivan Sim (Ivan Sim) coimeas gu fradharcach dàil mogal seirbheis an-uiridh agus gheall e an aon rud airson cuimhne agus pròiseasar, ach cha do dh’ obraich e a-mach:

A rèir coltais, àrdaichidh luachan-istio-test.yaml iarrtasan CPU gu mòr. Ma tha mi air mo matamataigs a dhèanamh ceart, feumaidh tu timcheall air 24 cores CPU airson a’ phannal smachd agus 0,5 CPU airson gach neach-ionaid. Chan eil an uiread sin agam. Nì mi na deuchainnean a-rithist nuair a thèid barrachd ghoireasan a thoirt dhomh.

Bha mi airson faicinn dhomh fhìn dè cho coltach ‘s a tha coileanadh Istio ri mogal seirbheis stòr fosgailte eile: Linkerd.

Stàladh mogal seirbheis

An toiseach, chuir mi a-steach e ann am brabhsair 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!

Chleachd mi SuperGloo oir tha e a’ dèanamh bootstrapping mogal na seirbheis gu math nas fhasa. Cha robh agam ri mòran a dhèanamh. Cha bhith sinn a’ cleachdadh SuperGloo ann an cinneasachadh, ach tha e air leth freagarrach airson a leithid de ghnìomh. B’ fheudar dhomh gu litireil òrdugh no dhà a chleachdadh airson gach mogal seirbheis. Chleachd mi dà bhuidheann airson aonaranachd - aon airson Istio agus Linkerd.

Chaidh an deuchainn a dhèanamh air Google Kubernetes Engine. Chleachd mi Kubernetes 1.12.7-gke.7 agus cruinneachadh de nodan n1-standard-4 le sgèileadh nód fèin-ghluasadach (4 aig a’ char as lugha, 16 aig a’ char as àirde).

An uairsin chuir mi a-steach an dà mhogal seirbheis bhon loidhne-àithne.

A 'chiad Linkerd:

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

An uairsin 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      |
+---------+------------+---------+---------------------------+

Thug an lùb tubaist beagan mhionaidean, agus an uairsin shocraich na pannalan smachd.

(Nòta: Chan eil SuperGloo a’ toirt taic ach do Istio 1.0.x airson a-nis. Rinn mi a-rithist an deuchainn le Istio 1.1.3, ach cha do mhothaich mi diofar sam bith.)

A’ stèidheachadh cleachdadh fèin-ghluasadach Istio

Gus toirt air Istio an sidecar Envoy a chuir a-steach, bidh sinn a’ cleachdadh an inneal-stealladh càr-taobh - MutatingAdmissionWebhook. Cha bhith sinn a’ bruidhinn mu dheidhinn san artaigil seo. Leig leam dìreach a ràdh gur e rianadair a tha seo a bhios a ’cumail sùil air ruigsinneachd a h-uile pod ùr agus gu dinamach a’ cur sidecar agus initContainer, a tha an urra ri gnìomhan iptables.

Sgrìobh sinne aig Shopify an rianadair ruigsinneachd againn fhèin gus sidecars a chuir an gnìomh, ach airson a’ shlat-tomhais seo chleachd mi an rianadair a thig le Istio. Bidh an rianadair a’ stealladh sidecars gu bunaiteach nuair a tha ath-ghoirid san 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

A’ stèidheachadh cleachdadh fèin-ghluasadach Linkerd

Gus stèidheachadh Linkerd sidecar a stèidheachadh, bidh sinn a’ cleachdadh notaichean (chuir mi ris le làimh iad tro 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 Sgàineadh Tolerance Simulator

Thog sinn simuladair fulangas locht ris an canar Istio gus deuchainn a dhèanamh air trafaic gun samhail dha Shopify. Bha feum againn air inneal gus topology àbhaisteach a chruthachadh a bhiodh a’ riochdachadh cuibhreann sònraichte den ghraf seirbheis againn, air a dhealbhadh gu dinamach gus eallach obrach sònraichte a mhodaladh.

Tha bun-structar Shopify fo luchd trom aig àm reic flash. Aig an aon àm, Shopify a’ moladh do luchd-reic a leithid de reic a chumail nas trice. Bidh luchd-ceannach mòr uaireannan a’ toirt rabhadh mu fhèill-reic dealbhaichte. Bidh cuid eile gan giùlan air ar son gun dùil aig àm sam bith den latha no den oidhche.

Bha sinn ag iarraidh gum biodh an simuladair fulangas againn a’ modaladh sruthan obrach a tha a rèir na topologies agus na h-uallaichean obrach a tha air a dhol thairis air bun-structar Shopify san àm a dh’ fhalbh. Is e am prìomh adhbhar airson a bhith a’ cleachdadh mogal seirbheis gu bheil feum againn air earbsachd agus fulangas sgàinidhean aig ìre an lìonraidh, agus tha e cudromach dhuinne gum bi am mogal seirbheis a’ dèiligeadh gu h-èifeachdach ri luchdan a chuir dragh air seirbheisean roimhe seo.

Aig cridhe an simuladair fulangas locht tha nód neach-obrach, a tha ag obair mar nód mogal seirbheis. Faodar nód an neach-obrach a rèiteachadh gu statach aig àm tòiseachaidh no gu dinamach tro REST API. Bidh sinn a’ cleachdadh rèiteachadh fiùghantach de nodan luchd-obrach gus sruthan-obrach a chruthachadh ann an cruth deuchainnean ais-tharraing.

Seo eisimpleir de leithid de phròiseas:

  • Bidh sinn a’ cur air bhog 10 frithealaichean mar bar seirbheis a thilleas freagairt 200/OK às deidh 100 ms.
  • Bidh sinn a’ cur air bhog 10 teachdaichean - bidh gach fear a’ cur 100 iarrtas gach diog gu bar.
  • Gach 10 diog bidh sinn a’ toirt air falbh 1 frithealaiche agus a’ cumail sùil air mearachdan 5xx air an neach-dèiligidh.

Aig deireadh an t-sruth-obrach, bidh sinn a’ sgrùdadh nan logaichean agus na meatrach agus a’ dèanamh cinnteach an deach an deuchainn seachad. San dòigh seo bidh sinn ag ionnsachadh mu choileanadh ar mogal seirbheis agus a’ ruith deuchainn ais-tharraing gus ar barailean mu fhulangas lochdan a dhearbhadh.

(Nòta: Tha sinn a’ smaoineachadh mu bhith a’ fosgladh an simuladair fulangas locht Istio gu fosgailte, ach chan eil sinn deiseil airson sin a dhèanamh fhathast.)

Samhlaiche fulangas locht Istio airson slat-tomhais mogal seirbheis

Tha sinn a’ stèidheachadh grunn nodan obrach den simuladair:

  • irs-client-loadgen: 3 mac-samhail a chuireas 100 iarrtas gach diog gach irs-client.
  • irs-client: 3 mac-samhail a gheibh an t-iarrtas, feitheamh 100ms agus cuir air adhart an t-iarrtas gu irs-server.
  • irs-server: 3 mac-samhail a thilleas 200/OK às deidh 100 ms.

Leis an rèiteachadh seo, is urrainn dhuinn sruth trafaic seasmhach a thomhas eadar 9 puingean crìochnachaidh. Càraichean taobh a-staigh irs-client-loadgen и irs-server faigh 100 iarrtas gach diog, agus irs-client - 200 (a-steach is a-mach).

Bidh sinn a’ cumail sùil air cleachdadh ghoireasan tro Dàtaoir chan eil buidheann Prometheus againn.

Toraidhean

Pannalan smachd

An toiseach, rinn sinn sgrùdadh air caitheamh CPU.

Slat-tomhais caitheamh CPU airson Istio agus Linkerd
Pannal smachd Linkerd ~ 22 millicore

Slat-tomhais caitheamh CPU airson Istio agus Linkerd
Istio pannal smachd: ~ 750 millicore

Bidh am pannal smachd Istio a’ cleachdadh timcheall air 35 uair barrachd ghoireasan CPUseach Linkerd. Gu dearbh, tha a h-uile càil air a chuir a-steach gu bunaiteach, agus bidh istio-telemetry ag ithe mòran de ghoireasan pròiseasar an seo (faodar a chiorramachadh le bhith a ’dì-chomasachadh cuid de dhleastanasan). Ma bheir sinn air falbh am pàirt seo, gheibh sinn fhathast barrachd air 100 millicores, is e sin 4 uair a bharrachdseach Linkerd.

Sidecar proxy

Rinn sinn deuchainn an uairsin air cleachdadh neach-ionaid. Bu chòir dàimh sreathach a bhith ann leis an àireamh de dh'iarrtasan, ach airson gach taobh-chàr tha beagan os cionn a 'toirt buaidh air an lùb.

Slat-tomhais caitheamh CPU airson Istio agus Linkerd
Linkerd: ~ 100 millicores airson teachdaiche irs, ~ 50 millicores airson irs-client-loadgen

Tha coltas loidsigeach air na toraidhean, leis gu bheil neach-ionaid an neach-dèiligidh a’ faighinn a dhà uimhir de thrafaig ris an neach-ionaid loadgen: airson gach iarrtas a-mach bho loadgen, tha aon neach a’ tighinn a-steach agus aon a-mach.

Slat-tomhais caitheamh CPU airson Istio agus Linkerd
Istio / Envoy: ~ 155 millicores airson ir-client, ~ 75 millicores airson iir-client-loadgen

Chì sinn toraidhean co-chosmhail airson sidecars Istio.

Ach san fharsaingeachd, bidh luchd-ionaid Istio/Envoy ag ithe timcheall air 50% barrachd ghoireasan CPUseach Linkerd.

Chì sinn an aon sgeama air taobh an fhrithealaiche:

Slat-tomhais caitheamh CPU airson Istio agus Linkerd
Linkerd: ~ 50 millicore airson iers-server

Slat-tomhais caitheamh CPU airson Istio agus Linkerd
Istio / Envoy: ~ 80 millicores airson iers-server

Air taobh an fhrithealaiche, bidh sidecar Istio/Envoy ag ithe timcheall air 60% barrachd ghoireasan CPUseach Linkerd.

co-dhùnadh

Bidh an neach-ionaid Istio Envoy ag ithe 50 +% barrachd CPU na Linkerd air an eallach obrach samhlachail againn. Bidh pannal smachd Linkerd ag ithe mòran nas lugha de ghoireasan na Istio, gu sònraichte airson na prìomh phàirtean.

Tha sinn fhathast a’ beachdachadh air mar as urrainn dhuinn na cosgaisean sin a lughdachadh. Ma tha beachdan agad, feuch an roinn thu!

Source: www.habr.com

Cuir beachd ann