Ar ais go microservices le Istio. Cuid 2

Ar ais go microservices le Istio. Cuid 2

Nóta. aistrigh.: An chéad chuid Bhí an tsraith seo tiomanta do chumais Istio a thabhairt isteach agus iad a thaispeáint i ngníomh. Anois labhróimid faoi ghnéithe níos casta de chumraíocht agus de úsáid an mhogalra seirbhíse seo, agus go háirithe, faoi ródú mionchoigeartaithe agus faoi bhainistiú tráchta líonra.

Cuirimid i gcuimhne duit freisin go n-úsáideann an t-alt cumraíochtaí (léirithe do Kubernetes agus Istio) ón stór istio-máistreacht.

bainistíocht tráchta

Le Istio, tá cumais nua le feiceáil sa bhraisle chun:

  • Ródú iarratais dinimiciúil: rolladh amach canáraí, tástáil A/B;
  • Cothromú luchtaithe: simplí agus comhsheasmhach, bunaithe ar hashes;
  • Aisghabháil tar éis titim: teorainn ama, atriail, scoradáin chiorcaid;
  • lochtanna a chur isteach: moilleanna, iarratais thit, etc.

De réir mar a leanann an t-alt ar aghaidh, léireofar na cumais seo ag baint úsáide as an bhfeidhmchlár roghnaithe mar shampla agus tabharfar isteach coincheapa nua ar an mbealach. Beidh an chéad choincheap den sórt sin DestinationRules (i.e. rialacha maidir le faighteoir tráchta/iarratais - thart ar. transl.), le cabhair a ndéanaimid tástáil A/B a ghníomhachtú.

Tástáil A/B: Rialacha Ceann Scríbe i gcleachtas

Baintear úsáid as tástáil A/B i gcásanna ina mbíonn dhá leagan d’fheidhmchlár (go hiondúil bíonn siad difriúil ó thaobh amhairc) agus nílimid 100% cinnte cé acu ceann a chuirfidh feabhas ar eispéireas an úsáideora. Dá bhrí sin, reáchtáilimid an dá leagan ag an am céanna agus bailímid méadracht.

Chun an dara leagan den aghaidh a imscaradh, atá riachtanach chun tástáil A/B a léiriú, rith an t-ordú seo a leanas:

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

Tá difríocht idir an léiriú imscartha don leagan glas in dhá áit:

  1. Tá an íomhá bunaithe ar chlib eile - istio-green,
  2. Tá lipéad ag pods version: green.

Ós rud é go bhfuil lipéad ag an dá imscaradh app: sa-frontend, iarratais arna stiúradh ag seirbhís fhíorúil sa-external-services le haghaidh seirbhíse sa-frontend, a atreorú chuig a cásanna go léir agus déanfar an t-ualach a dháileadh tríd algartam bhabhta-robín, as a dtiocfaidh an staid seo a leanas:

Ar ais go microservices le Istio. Cuid 2
Níor aimsíodh na comhaid iarrtha

Níor aimsíodh na comhaid seo toisc go bhfuil siad ainmnithe go difriúil i leaganacha éagsúla den fheidhmchlár. Déanaimis cinnte de 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

Ciallaíonn sé seo go index.html, ag iarraidh leagan amháin de chomhaid statacha, is féidir leis an gcothromóir ualach a sheoladh chuig pods a bhfuil leagan difriúil acu, i gcás, ar chúiseanna soiléire, nach bhfuil comhaid den sórt sin ann. Mar sin, le go n-oibreoidh an t-iarratas, ní mór dúinn srian a leagan síos: “ba cheart go bhfreastalódh an leagan céanna den fheidhmchlár a sheirbheáil index.html ar iarratais ina dhiaidh sin'.

Bainfimid ann le cothromú ualach comhsheasmhach hash-bhunaithe (Cothromú Luchtaithe Hash comhsheasmhach)... Sa chás seo seoltar iarratais ón gcliant céanna chuig an ásc céanna, as a n-úsáidtear maoin réamhshainithe - mar shampla, ceanntásc HTTP. Curtha i bhfeidhm ag baint úsáide as Rialacha Ceann Scríbe.

Rialacha Ceann Scríbe

