Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 2

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 2

Fanamarihana. transl.: Ny ampahany voalohany Ity andiany ity dia natokana hampahafantarana ny fahaizan'i Istio sy hanehoana azy ireo amin'ny asa. Amin'izao fotoana izao dia hiresaka momba ny lafiny sarotra kokoa amin'ny fanamafisana sy ny fampiasana an'ity mesh serivisy ity isika, ary indrindra ny momba ny zotra voarindra tsara sy ny fitantanana ny fifamoivoizana.

Mampahatsiahy anao ihany koa izahay fa ny lahatsoratra dia mampiasa configurations (sehatra ho an'ny Kubernetes sy Istio) avy amin'ny tahiry. istio-fifehezana.

Fitantanana ny fifamoivoizana

Miaraka amin'i Istio, misy fahaiza-manao vaovao hita ao amin'ny cluster mba hanomezana:

  • Fandrosoana fangatahana dynamic: fanondranana canary, fitiliana A/B;
  • Load balancing: tsotra sy tsy miovaova, mifototra amin'ny hash;
  • Famerenana aorian'ny fararano: fahatapahan'ny fotoana, andrana indray, fiatoana;
  • Mampiditra lesoka: fanemorana, fangatahana latsaka, sns.

Raha mbola mitohy ny lahatsoratra, ireo fahaiza-manao ireo dia ho aseho amin'ny fampiasana ny fampiharana voafantina ho ohatra ary hisy hevitra vaovao hampidirina eny an-dalana. Ny hevitra voalohany toy izany dia ho DestinationRules (izany hoe fitsipika momba ny mpandray ny fifamoivoizana/fangatahana - eo amin'ny transl.), miaraka amin'ny fanampian'ny fampahavitrihana ny fitiliana A/B.

Fitsapana A/B: DestinationRules amin'ny fampiharana

