Redeo ad microservices cum Istio. Pars II

Redeo ad microservices cum Istio. Pars II

Nota. transl.: In prima parte, Haec series introducendis Istio facultatibus dedicata est et eas in actu demonstrando. Nunc de multiplicioribus aspectibus configurationis et usu reticuli huius officii, ac praesertim de subtiliter in fusione ac network negotiationis administratione jaculabimus.

Etiam nos admonemus te articulum figurationibus uti (manifests pro Kubernetes et Istio) ex promptuario. istio-dominium.

Negotiatio Management

Cum Istio, novae facultates in botro praebere possunt;

  • Dynamic petitionem profectus: canarii rollouts, A/B probatio;
  • Libra ponderasimplex et constans, in hashes;
  • Recuperatio post falls: timeouts, retries, circuit breakers;
  • delicta inserentesomissis precibus, etc.

Procedente articulo, hae facultates illustrabuntur adhibitis delectis adhibitis ut exemplum et novae notiones per viam inducentur. Primus talis conceptus erit DestinationRules (i.e. praecepta de recipiente negotiationis/ petitiones approx. transl.)cuius ope experiamur A/B.

A / B probatio: DestinationRules in usu

A/B probatio adhibetur in casibus ubi duae versiones applicationis (plerumque visibiliter diversae sunt) et non sumus 100% fideles quibus quis experientiam usoris emendabit. Utramque ergo versionem simul currimus, et metricas colligemus.

Ad secundam frontis versionem explicandam, requiritur ad probationem A/B demonstrandam, sequentia currite praeceptum;

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

Instruere manifestam versionem viridis duobus locis differt;

  1. Imago fundatur in alia tag - istio-green,
  2. Siliquae habent pittacium version: green.

Cum uterque pittacium deployments habent app: sa-frontend, Petitiones fusa prope servitium sa-external-services ad servitium sa-frontendad omnes ejus instantias redigenda et distribuenda onus circum-Robin algorithmusquai ad hunc locum;

Redeo ad microservices cum Istio. Pars II
Requisitum files non inveni

Hae tabulae non inventae sunt quia aliter nominantur in applicatione diversis. Fac de hoc:

$ 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

Et hoc est quod index.htmlrogans unam versionem imaginum staticarum, ab onere librario ad siliquas quae aliam versionem habent, mitti potest, ubi, ob rationes evidentes, huiusmodi fasciculi non sunt. Ergo, ad applicationem ad operandum restrictionem ponere oportet: "eadem versio applicationis quae servivit index.html serviat petitionibus subsequentibus".

Nos youll 'adepto cum consistent Nullam-fundatur libratio onus (Consistent detrahe Loadbalancing). In hoc casu, petitiones ab eodem cliente mittuntur ad eundem instantiam backendad quod proprietas praedefinita adhibetur, verbi gratia, HTTP capitis. DestinationRules per implemented.

DestinationRules

Post VirtualService petitionem misit ad desideratum servitium, DestinationRules programmatis definire possumus, quae ad negotiatio applicanda ad instantias huius servitii destinata erunt:

Redeo ad microservices cum Istio. Pars II
Negotiationis procuratio cum Istio opibus

illud: Ictum Istio facultates in retiaculis retis praesentatur hic modo ut facile intelligatur. Ut praecise, consilium in quo instantiam mittendi petitio ab Internuntio in Ingress Gateway figurata est in CRD.