Tar éis Seirbhís Fhíorúil chuireamar iarratas chuig an tseirbhís atá ag teastáil, agus úsáid á baint as DestinationRules is féidir linn polasaithe a shainiú a chuirfear i bhfeidhm ar thrácht atá i ndán do chásanna na seirbhíse seo:

Ar ais go microservices le Istio. Cuid 2
Bainistíocht tráchta le hacmhainní Istio

Tabhair faoi deara: Cuirtear an tionchar atá ag acmhainní Istio ar thrácht líonra i láthair anseo ar bhealach atá éasca le tuiscint. Le bheith beacht, is é an Toscaire sa Tairseach Ingress atá cumraithe sa CRD a dhéanfaidh an cinneadh maidir leis an gcás chun an t-iarratas a sheoladh chuige.

Le Rialacha Ceann Scríbe, is féidir linn cothromú ualaigh a chumrú chun hashes comhsheasmhacha a úsáid agus a chinntiú go bhfreagraíonn an tseirbhís chéanna don úsáideoir céanna. Ligeann an chumraíocht seo a leanas duit é seo a bhaint amach (ceann scríbe-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 - ginfear hash bunaithe ar a bhfuil sa cheanntásc HTTP version.

Cuir an chumraíocht i bhfeidhm leis an ordú seo a leanas:

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

Anois reáchtáil an t-ordú thíos agus déan cinnte go bhfaighidh tú na comhaid cheart nuair a shonróidh tú an ceanntásc version:

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

Tabhair faoi deara: Chun luachanna éagsúla a chur sa cheanntásc agus na torthaí a thástáil go díreach sa bhrabhsálaí, is féidir leat é a úsáid an síneadh seo go Chrome (Nó leis seo le haghaidh Firefox - thart. aistrigh.).

Go ginearálta, tá níos mó cumais ag DestinationRules i réimse an chothromaithe ualaigh - seiceáil le haghaidh sonraí i doiciméadú oifigiúil.

Sula ndéanfaidh tú tuilleadh staidéir ar VirtualService, bainimis an “leagan glas” den fheidhmchlár agus an riail treo tráchta comhfhreagrach trí na horduithe seo a leanas a rith:

$ 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

Scáthánú: Seirbhísí Fíorúla i gCleachtadh

Scáthú (“sciath”) nó Scáthánú (“scáthán”) a úsáidtear i gcásanna inar mian linn athrú ar tháirgeadh a thástáil gan cur isteach ar úsáideoirí deiridh: chun é seo a dhéanamh, déanaimid iarratais (“scáthán”) a dhúbláil chuig an dara huair ina bhfuil na hathruithe inmhianaithe déanta, agus féachaimid ar na hiarmhairtí. Go simplí, is é seo an uair a roghnaíonn do chomhghleacaí an cheist is tábhachtaí agus go ndéanann sé iarratas tarraingte i bhfoirm cnapáin chomh mór sin de shalachar nach féidir le haon duine athbhreithniú a dhéanamh air.

Chun an cás seo a thástáil i ngníomh, cruthaimis an dara huair de SA-Logic le fabhtanna (buggy) tríd an ordú seo a leanas a rith:

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

Agus anois a ligean ar siúl ar an ordú chun a chinntiú go bhfuil gach cás le app=sa-logic Tá lipéid acu freisin a bhfuil na leaganacha comhfhreagracha orthu:

$ 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

TSeirbhís sa-logic pods sprioc le lipéad app=sa-logic, mar sin déanfar gach iarratas a dháileadh ar gach cás:

Ar ais go microservices le Istio. Cuid 2

... ach ba mhaith linn iarratais a sheoladh chuig cásanna v1 agus iad a mhacasamhlú chuig cásanna v2:

Ar ais go microservices le Istio. Cuid 2

Bainfimid é seo amach trí Sheirbhís Fhíorúil i gcomhar le Ceann Scríbe, áit a gcinnfidh na rialacha fo-thacair agus bealaí na Seirbhíse Fíorúla chuig fo-thacar ar leith.

Fo-thacair a Shainmhíniú i Rialacha Cinn Scríbe

Fo-thacair (fo-thacair) cinntear iad ag an gcumraíocht seo a leanas (sa-loighic-fo-thacair-cinn scríbe.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. óstach (host) a shainíonn nach bhfuil feidhm ag an riail seo ach amháin maidir le cásanna ina dtéann an bealach i dtreo na seirbhíse sa-logic;
  2. Teidil (name(e) go n-úsáidtear fo-thacair agus iad á ródú chuig cásanna fo-thacair;
  3. Lipéad (label) sainmhíníonn sé na péirí eochairluacha a chaithfidh cásanna a mheaitseáil le bheith mar chuid den fho-thacar.

Cuir an chumraíocht i bhfeidhm leis an ordú seo a leanas:

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

Anois go bhfuil na fo-thacair sainithe, is féidir linn bogadh ar aghaidh agus an tSeirbhís Fhíorúil a chumrú chun rialacha a chur i bhfeidhm ar iarratais ar sa-loighic ionas go mbeidh siad:

  1. Ródáilte chuig fo-thacar v1,
  2. Léirithe le fothacar v2.

Ligeann an forógra seo a leanas duit do phleananna a bhaint amach (sa-loighic-fo-thacair-scáthfhoghlaim-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

Níl gá le míniú anseo, mar sin déanaimis é a fheiceáil i ngníomh:

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

Cuirfimid an t-ualach tríd an ordú seo a leanas a ghlaoch:

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

Breathnaímid ar na torthaí i Grafana, áit ar féidir leat a fheiceáil go bhfuil an leagan le bugs (buggy) teip ar ~60% de na hiarratais, ach ní chuireann aon cheann de na teipeanna seo isteach ar úsáideoirí deiridh mar a bhfreagraíonn seirbhís reatha dóibh.

Ar ais go microservices le Istio. Cuid 2
Freagraí rathúla ar leaganacha éagsúla den tseirbhís sa-loighic

Anseo chonaiceamar ar dtús conas a chuirtear Seirbhís Fhíorúil i bhfeidhm ar Thoscairí ár seirbhísí: cathain sa-web-app dhéanann iarratas ar sa-logic, téann sé tríd an Toscaire taobhcharr, atá - trí VirtualService - cumraithe chun an t-iarratas a threorú chuig an bhfothacar v1 agus an t-iarratas a scáthánú chuig fothacar v2 na seirbhíse sa-logic.

Tá a fhios agam, b'fhéidir go gceapfá cheana féin go bhfuil Seirbhísí Fíorúla simplí. Sa chéad chuid eile, leathnóimid air sin trína rá go bhfuil siad ar fheabhas freisin.

Rolláin Chanáracha

Is éard atá i gceist le hImscaradh Canárach ná an próiseas chun leagan nua d’fheidhmchlár a rolladh amach do líon beag úsáideoirí. Úsáidtear é chun a chinntiú nach bhfuil aon fhadhbanna sa scaoileadh agus go dtí sin, a bheith muiníneach cheana féin as a cháilíocht (scaoileadh) cheana féin, é a dháileadh ar úsáideoirí eile.оlucht féachana níos mó.

Chun rolladh amach canáraí a léiriú, leanfaimid ag obair le fo-thacar buggy у sa-logic.

Ná cuirimis am amú ar trifles agus cuirimis 20% d’úsáideoirí chuig an leagan láithreach le fabhtanna (bíonn sé seo in ionannas lenár rolladh amach canáraí), agus an 80% eile chuig an ngnáthsheirbhís. Chun é seo a dhéanamh, úsáid an tSeirbhís Fhíorúil seo a leanas (sa-loighic-fo-thacair-chanáracha-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 é 1 an meáchan (weight), a shonraíonn céatadán na n-iarratas a dhíreofar chuig faighteoir nó chuig fo-thacar den fhaighteoir.

Déanaimis an chumraíocht VirtualService roimhe seo a nuashonrú le haghaidh sa-logic leis an ordú seo a leanas:

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

... agus feicfidh muid láithreach go bhfuil teipeanna mar thoradh ar roinnt iarrataí:

$ 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

Cumasaíonn VirtualServices rolladh amach canáraí: Sa chás seo, tá tionchar féideartha na saincheisteanna cúngaithe againn go 20% den bhonn úsáideora. Iontach! Anois, i ngach cás nuair nach bhfuilimid cinnte faoinár gcód (i bhfocail eile - i gcónaí...), is féidir linn úsáid a bhaint as rolladh amach scáthánaithe agus canáraí.

Teorainneacha ama agus trialacha eile

Ach ní i gcónaí a chríochnaíonn bugs suas sa chód. Sa liosta ó "8 Míthuiscintí faoin Ríomhaireacht Dáilte“Ar an gcéad dul síos is ea an tuairim earráideach go bhfuil “an líonra iontaofa.” I ndáiríre an líonra aon iontaofa, agus ar an gcúis sin teastaíonn teorainneacha ama uainn (Am istigh) agus atriallaíonn (atriail).

Chun léiriú a dhéanamh leanfaimid orainn ag úsáid an leagan faidhbe céanna sa-logic (buggy), agus déanfaimid insamhladh ar neamhiontaofacht an líonra le teipeanna randamach.

Bíodh seans 1/3 ag ár seirbhís le fabhtanna go dtógfaidh sé ró-fhada chun freagra a thabhairt, seans 1/3 go gcríochnóidh Earráid Freastalaí Inmheánach, agus seans 1/3 ar an leathanach a thabhairt ar ais go rathúil.

Chun tionchar fadhbanna den sórt sin a mhaolú agus an saol a fheabhsú d’úsáideoirí, is féidir linn:

  1. cuir teorainn ama leis má thógann an tseirbhís níos mó ná 8 soicind le freagairt,
  2. bain triail eile as má theipeann ar an iarratas.

Chun é a chur i bhfeidhm, úsáidfimid an sainmhíniú acmhainne seo a leanas (sa-loighic-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. Tá an teorainn ama don iarratas socraithe go dtí 8 soicind;
  2. Déantar iarratais a aisghabháil 3 huaire;
  3. Agus meastar nár éirigh le gach iarracht má théann an t-am freagartha thar 3 soicind.

Is leas iomlán a bhaint é seo toisc nach mbeidh ar an úsáideoir fanacht níos mó ná 8 soicind agus déanfaimid trí iarrachtaí nua chun freagra a fháil i gcás teipeanna, rud a mhéadaíonn an seans go bhfaighfear freagra rathúil.

Cuir an chumraíocht nuashonraithe i bhfeidhm leis an ordú seo a leanas:

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

Agus seiceáil i ngraif Grafana go bhfuil méadú tagtha thuas ar líon na bhfreagraí rathúla:

Ar ais go microservices le Istio. Cuid 2
Feabhsuithe ar staitisticí freagartha rathúla tar éis teorainneacha ama a chur leis agus trialacha eile

Sula bogadh ar aghaidh go dtí an chéad chuid eile (nó in áit, go dtí an chéad chuid eile den alt, mar gheall ar seo ní bheidh aon turgnaimh níos praiticiúla - thart. transl.), scrios sa-logic-buggy agus VirtualService trí na horduithe seo a leanas a rith:

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

Patrúin Briste Cuarda agus Bulkhead

Táimid ag caint faoi dhá phatrún tábhachtach san ailtireacht microservice a ligeann duit féin-aisghabháil a bhaint amach (féinleighis) seirbhísí.

Chuarda Breaker ("circuit breaker") a úsáidtear chun deireadh a chur le hiarratais a thagann ar shampla de sheirbhís a mheastar a bheith míshláintiúil agus í a chur ar ais fad is a atreoraítear iarratais cliant chuig cásanna sláintiúla den tseirbhís sin (a ardaíonn céatadán na bhfreagraí rathúla). (Nóta: Is féidir cur síos níos mionsonraithe ar an bpatrún a fháil, mar shampla, anseo.)

Bulccheann ("deighilt") leithlisítear teipeanna seirbhíse ó chur isteach ar an gcóras iomlán. Mar shampla, tá Seirbhís B briste agus déanann seirbhís eile (cliant Sheirbhís B) iarratas chuig Seirbhís B, rud a fhágann go n-ídíonn sí a linn snáithe agus nach mbeidh sé in ann iarratais eile a sheirbhísiú (fiú mura bhfuil siad ó Sheirbhís B). (Nóta: Is féidir cur síos níos mionsonraithe ar an bpatrún a fháil, mar shampla, anseo.)

Fágfaidh mé ar lár sonraí cur chun feidhme na bpatrún seo toisc go bhfuil siad éasca a fháil isteach doiciméadú oifigiúil, agus ba mhaith liom freisin fíordheimhniú agus údarú a thaispeáint, a phléifear sa chéad chuid eile den alt.

PS ó aistritheoir

Léigh freisin ar ár mblag:

Foinse: will.com

Add a comment