Air ais gu microservices le Istio. Pàirt 2

Air ais gu microservices le Istio. Pàirt 2

Thoir an aire. eadar-theangachadh.: A 'chiad phàirt Bha an t-sreath seo coisrigte airson comasan Istio a thoirt a-steach agus an taisbeanadh ann an gnìomh. A-nis bruidhnidh sinn mu thaobhan nas iom-fhillte de rèiteachadh agus cleachdadh a’ mhogal seirbheis seo, agus gu sònraichte, mu shlighean grinn agus riaghladh trafaic lìonraidh.

Bidh sinn cuideachd gad chuimhneachadh gu bheil an artaigil a’ cleachdadh rèiteachaidhean (taisbeanaidhean airson Kubernetes agus Istio) bhon stòr istio-maighstir.

rianachd trafaig

Le Istio, tha comasan ùra a’ nochdadh anns a’ bhuidheann gus:

  • Slighe iarrtas fiùghantach: sgaoileadh canary, deuchainn A/B;
  • Cothromachadh luchdan: sìmplidh agus cunbhalach, stèidhichte air hashes;
  • Ath-bheothachadh an dèidh tuiteam: ùine a-mach, ath-thagradh, luchd-brisidh;
  • A 'cur a-steach lochdan: dàil, iarrtasan air tuiteam, msaa.

Mar a tha an artaigil a’ leantainn, thèid na comasan sin a nochdadh a’ cleachdadh an aplacaid taghte mar eisimpleir agus thèid bun-bheachdan ùra a thoirt a-steach air an t-slighe. Bidh a 'chiad bhun-bheachd mar sin DestinationRules (i.e. riaghailtean mun neach a gheibh an trafaic/iarrtasan - approx. transl.), le cuideachadh a chuireas sinn an gnìomh deuchainn A/B.

Deuchainn A/B: Riaghailtean cinn-uidhe ann an cleachdadh

Bithear a’ cleachdadh deuchainn A/B ann an cùisean far a bheil dà dhreach de thagradh (mar as trice tha iad eadar-dhealaichte a thaobh lèirsinn) agus chan eil sinn 100% cinnteach dè am fear a leasaicheas eòlas an neach-cleachdaidh. Mar sin, bidh sinn a’ ruith an dà dhreach aig an aon àm agus a’ cruinneachadh mheatairean.

Gus an dàrna dreach den frontend a chleachdadh, a tha riatanach airson deuchainn A / B a nochdadh, ruith an òrdugh a leanas:

$ kubectl apply -f resource-manifests/kube/ab-testing/sa-frontend-green-deployment.yaml
deployment.extensions/sa-frontend-green created

Tha an cleachdadh airson an “dreach uaine” eadar-dhealaichte ann an dà àite:

  1. Tha an ìomhaigh stèidhichte air tag eadar-dhealaichte - istio-green,
  2. Tha leubail air na pods version: green.

Leis gu bheil leubail aig an dà chleachdadh app: sa-frontend, iarrtasan air an stiùireadh le seirbheis mas-fhìor sa-external-services airson seirbheis sa-frontend, ath-stiùireadh chun a h-uile suidheachadh agus thèid an luchd a sgaoileadh troimhe algairim cruinn-robin, a bheir gu suidheachadh mar a leanas:

Air ais gu microservices le Istio. Pàirt 2
Cha deach na faidhlichean a chaidh iarraidh a lorg

Cha deach na faidhlichean seo a lorg a chionn 's gu bheil iad air an ainmeachadh ann an dòigh eadar-dhealaichte ann an dreachan eadar-dhealaichte den aplacaid. Dèanamaid cinnteach à seo:

$ curl --silent http://$EXTERNAL_IP/ | tr '"' 'n' | grep main
/static/css/main.c7071b22.css
/static/js/main.059f8e9c.js
$ curl --silent http://$EXTERNAL_IP/ | tr '"' 'n' | grep main
/static/css/main.f87cd8c9.css
/static/js/main.f7659dbb.js