Cum Regulis Destination, onere conparare possumus configurare ad hashes consistentes uti et efficere ut eadem instantia muneris eidem usuario respondeat. Sequenti configuratione sino vos hoc consequi (destinationrule-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 - Nullam generabitur ex contentis HTTP capitis version.

Applicare configurationem cum hoc imperio:

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

Nunc inferius imperium curre et fac tibi tabulas dextras obtinere cum caput denotas version:

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

illud: Ad varias valores in capite addere et proventus directe in navigatro probare, uti potes haec extensio ut Chrome (aut cum hoc pro Firefox - approx. transl.).

In genere, DestinationRules plures facultates habet in ambitu oneris librationis - perceptio pro details in officialis documenta.

Priusquam VirtualService ulterius studeas, "versio viridis" applicationis et regulae negotiationis debitae decurrendo mandatorum sequentium deleamus:

$ 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

Speculum: Virtual Services in Practice

Umbrae ("protegere") seu Speculum ("Speculum") adhibitis in casibus in quibus mutationem productionis sine fine usorum afficientium probare volumus: hoc facere, duplicare postulationem ("speculi" secundo instantiae ubi desideratae mutationes factae sunt et consequentias intuemur. Plane, hoc est, cum collega tuus quaestionem maxime criticam carpit et trahere postulat in forma tam ingentis stercoris massam ut nemo eam recognoscere possit.

Ut hanc missionem in actione experiatur, alteram instantiam SA-Logicae cum cimicibus faciamus (buggy) Praecepto currendo;

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

Et nunc percurramus mandatum ut omnia exempla curemus app=sa-logic Habent etiam pittacia cum versionibus correspondentibus:

$ 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

obsequium sa-logic peltas siliquas cum pittacium app=sa-logicsic omnes petitiones distribuentur inter omnes instantias;

Redeo ad microservices cum Istio. Pars II

... Sed petitiones v1 instantias mittendas et instantias praevisas v2 volumus.

Redeo ad microservices cum Istio. Pars II

Hoc consequemur per Virtual Servitium in compositione cum DestinationRule, ubi regulae subset et itinera Virtualis Servitii ad certam partem determinabunt.

Definiens Subsets in Destination Rules

Subsets (copia) determinantur hoc configuratione (sa-logic-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. Host (host) hanc regulam definit solum in casibus , cum iter ad servitium pergit sa-logic;
  2. Titles (name) Substantiae adhibentur instantiae subsetae ad excitandas;
  3. Label (label) definit clavem-valoris paria quae instantiae aequare debent ad partem regni facti.

Applicare configurationem cum hoc imperio:

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

Cum subsets definitis, Virtual Servitium movere et configurare possumus, regulas postulationibus sa-logicis adhibere, ut illi:

  1. Pulsus est aliquid mensis v1,
  2. Speculum ad subset v2.

De his manifesto permittit ut tua consilia perficias (sa-logic-subsets-obumbratio 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

Nulla hic explicatio opus est, ut in actione videamus;

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

Addamus onus vocando hoc mandatum:

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

Intueamur eventus in Grafana, ubi videre potes versionem cum cimicibus (buggy) proventus in defectu pro ~60% petitionum, sed nullae ex his defectibus finem usorum afficiunt prout per servitium currentem respondentur.

Redeo ad microservices cum Istio. Pars II
Responsiones prospere variae versiones officii sa-logici

Hic primum vidimus quomodo Virtualis Servitio ad Legatorum nostrorum officia pertineat: quando sa-web-app rogaret sa-logicit per Legatum sidereum, qui - per Servitium Virtual - configuratur iter petitioni ad v1 subset et inspiciat instantiam ad v2 subset. sa-logic.

Scio, fortasse iam putas Services Virtual esse simplex. In sectione sequenti, id pangamus dicendo vere magnum esse.

Canariae rollouts

Instruere est processus evolvendi novam versionem applicationis ad parvum numerum utentium. Solet efficere ut nullae sint difficultates in emissione et tantum postea, iam confidens in qualitate sua, eam aliis usoribus distribue.ΠΎmaior auditorio.

Ad demonstrandum rollouts canariis, opus subset buggy Ρƒ sa-logic.

Tempus in nugis non teramus et statim XX% usorum mittat versionem cum bugs (hoc repraesentabit rollout canarium nostrum), et reliquae 20% ad servitium normale. Ad hoc utere sequentibus VirtualServicesa-logic-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

I est pondus (weight) , quod significat recipis petitiones quae ordinabuntur recipienti vel subset recipientis .

Lets update prior de configuratione VirtualService sa-logic cum tali imperio;

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

... et statim videbimus aliquas petitiones in defectione ducere;

$ 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

VirtualServices faciant canarias rollouts: In hoc casu, impulsum potentialem quaestiones ad 20% basi utentis coartavimus. Mirum! Nunc, in omni casu, cum de nostro codice certi non sumus (hoc est - semper...), uti possumus speculando et canariis rollouts.

Timeouts et retries

Sed cimices non semper in codice desinunt. In indice ex "8 De fallaciis de Computing Distributa"Primo loco est falsa opinio "retis certa est." Reapse retis non certa et hac de causa timeouts opus est (timeouts) et retries (Retries).

Pro demonstratione eadem problemata versione uti perget sa-logic (buggy) et retis vanitatem cum incertis defectibus simulabo.

Munus nostrum cum cimicibus habeat 1/3 occasionem capiendi nimis longum respondendi, facultas 1/3 finiendi cum Errore Servo Interno, et 1/3 pagina feliciter reddendi.

Talium problematum labem mitigare et vitam meliorem reddere usoribus, possumus:

  1. addere timeout si officium accipit diutius quam VIII secundis respondere;
  2. retry si petitio deficit.

Ad exsequendum, hac subsidia definitione utemur (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. Tempus ad instantiam 8 secundis destinatur;
  2. Petitiones iterum imminutae sunt;
  3. Uterque conatus infaustus censetur si responsio tempus excedit 3 secundis.

Optimization haec est quia user plus quam octo secundis expectare non vult et tres novos conatus faciemus responsionem in casu defectis accipere, casu prosperi responsionis augendo.

Applicare updated configurationem cum hoc imperio:

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

Deprime in Grafana graphs quod numerus responsionum felicium supra auctus est:

Redeo ad microservices cum Istio. Pars II
Improvements in felix responsio mutant post addendo timeouts et retries

Ante migremus ad proximam sectionem vel potius ad proximam partem articuli, quia in hoc non erunt experimenta magis practica β€” approx. transl., delere sa-logic-buggy et VirtualService currendo praecipit:

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

Circuit Breaker et Bulkhead Patterns

Loquimur de duobus maximis exemplis in architectura microservice quae te ad sui recuperationem consequi permittit (Se sanitatem) officia.

Interruptio potentiae ("interruptio potentiae") postulationes terminare solebant ad instantiam servitutis quae sanae existimatur ac restitui dum client petitiones redirectae sunt ad sanas instantias illius servitii (quas recipis prosperis responsionibus auget). (Nota: exemplaris accuratior descriptio inveniri potest, e.g. hic.)

bulkhead ("partitio") segregat defectus officii ab universa systemate afficiendo. Exempli gratia, Service B frangitur et aliud servitium (Service B clientis) petitionem servitii B facit, causando ut stagnum filum suum exhauriat et aliis petitionibus inservire non possit (etiamsi servitii B non sint). (Nota: exemplaris accuratior descriptio inveniri potest, e.g. hic.)

Horum exemplarium exsecutionem omittam quia facile sunt invenire officialis documentaet etiam realiter ostendere volo authenticationem et authoritatem, quae in altera parte articuli tractabitur.

PS ab translator

Lege etiam in nostro diario:

Source: www.habr.com