Ny fitsapana A/B dia ampiasaina amin'ny tranga misy dikan-teny roa amin'ny fampiharana iray (matetika tsy mitovy amin'ny maso izy ireo) ary tsy azonay antoka 100% hoe iza no hanatsara ny traikefan'ny mpampiasa. Noho izany, miara-miasa ny dikan-teny roa izahay ary manangona metrika.

Mba hametrahana ny dikan-teny faharoa amin'ny frontend, ilaina amin'ny fampisehoana fitiliana A/B dia araho ity baiko manaraka ity:

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

Tsy mitovy amin'ny toerana roa ny fisehon'ny fametrahana ny dikan-teny maitso:

  1. Ny sary dia mifototra amin'ny marika hafa - istio-green,
  2. Misy marika ny pods version: green.

Satria samy manana etikety ny fametrahana roa app: sa-frontend, fangatahana alefa amin'ny serivisy virtoaly sa-external-services ho an'ny fanompoana sa-frontend, dia halefa any amin'ny tranga rehetra ary ny entana dia hozaraina amin'ny algorithm round-robin, izay hitarika amin'ireto toe-javatra manaraka ireto:

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 2
Tsy hita ireo rakitra nangatahana

Tsy hita ireo rakitra ireo satria samy hafa ny anarany amin'ny dikan-teny samihafa amin'ny fampiharana. Andeha hojerentsika izao:

$ 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

Midika izany fa index.html, mangataka dika iray amin'ny rakitra static, dia azo alefan'ny mpandrindra entana mankany amin'ny pods izay manana dikan-teny hafa, izay, noho ny antony mazava, dia tsy misy ny rakitra toy izany. Noho izany, mba hahombiazan'ny fampiharana dia mila mametraka fameperana isika: "ny dikan-teny mitovy amin'ny fampiharana index.html dia tokony hanolotra fangatahana manaraka".

Ho tonga any isika miaraka amin'ny fampifandanjana entana mifototra amin'ny hash (Loadbalancing Hash tsy miovaova)... Raha izany dia Ny fangatahana avy amin'ny mpanjifa iray ihany dia alefa any amin'ny ohatra backend mitovy, izay ampiasaina ny fananana efa voafaritra mialoha - ohatra, lohatenin'ny HTTP. Nampiharina tamin'ny fampiasana DestinationRules.

DestinationRules

taorian'ny VirtualService nandefa fangatahana tany amin'ny serivisy irina, amin'ny fampiasana DestinationRules dia azontsika atao ny mamaritra ny politika izay hampiharina amin'ny fifamoivoizana natokana ho an'ity serivisy ity:

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 2
Fitantanana ny fifamoivoizana miaraka amin'ny loharanon'i Istio

fanamarihana: Ny fiantraikan'ny loharanon-karena Istio amin'ny fifamoivoizana amin'ny tambajotra dia aseho eto amin'ny fomba mora azo. Raha ny marina, ny fanapahan-kevitra momba ny fandefasana ny fangatahana dia ataon'ny iraka ao amin'ny vavahadin'ny Ingress voarindra ao amin'ny CRD.

Miaraka amin'ny Lalàn'ny Destination, dia afaka manitsy ny fampifandanjana entana izahay mba hampiasana ny hash tsy miovaova ary hiantoka fa mamaly mpampiasa iray ihany ny ohatra serivisy mitovy. Ity fanitsiana manaraka ity dia ahafahanao manatratra izany (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 - hash dia hatsangana mifototra amin'ny votoatin'ny lohatenin'ny HTTP version.

Ampiharo ny fanamafisana amin'ny baiko manaraka:

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

Ataovy izao ny baiko etsy ambany ary ataovy azo antoka fa mahazo ny rakitra mety ianao rehefa mamaritra ny lohateny version:

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

fanamarihana: Mba hanampiana soatoavina samihafa ao amin'ny lohapejy sy hizaha toetra ny valiny mivantana amin'ny navigateur dia azonao ampiasaina ity fanitarana ity mankany Chrome (na miaraka amin'ity ho an'ny Firefox - eo ho eo. transl.).

Amin'ny ankapobeny, DestinationRules dia manana fahaiza-manao bebe kokoa amin'ny sehatry ny fampifandanjana entana - jereo ny antsipiriany ao antontan-taratasy ofisialy.

Alohan'ny handinihana bebe kokoa ny VirtualService, andao hamafa ny "dikan-teny maitso" amin'ny fampiharana sy ny fitsipika momba ny fifamoivoizana mifandraika amin'izany amin'ny alàlan'ny fampandehanana ireto baiko manaraka ireto:

$ 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

Mirroring: Serivisy virtoaly amin'ny fampiharana

Alokaloka (“miaro”) na Mirroring (“famirapiratana”) ampiasaina amin'ny tranga izay tiantsika ny hitsapa fiovana eo amin'ny famokarana nefa tsy misy fiantraikany amin'ny mpampiasa farany: hanaovana izany, dia adikantsika ("fitaratra") ny fangatahana amin'ny tranga faharoa izay nanaovana ny fanovana irina, ary mijery ny vokany. Raha tsorina dia izao no fotoana isafidianan'ny mpiara-miasa aminao ny olana manakiana indrindra ary manao fangatahana misintona amin'ny endrika vongan-tany be dia be izay tsy misy afaka mamerina izany.

Mba hitsapana an'ity toe-javatra ity amin'ny hetsika, andao hamorona ohatra faharoa amin'ny SA-Logic misy bibikely (buggy) amin'ny alàlan'ny baiko manaraka:

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

Ary ankehitriny andeha hojerentsika ny baiko mba hahazoana antoka fa ny tranga rehetra miaraka amin'ny app=sa-logic Manana etikety miaraka amin'ny dikan-teny mifanaraka amin'izany koa izy ireo:

$ 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

fanompoana sa-logic mikendry pods misy marika app=sa-logic, ka ny fangatahana rehetra dia hozaraina amin'ny tranga rehetra:

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 2

... fa tianay ny handefasana fangatahana amin'ny tranga v1 ary hotaratra amin'ny tranga v2:

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 2

Ho tratrantsika izany amin'ny alàlan'ny VirtualService miaraka amin'ny DestinationRule, izay ahafahan'ny fitsipika mamaritra ny ampahany sy ny làlan'ny VirtualService mankany amin'ny ampahany manokana.

Famaritana ny sobika ao amin'ny fitsipiky ny toerana haleha

Sombiny (sombiny) dia voafaritra amin'ny alalan'ity configuration manaraka ity (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. mpampiantrano (host) dia mamaritra fa ity fitsipika ity dia mihatra amin'ny tranga rehefa mankany amin'ny serivisy ihany ny lalana sa-logic;
  2. Lohateny (name) ny zana-tsipìka dia ampiasaina rehefa mitondra mankany amin'ny tranga subset;
  3. Label (label) dia mamaritra ny tsiroaroa manan-danja izay tsy maintsy mifanandrify ny tranga mba ho anisan'ny ampahany.

Ampiharo ny fanamafisana amin'ny baiko manaraka:

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

Amin'izao fotoana izao dia voafaritra ny sobika, afaka mandroso sy manamboatra ny VirtualService isika hampihatra fitsipika amin'ny fangatahana amin'ny sa-logic ka:

  1. Hiverina any amin'ny subset v1,
  2. Hiverina any amin'ny subset v2.

Ity manifesto manaraka ity dia ahafahanao manatratra ny drafitrao (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

Tsy misy fanazavana ilaina eto, ka aleo hojerentsika fotsiny izany:

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

Andeha ampio ny entana amin'ny fiantsoana ity baiko manaraka ity:

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

Andeha hojerentsika ny valiny ao amin'ny Grafana, izay ahitanao fa ny dikan-teny misy bibikely (buggy) dia miteraka tsy fahombiazana ho an'ny ~60% amin'ny fangatahana, saingy tsy misy amin'ireo tsy fahombiazana ireo no misy fiantraikany amin'ny mpampiasa farany rehefa mamaly azy ireo amin'ny serivisy mandeha.

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 2
Valiny mahomby amin'ny dikan-teny samihafa amin'ny serivisy sa-logic

Eto izahay dia nahita voalohany ny fomba ampiharana ny VirtualService amin'ny iraky ny serivisy: rahoviana sa-web-app manao fangatahana sa-logic, mandeha amin'ny alàlan'ny Envoy sidecar, izay - amin'ny alàlan'ny VirtualService - dia namboarina mba handefasana ny fangatahana mankany amin'ny subset v1 ary mitaratra ny fangatahana mankany amin'ny subset v2 amin'ny serivisy. sa-logic.

Fantatro, mety efa mieritreritra ianao fa tsotra ny serivisy virtoaly. Ao amin'ny fizarana manaraka dia hanitatra izany isika amin'ny filazana fa tena tsara koa izy ireo.

Famoahana Canary

Ny Canary Deployment dia ny dingan'ny famoahana dikan-teny vaovao amin'ny mpampiasa vitsivitsy. Ampiasaina mba hahazoana antoka fa tsy misy olana amin'ny famoahana ary aorian'izay, efa matoky ny kalitaony (famoahana), mizara izany amin'ny mpampiasa hafa.оmpihaino lehibe kokoa.

Mba hampisehoana ny fandefasana canary, dia hanohy hiasa miaraka amin'ny ampahany kely izahay buggy у sa-logic.

Aza mandany fotoana amin'ny zavatra tsy misy dikany ary mandefa avy hatrany ny 20% amin'ny mpampiasa amin'ny dikan-teny misy bibikely (izany dia hisolo tena ny canary rollout), ary ny 80% sisa amin'ny serivisy mahazatra. Mba hanaovana izany, ampiasao ity VirtualService manaraka ity (sa-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

1 ny lanja (weight), izay mamaritra ny isan-jaton'ny fangatahana izay hiantefa amin'ny mpandray na ampahany amin'ny mpandray.

Andao hanavao ny teo aloha VirtualService configuration for sa-logic miaraka amin'ity baiko manaraka ity:

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

... ary ho hitantsika avy hatrany fa mitarika tsy fahombiazana ny fangatahana sasany:

$ 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

Ny serivisy virtoaly dia mamela ny famoahana canary: Amin'ity tranga ity, dia nahenanay ho 20% amin'ny fototry ny mpampiasa ny mety ho fiantraikan'ny olana. Mahafinaritra! Ankehitriny, amin'ny toe-javatra rehetra rehefa tsy azontsika antoka ny kaodinay (amin'ny teny hafa - foana ...), dia afaka mampiasa ny fitaratra sy ny canary rollouts.

Fotoana tapitra sy andrana indray

Saingy ny bibikely dia tsy miafara amin'ny kaody. Ao amin'ny lisitry ny "8 Hevi-diso momba ny Computing Distributed"Ny toerana voalohany dia ny finoana diso fa" azo itokisana ny tambajotra. Raha ny marina dia ny tambajotra tsy azo itokisana, ary noho izany antony izany dia mila fotoana fiatoana isika (fotoana farany) ary manandrana indray (andrana indray).

Ho an'ny fampisehoana dia hanohy hampiasa ilay olana mitovy amin'izany izahay sa-logic (buggy), ary hanao simulation ny tsy fahatokisana ny tambajotra miaraka amin'ny tsy fahombiazana kisendrasendra.

Avelao ny serivisintsika miaraka amin'ny bibikely manana vintana 1/3 haharitra ela loatra vao hamaly, vintana 1/3 hifarana amin'ny Error Server anatiny, ary vintana 1/3 hamerenana ny pejy.

Mba hanalefahana ny fiantraikan'ny olana toy izany sy hanatsara ny fiainana ho an'ny mpampiasa dia afaka:

  1. ampio fe-potoana raha maharitra mihoatra ny 8 segondra ny serivisy vao mamaly,
  2. andramo indray raha tsy mahomby ny fangatahana.

Ho fampiharana dia hampiasa ity famaritana loharano manaraka ity izahay (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. Ny fiafaran'ny fangatahana dia apetraka ho 8 segondra;
  2. Averina in-3 ny fangatahana;
  3. Ary ny andrana tsirairay dia heverina ho tsy nahomby raha mihoatra ny 3 segondra ny fotoana famaliana.

Fanamafisana izany satria tsy mila miandry mihoatra ny 8 segondra ny mpampiasa ary hanao fanandramana vaovao telo izahay mba hahazoana valiny raha sendra tsy fahombiazana, hampitombo ny fahafahan'ny valiny mahomby.

Ampiharo ny fanovana nohavaozina miaraka amin'ity baiko manaraka ity:

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

Ary jereo ao amin'ny grafika Grafana fa nitombo ny isan'ny valiny nahomby:

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 2
Fanatsarana ny antontan'isa valiny mahomby taorian'ny nampiana fotoana fiatoana sy andrana indray

Alohan'ny hirosoana amin'ny fizarana manaraka (na ny marimarina kokoa, mankany amin'ny ampahany manaraka amin'ny lahatsoratra, satria amin'ity dia tsy hisy fanandramana azo ampiharina intsony - eo ho eo amin'ny transl.), mamafa sa-logic-buggy ary VirtualService amin'ny alàlan'ny fampandehanana ireto baiko manaraka ireto:

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

Fomba fiatoana amin'ny circuit breaker sy headhead

Miresaka lamina roa manan-danja amin'ny maritrano microservice izahay izay ahafahanao manatratra ny fahasitranana (fanasitranana tena) tolotra.

Circuit Breaker ("mpamoaka rivotra") ampiasaina hanajanonana ny fangatahana tonga amin'ny ohatra iray amin'ny serivisy iray izay heverina ho tsy salama ary mamerina azy io raha toa kosa ny fangatahan'ny mpanjifa dia averina mankany amin'ny tranga salama amin'io serivisy io (izay mampitombo ny isan-jaton'ny valiny mahomby). (Fanamarihana: Misy famaritana amin'ny antsipiriany kokoa ny lamina azo jerena, ohatra, eto.)

Bulkhead ("fizarana") manasaraka ny tsy fahombiazan'ny serivisy tsy hisy fiantraikany amin'ny rafitra manontolo. Ohatra, tapaka ny Serivisy B ary misy serivisy hafa (mpanjifa an'ny serivisy B) manao fangatahana amin'ny serivisy B, ka mahatonga azy ho reraka ny dobo filomanosana ary tsy afaka manompo fangatahana hafa (na dia tsy avy amin'ny serivisy B aza). (Fanamarihana: Misy famaritana amin'ny antsipiriany kokoa ny lamina azo jerena, ohatra, eto.)

Hafoiko ny antsipirian'ny fampiharana ireo lamina ireo satria mora hita ao antontan-taratasy ofisialy, ary tena tiako koa ny mampiseho ny fanamarinana sy ny fanomezan-dàlana, izay horesahina ao amin'ny tapany manaraka amin'ny lahatsoratra.

PS avy amin'ny mpandika teny

Vakio ihany koa ao amin'ny bilaoginay:

Source: www.habr.com

Add a comment