Tha seo a 'ciallachadh sin index.html, ag iarraidh aon dreach de fhaidhlichean statach, faodar a chuir leis an neach-cothromachaidh luchdan gu pods aig a bheil dreach eadar-dhealaichte, far nach eil na faidhlichean sin ann airson adhbharan follaiseach. Mar sin, gus an obraich an tagradh, feumaidh sinn cuingealachadh a shuidheachadh: “bu chòir don aon dreach den tagradh a thug seirbheis index.html seachad iarrtasan às deidh sin".

Gheibh sinn ann le cothromachadh cunbhalach stèidhichte air hash (Co-chothromachadh luchdan hash cunbhalach). Anns a ’chùis seo thèid iarrtasan bhon aon neach-dèiligidh a chuir chun aon eisimpleir backend, airson a bheil seilbh ro-mhìnichte air a chleachdadh - mar eisimpleir, bann-cinn HTTP. Air a bhuileachadh a’ cleachdadh  Riaghailtean Ceann-uidhe.

Riaghailtean Ceann-uidhe

Às dèidh a ' Seirbheis Mas-fhìor chuir sinn iarrtas chun t-seirbheis a tha thu ag iarraidh, a’ cleachdadh DestinationRules is urrainn dhuinn poileasaidhean a mhìneachadh a thèid a chuir an sàs ann an trafaic a tha gu bhith ann airson cùisean den t-seirbheis seo:

Air ais gu microservices le Istio. Pàirt 2
Stiùireadh trafaic le goireasan Istio

thuirt: Tha buaidh ghoireasan Istio air trafaic lìonra air a thaisbeanadh an seo ann an dòigh a tha furasta a thuigsinn. Gus a bhith mionaideach, tha an co-dhùnadh air an t-suidheachadh airson an t-iarrtas a chuir thuige air a dhèanamh leis an Tosgaire ann an Geata Ingress a tha air a dhealbhadh san CRD.

Le Riaghailtean Ceann-uidhe, is urrainn dhuinn cothromachadh luchdan a rèiteachadh gus hashes cunbhalach a chleachdadh agus dèanamh cinnteach gu bheil an aon eisimpleir seirbheis a’ freagairt don aon neach-cleachdaidh. Leigidh an rèiteachadh a leanas leat seo a choileanadh (ceann-uidhe-sa-frontend.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: sa-frontend
spec:
  host: sa-frontend
  trafficPolicy:
    loadBalancer:
      consistentHash:
        httpHeaderName: version   # 1

1 - thèid hash a chruthachadh a rèir susbaint bann-cinn HTTP version.

Cuir a-steach an rèiteachadh leis an òrdugh a leanas:

$ kubectl apply -f resource-manifests/istio/ab-testing/destinationrule-sa-frontend.yaml
destinationrule.networking.istio.io/sa-frontend created

A-nis ruith an àithne gu h-ìosal agus dèan cinnteach gum faigh thu na faidhlichean ceart nuair a shònraicheas tu am bann-cinn version:

$ curl --silent -H "version: yogo" http://$EXTERNAL_IP/ | tr '"' 'n' | grep main

thuirt: Gus luachan eadar-dhealaichte a chur ris a 'cheann-cinnidh agus na toraidhean a dhearbhadh gu dìreach sa bhrobhsair, faodaidh tu a chleachdadh an leudachadh seo gu Chrome (no le seo airson Firefox - approx. eadar-theangachadh.).

San fharsaingeachd, tha barrachd chomasan aig DestinationRules ann an raon cothromachadh luchd - thoir sùil airson mion-fhiosrachadh ann an sgrìobhainnean oifigeil.

Mus dèan thu sgrùdadh air VirtualService tuilleadh, sguabaidh sinn às an “dreach uaine” den tagradh agus an riaghailt stiùiridh trafaic co-fhreagarrach le bhith a’ ruith na h-òrdughan a leanas:

$ kubectl delete -f resource-manifests/kube/ab-testing/sa-frontend-green-deployment.yaml
deployment.extensions “sa-frontend-green” deleted
$ kubectl delete -f resource-manifests/istio/ab-testing/destinationrule-sa-frontend.yaml
destinationrule.networking.istio.io “sa-frontend” deleted

Sgàthan: Seirbheisean mas-fhìor ann an cleachdadh

A ’frasadh (“sgiath”) no sgàthan (“sgàthan”) air a chleachdadh ann an cùisean far a bheil sinn airson deuchainn a dhèanamh air atharrachadh ann an cinneasachadh gun a bhith a’ toirt buaidh air luchd-cleachdaidh deireannach: gus seo a dhèanamh, bidh sinn a’ dùblachadh iarrtasan (“sgàthan”) gu dàrna suidheachadh far an deach na h-atharrachaidhean a thathar ag iarraidh a dhèanamh, agus coimhead ris a’ bhuil. Gu sìmplidh, is ann an seo a bhios do cho-obraiche a’ taghadh a’ chùis as deatamaiche agus a’ dèanamh iarrtas tarraing ann an cruth cnap cho mòr de shalachar is nach urrainn do dhuine sam bith ath-sgrùdadh a dhèanamh air.

Gus an suidheachadh seo a dhearbhadh ann an gnìomh, cruthaichidh sinn dàrna eisimpleir de SA-Logic le biastagan (buggy) le bhith a’ ruith an àithne a leanas:

$ kubectl apply -f resource-manifests/kube/shadowing/sa-logic-service-buggy.yaml
deployment.extensions/sa-logic-buggy created

Agus a-nis leig leinn an àithne a ruith gus dèanamh cinnteach gu bheil a h-uile suidheachadh le app=sa-logic Tha bileagan aca cuideachd leis na dreachan co-fhreagarrach:

$ kubectl get pods -l app=sa-logic --show-labels
NAME                              READY   LABELS
sa-logic-568498cb4d-2sjwj         2/2     app=sa-logic,version=v1
sa-logic-568498cb4d-p4f8c         2/2     app=sa-logic,version=v1
sa-logic-buggy-76dff55847-2fl66   2/2     app=sa-logic,version=v2
sa-logic-buggy-76dff55847-kx8zz   2/2     app=sa-logic,version=v2

seirbheis sa-logic targaidean le suaicheantas app=sa-logic, mar sin thèid a h-uile iarrtas a sgaoileadh am measg a h-uile suidheachadh:

Air ais gu microservices le Istio. Pàirt 2

...

Air ais gu microservices le Istio. Pàirt 2

Coileanaidh sinn seo tro VirtualService ann an co-bhonn ri DestinationRule, far am bi na riaghailtean a’ dearbhadh fo-sheataichean agus slighean an t-Seirbheis Mas-fhìor gu fo-sheata sònraichte.

A’ mìneachadh fo-bhuidhnean ann an Riaghailtean Ceann-uidhe

Fo-sheata (fo-bhuidhnean) air an co-dhùnadh leis an rèiteachadh a leanas (sa-loidsig-subsets-destinationrule.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: sa-logic
spec:
  host: sa-logic    # 1
  subsets:
  - name: v1        # 2
    labels:
      version: v1   # 3
  - name: v2
    labels:
      version: v2

  1. òstair (host) a’ mìneachadh nach eil an riaghailt seo a’ buntainn ach ri cùisean nuair a thèid an t-slighe a dh’ionnsaigh na seirbheis sa-logic;
  2. tiotalan (name) thathas a’ cleachdadh fo-sheataichean nuair a thathar a’ seòladh gu suidheachaidhean fo-sheata;
  3. leubail (label) a’ mìneachadh na paidhrichean luach-iuchrach a dh’ fheumas suidheachaidhean a mhaidseadh gus a bhith nam pàirt den fho-sheata.

Cuir a-steach an rèiteachadh leis an òrdugh a leanas:

$ kubectl apply -f resource-manifests/istio/shadowing/sa-logic-subsets-destinationrule.yaml
destinationrule.networking.istio.io/sa-logic created

A-nis gu bheil na fo-bhuidhnean air am mìneachadh, is urrainn dhuinn gluasad air adhart agus an t-Seirbheis Mas-fhìor a rèiteachadh gus riaghailtean a chuir an sàs ann an iarrtasan gu sa-loidsig gus am bi iad:

  1. Air a ghluasad gu fo-sheata v1,
  2. Air a riochdachadh gu fo-sheata v2.

Leigidh am manifesto a leanas leat do phlanaichean a choileanadh (sa-logic-subsets-shadowing-vs.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: sa-logic
spec:
  hosts:
    - sa-logic          
  http:
  - route:
    - destination:
        host: sa-logic  
        subset: v1      
    mirror:             
      host: sa-logic     
      subset: v2

Chan eil feum air mìneachadh an seo, mar sin chì sinn e ann an gnìomh:

$ kubectl apply -f resource-manifests/istio/shadowing/sa-logic-subsets-shadowing-vs.yaml
virtualservice.networking.istio.io/sa-logic created

Nach cuir sinn an luchd le bhith a’ gairm an àithne a leanas:

$ while true; do curl -v http://$EXTERNAL_IP/sentiment 
    -H "Content-type: application/json" 
    -d '{"sentence": "I love yogobella"}'; 
    sleep .8; done

Nach toir sinn sùil air na toraidhean ann an Grafana, far am faic thu gu bheil an dreach le biastagan (buggy) a’ leantainn gu fàiligeadh airson ~60% de dh’iarrtasan, ach chan eil gin de na fàilligidhean sin a’ toirt buaidh air luchd-cleachdaidh deireannach leis gu bheil seirbheis ruith a’ freagairt orra.

Air ais gu microservices le Istio. Pàirt 2
Freagairtean soirbheachail de dhiofar dhreachan den t-seirbheis sa-logic

An seo chunnaic sinn an toiseach mar a tha VirtualService air a chuir an sàs ann an teachdaichean ar seirbheisean: cuin sa-web-app a' deanamh iarrtas gu sa-logic, bidh e a’ dol tron ​​​​taobh-chàr Tosgaire, a tha - tro VirtualService - air a rèiteachadh gus an t-iarrtas a chuir gu fo-sheata v1 agus a bhith mar sgàthan air an iarrtas gu fo-sheata v2 den t-seirbheis sa-logic.

Tha fios agam, is dòcha gu bheil thu a’ smaoineachadh mu thràth gu bheil Seirbheisean Mas-fhìor sìmplidh. Anns an ath earrann, leudaichidh sinn air an sin le bhith ag ràdh gu bheil iad fìor mhath cuideachd.

Ro-ràdh Canary

Is e Canary Deployment am pròiseas airson dreach ùr de thagradh a sgaoileadh gu àireamh bheag de luchd-cleachdaidh. Tha e air a chleachdadh gus dèanamh cinnteach nach eil duilgheadasan sam bith anns an fhoillseachadh agus dìreach às deidh sin, le bhith misneachail mu chàileachd (sgaoilidh) mar-thà, ga sgaoileadh gu luchd-cleachdaidh eile.оluchd-èisteachd nas motha.

Gus sgaoileadh canary a nochdadh, cumaidh sinn oirnn ag obair le fo-sheata buggy у sa-logic.

Na caith sinn ùine air trifles agus sa bhad cuir 20% de luchd-cleachdaidh chun dreach le biastagan (bidh seo a’ riochdachadh ar sgaoileadh canary), agus an 80% a tha air fhàgail chun t-seirbheis àbhaisteach. Gus seo a dhèanamh, cleachd an t-Seirbheis Mas-fhìor a leanas (sa-loidsig-subsets-canary-vs.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: sa-logic
spec:
  hosts:
    - sa-logic    
  http:
  - route: 
    - destination: 
        host: sa-logic
        subset: v1
      weight: 80         # 1
    - destination: 
        host: sa-logic
        subset: v2
      weight: 20 # 1

Is e 1 an cuideam (weight), a tha a’ sònrachadh an àireamh sa cheud de dh’iarrtasan a thèid a chur gu neach-faighinn no fo-sheata den neach a gheibh e.

Nach ùraich sinn an rèiteachadh VirtualService roimhe airson sa-logic leis an òrdugh a leanas:

$ kubectl apply -f resource-manifests/istio/canary/sa-logic-subsets-canary-vs.yaml
virtualservice.networking.istio.io/sa-logic configured

agus chì sinn sa bhad gu bheil cuid de dh’ iarrtasan a’ leantainn gu fàilligidhean:

$ while true; do 
   curl -i http://$EXTERNAL_IP/sentiment 
   -H "Content-type: application/json" 
   -d '{"sentence": "I love yogobella"}' 
   --silent -w "Time: %{time_total}s t Status: %{http_code}n" 
   -o /dev/null; sleep .1; done
Time: 0.153075s Status: 200
Time: 0.137581s Status: 200
Time: 0.139345s Status: 200
Time: 30.291806s Status: 500

Tha VirtualServices a’ comasachadh sgaoileadh canary: Anns a’ chùis seo, tha sinn air a’ bhuaidh a dh’ fhaodadh a bhith aig na cùisean a lughdachadh gu 20% den bhunait luchd-cleachdaidh. Sgoinneil! A-nis, anns a h-uile cùis nuair nach eil sinn cinnteach mun chòd againn (ann am faclan eile - an-còmhnaidh ...), is urrainn dhuinn sgàthan agus sgaoileadh canary a chleachdadh.

Briseadh ùine agus ath-thagradh

Ach chan eil biastagan an-còmhnaidh a’ tighinn gu crìch sa chòd. Anns an liosta bho "8 Mearachdan mu dheidhinn Coimpiutaireachd Sgaoilte“Anns a’ chiad àite tha an creideas mearachdach gu bheil “an lìonra earbsach.” Ann an da-rìribh an lìonra chan eil earbsach, agus air an adhbhar seo feumaidh sinn amannan-ama (ùine a-mach) agus a’ feuchainn a-rithist (a-rithist).

Airson taisbeanadh cumaidh sinn oirnn a’ cleachdadh an aon dreach trioblaid sa-logic (buggy), agus nì sinn atharrais air neo-earbsach an lìonra le fàilligidhean air thuaiream.

Biodh cothrom 1/3 aig an t-seirbheis againn le biastagan a bhith a’ toirt ro fhada airson freagairt, cothrom 1/3 air crìochnachadh le Mearachd an Fhrithealaiche a-staigh, agus cothrom 1/3 air an duilleag a thilleadh gu soirbheachail.

Gus buaidh nan duilgheadasan sin a lughdachadh agus beatha a dhèanamh nas fheàrr do luchd-cleachdaidh, is urrainn dhuinn:

  1. cuir ùine a-steach ma bheir an t-seirbheis nas fhaide na 8 diogan airson freagairt,
  2. feuch ris a-rithist ma dh’ fhailicheas an t-iarrtas.

Airson buileachadh, cleachdaidh sinn am mìneachadh stòrais a leanas (sa-logic-retries-timeouts-vs.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: sa-logic
spec:
  hosts:
    - sa-logic
  http:
  - route: 
    - destination: 
        host: sa-logic
        subset: v1
      weight: 50
    - destination: 
        host: sa-logic
        subset: v2
      weight: 50
    timeout: 8s           # 1
    retries:
      attempts: 3         # 2
      perTryTimeout: 3s # 3

  1. Tha an ùine airson iarrtas air a shuidheachadh gu 8 diogan;
  2. Bidh iarrtasan air an toirt air ais 3 tursan;
  3. Agus thathas den bheachd nach eil gach oidhirp soirbheachail ma tha an ùine freagairt nas àirde na 3 diogan.

Is e optimization a tha seo oir cha bhith aig an neach-cleachdaidh feitheamh barrachd air 8 diogan agus nì sinn trì oidhirpean ùra gus freagairt fhaighinn gun fhios nach bi fàilligidhean ann, a’ meudachadh an cothrom air freagairt shoirbheachail.

Cuir a-steach an rèiteachadh ùraichte leis an òrdugh a leanas:

$ kubectl apply -f resource-manifests/istio/retries/sa-logic-retries-timeouts-vs.yaml
virtualservice.networking.istio.io/sa-logic configured

Agus dèan cinnteach anns na grafaichean Grafana gu bheil an àireamh de fhreagairtean soirbheachail air a dhol suas gu h-àrd:

Air ais gu microservices le Istio. Pàirt 2
Leasachaidhean ann an staitistig freagairt soirbheachail às deidh ùine-ama agus ath-chuingean a chur ris

Mus gluais thu air adhart chun ath earrann (no an àite sin, chun ath phàirt den artaigil, oir ann an seo cha bhi barrachd dheuchainnean practaigeach - approx. transl.), sguab às sa-logic-buggy agus VirtualService le bhith a’ ruith nan òrduighean a leanas:

$ kubectl delete deployment sa-logic-buggy
deployment.extensions “sa-logic-buggy” deleted
$ kubectl delete virtualservice sa-logic
virtualservice.networking.istio.io “sa-logic” deleted

Pàtranan Circuit Breaker agus Bulkhead

Tha sinn a’ bruidhinn air dà phàtran cudromach ann an ailtireachd microservice a leigeas leat fèin-slànachadh a choileanadh (fèin-slànachadh) seirbhisean.

Cùmhnantan-briseadh ("circuit breaker") air a chleachdadh gus crìoch a chuir air iarrtasan a’ tighinn gu eisimpleir de sheirbheis a tha air a mheas mì-fhallain agus a thoirt air ais fhad ‘s a tha iarrtasan teachdaiche air an ath-stiùireadh gu suidheachaidhean fallain den t-seirbheis sin (a tha ag àrdachadh an àireamh sa cheud de fhreagairtean soirbheachail). (Nòta: Gheibhear tuairisgeul nas mionaidiche air a’ phàtran, mar eisimpleir, an seo.)

Ceann-mòr ("eadar-dhealachadh") a’ dealachadh fàilligeadh seirbheis bho bhith a’ toirt buaidh air an t-siostam gu lèir. Mar eisimpleir, tha Seirbheis B briste agus bidh seirbheis eile (neach-dèiligidh Seirbheis B) a’ dèanamh iarrtas gu Seirbheis B, a’ toirt air an t-sreath snàithlean aige a dhol a-mach agus nach urrainn dha iarrtasan eile a fhrithealadh (fiù mura h-eil iad bho Sheirbheis B). (Nòta: Gheibhear tuairisgeul nas mionaidiche air a’ phàtran, mar eisimpleir, an seo.)

Fàgaidh mi mion-fhiosrachadh buileachaidh nam pàtrain sin oir tha iad furasta an lorg a-steach sgrìobhainnean oifigeil, agus tha mi cuideachd gu mòr airson dearbhadh agus ùghdarras a shealltainn, a thèid a dheasbad san ath phàirt den artaigil.

PS bhon eadar-theangair

Leugh cuideachd air ar blog:

Source: www.habr.com

Cuir beachd ann