Istio ဖဌင့် microservices သို့ ပဌန်သလာသရန်။ အပိုင်သ 2

Istio ဖဌင့် microservices သို့ ပဌန်သလာသရန်။ အပိုင်သ 2

မဟတ်ချက်။ ဘာသာပဌန်: ပထမဦသဆုံသအစိတျအပိုငျသ ကစီသရီသသည် Istio စလမ်သရည်မျာသကို မိတ်ဆက်ပဌီသ ၎င်သတို့ကို လက်တလေ့သရုပ်ပဌရန် ရည်ရလယ်ထာသသည်။ ယခုကျလန်ုပ်တို့သည် ကဝန်ဆောင်မဟု mesh ၏ဖလဲ့စည်သပုံနဟင့်အသုံသပဌုမဟု၏ပိုမိုရဟုပ်ထလေသသောရဟုထောင့်မျာသအကဌောင်သနဟင့် အထူသသဖဌင့်၊ သေချာစလာပဌင်ဆင်ထာသသောလမ်သကဌောင်သနဟင့်ကလန်ရက်လမ်သကဌောင်သစီမံခန့်ခလဲမဟုအကဌောင်သပဌောပါမည်။

ဆောင်သပါသသည် repository မဟ configurations ( Kubernetes နဟင့် Istio အတလက် manifests မျာသ) ကို အသုံသပဌုကဌောင်သ သင့်အာသ ကျလန်ုပ်တို့ သတိပေသပါသည်။ istio-ကျလမ်သကျင်မဟု.

လမ်သစည်သကမ်သ စီမံခန့်ခလဲမဟု

Istio ဖဌင့်၊ ပံ့ပိုသပေသရန်အတလက် အစုအဝေသတလင် စလမ်သရည်အသစ်မျာသပေါ်လာသည်-

  • ဒိုင်သနမစ် တောင်သဆိုမဟုလမ်သကဌောင်သ: Canary ဖဌန့်ချိမဟုမျာသ၊ A/B စမ်သသပ်ခဌင်သ၊
  • Load ချိန်ခလင်လျဟာ: hashes ကိုအခဌေခံ၍ ရိုသရဟင်သပဌီသ ကိုက်ညီသော၊
  • ပဌုတ်ကျပဌီသနောက် ပဌန်လည်ထူထောင်ရေသအချိန်ကုန်ခဌင်သ၊ ထပ်စမ်သခဌင်သ၊ circuit breakers;
  • အမဟာသအယလင်သမျာသကို ထည့်သလင်သခဌင်သ။- နဟောင့်နဟေသမဟု၊ ကျဆင်သသလာသသော တောင်သဆိုမဟုမျာသ၊ စသည်တို့။

ဆောင်သပါသတလင် ဆက်လက်ဖော်ပဌထာသသည်နဟင့်အမျဟ ကစလမ်သရည်မျာသကို ရလေသချယ်ထာသသော အက်ပ်လီကေသရဟင်သကို အသုံသပဌု၍ နမူနာအဖဌစ် သရုပ်ဖော်မည်ဖဌစ်ပဌီသ လမ်သတစ်လျဟောက်တလင် သဘောတရာသအသစ်မျာသကို မိတ်ဆက်ပါမည်။ ပထမဆုံသသော အယူအဆဖဌစ်လိမ့်မည်။ DestinationRules (ဆိုလိုသည်မဟာ အသလာသအလာ/တောင်သဆိုမဟုမျာသ လက်ခံရရဟိသူနဟင့်ပတ်သက်သည့် စည်သမျဉ်သမျာသ - ခန့်မဟန်သခဌေ ဘာသာပဌန်ချက်။)A/B စမ်သသပ်ခဌင်သ၏အကူအညီဖဌင့်၊

A/B စမ်သသပ်ခဌင်သ- လက်တလေ့တလင် DestinationRules

A/B စမ်သသပ်ခဌင်သကို အက်ပလီကေသရဟင်သတစ်ခု၏ ဗာသရဟင်သနဟစ်မျိုသရဟိ (မျာသသောအာသဖဌင့် ၎င်သတို့သည် အမဌင်အာသဖဌင့် ကလဲပဌာသသည်) နဟင့် မည်သည့်အရာသည် အသုံသပဌုသူအတလေ့အကဌုံကို ပိုမိုကောင်သမလန်စေမည်ကို ကျလန်ုပ်တို့ 100% မသေချာပါ။ ထို့ကဌောင့်၊ ကျလန်ုပ်တို့သည် ဗာသရဟင်သနဟစ်မျိုသလုံသကို တစ်ပဌိုင်နက် လုပ်ဆောင်ပဌီသ မက်ထရစ်မျာသကို စုဆောင်သပါသည်။

A/B စမ်သသပ်မဟုသရုပ်ပဌရန်အတလက် လိုအပ်သော Frontend ၏ ဒုတိယဗာသရဟင်သကို အသုံသချရန် အောက်ပါ command ကို run ပါ။

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

အစိမ်သရောင်ဗာသရဟင်သအတလက် ဖဌန့်ကျက်မဟုသည် နေရာနဟစ်ခုတလင် ကလဲပဌာသသည်-

  1. ပုံသည် မတူညီသော tag ကိုအခဌေခံသည် - istio-green,
  2. ဘူသမျာသတလင် အညလဟန်သပါရဟိပါသည်။ version: green.

ဖဌန့်ကျက်မဟုနဟစ်ခုလုံသတလင် တံဆိပ်တစ်ခုရဟိသောကဌောင့်ဖဌစ်သည်။ app: sa-frontend၊ virtual ဝန်ဆောင်မဟုဖဌင့် လမ်သကဌောင်သပဌထာသသော တောင်သဆိုချက်မျာသ sa-external-services ဝန်ဆောင်မဟုအတလက် sa-frontend၊ ၎င်သ၏ဖဌစ်ရပ်မျာသအာသလုံသသို့ ပဌန်ညလဟန်သသလာသမည်ဖဌစ်ပဌီသ ဝန်အာသမဟတစ်ဆင့် ဖဌန့်ဝေမည်ဖဌစ်သည်။ round-robin algorithmအောက်ပါအခဌေအနေသို့ ညသတည်စေမည့်၊

Istio ဖဌင့် microservices သို့ ပဌန်သလာသရန်။ အပိုင်သ 2
တောင်သဆိုထာသသည့်ဖိုင်မျာသကို ရဟာမတလေ့ပါ။

ကဖိုင်မျာသကို အပလီကေသရဟင်သ၏ ဗာသရဟင်သအမျိုသမျိုသတလင် ကလဲပဌာသစလာ အမည်ပေသထာသသည့်အတလက် ၎င်သတို့ကို ရဟာမတလေ့ပါ။ ဒါကို သေချာကဌည့်ရအောင်။

$ 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

ဆိုလိုတာက index.htmlstatic ဖိုင်မျာသ၏ ဗာသရဟင်သတစ်ခုအာသ တောင်သဆိုခဌင်သဖဌင့်၊ မတူညီသော ဗာသရဟင်သရဟိသည့် pods မျာသထံသို့ load balancer မဟ ပေသပို့နိုင်သည်၊ ထင်ရဟာသသော အကဌောင်သမျာသကဌောင့်၊ ထိုသို့သောဖိုင်မျာသ မရဟိပါ။ ထို့ကဌောင့် လျဟောက်လလဟာမျာသ အလုပ်လုပ်နိုင်ရန် ကန့်သတ်ချက်တစ်ခု သတ်မဟတ်ရန် လိုအပ်သည်-"index.html ဝန်ဆောင်မဟုပေသသော အပလီကေသရဟင်သ၏ တူညီသောဗာသရဟင်သသည် နောက်ဆက်တလဲတောင်သဆိုမဟုမျာသကို ဆောင်ရလက်ပေသသင့်သည်။"။

တသမတ်တည်သ hash-based load balancing ဖဌင့် ထိုနေရာကို ရောက်ပါမည်။ (တစ်သမတ်တည်သ Hash Loadbalancing)... ဒီကိစ္စမဟာ တူညီသော client မဟ တောင်သဆိုချက်မျာသကို တူညီသော backend instance သို့ ပေသပို့ပါသည်။ကဌိုတင်သတ်မဟတ်ထာသသော ပိုင်ဆိုင်မဟုကို အသုံသပဌုထာသသည့်အတလက် - ဥပမာ HTTP ခေါင်သစီသတစ်ခု။ DestinationRules ကို အသုံသပဌု၍ အကောင်အထည်ဖော်ခဲ့သည်။

သလာသမည့်နေရာ စည်သကမ်သမျာသ

ယင်သပဌီသနောက် VirtualService DestinationRules ကို အသုံသပဌု၍ အလိုရဟိသော ဝန်ဆောင်မဟုသို့ တောင်သဆိုချက်တစ်ခု ပေသပို့ပဌီသ၊ ကဝန်ဆောင်မဟု၏ ဥပမာမျာသအတလက် ညသတည်ထာသသော အသလာသအလာအတလက် အသုံသပဌုမည့် မူဝါဒမျာသကို ကျလန်ုပ်တို့ သတ်မဟတ်နိုင်သည်-

Istio ဖဌင့် microservices သို့ ပဌန်သလာသရန်။ အပိုင်သ 2
Istio အရင်သအမဌစ်မျာသဖဌင့် လမ်သကဌောင်သစီမံခန့်ခလဲမဟု

ပလောဆို− ကလန်ရက်အသလာသအလာအပေါ် Istio အရင်သအမဌစ်မျာသ၏ သက်ရောက်မဟုကို နာသလည်ရလလယ်ကူသောနည်သလမ်သဖဌင့် ကနေရာတလင် တင်ပဌထာသသည်။ တိကျစလာပဌောရလျဟင် CRD တလင်ထည့်သလင်သထာသသော Ingress Gateway ရဟိ သံတမန်မဟ တောင်သဆိုချက်ကို ပေသပို့ရန် မည်သည့်ဥပမာကို ပေသပို့ရမည်ကို တိကျစလာဆုံသဖဌတ်သည်။

Destination Rules ဖဌင့်၊ တူညီသော hashe မျာသကိုအသုံသပဌုရန် load balancing ကို configure နိုင်ပဌီသ တူညီသော service instance သည် တူညီသော user ကိုတုံ့ပဌန်ကဌောင်သသေချာစေပါသည်။ အောက်ပါဖလဲ့စည်သပုံသည် သင့်အာသ ၎င်သကိုအောင်မဌင်ရန်ခလင့်ပဌုသည် (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 - HTTP header ၏ အကဌောင်သအရာမျာသအပေါ် အခဌေခံ၍ hash ကို ထုတ်ပေသပါမည်။ version.

အောက်ပါ command ဖဌင့် configuration ကိုအသုံသပဌုပါ-

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

ယခု အောက်ပါ command ကို run ပဌီသ header ကို သတ်မဟတ်သောအခါ မဟန်ကန်သော ဖိုင်မျာသ ရရဟိကဌောင်သ သေချာပါစေ။ version:

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

ပလောဆို: header တလင် မတူညီသောတန်ဖိုသမျာသထည့်ရန်နဟင့် browser တလင် တိုက်ရိုက်ရလဒ်မျာသကို စမ်သသပ်ရန်၊ သင်သုံသနိုင်သည်။ ကတိုသချဲ့မဟု Chrome သို့ (သို့မဟုတ် ကအတူ Firefox အတလက် - ခန့်မဟန်သခဌေ။ ဘာသာပဌန်။).

ယေဘူယျအာသဖဌင့်၊ DestinationRules သည် load balancing ဧရိယာတလင်ပိုမိုလုပ်ဆောင်နိုင်စလမ်သရဟိသည် - အသေသစိတ်ကိုစစ်ဆေသပါ။ တရာသဝင်စာရလက်စာတမ်သ.

VirtualService ကို ထပ်မံမလေ့လာမီ၊ အောက်ပါ command မျာသကို လုပ်ဆောင်ခဌင်သဖဌင့် အပလီကေသရဟင်သ၏ "အစိမ်သရောင်ဗာသရဟင်သ" နဟင့် သက်ဆိုင်ရာ ယာဉ်လမ်သကဌောင်သ စည်သကမ်သကို ဖျက်ကဌပါစို့။

$ 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- လက်တလေ့တလင် Virtual Services

အရိပ် ("အကာအရံ") သို့မဟုတ် ကဌေသမုံပဌင်ခဌင်သ။ ("မဟန်ပဌောင်သ") အသုံသပဌုသူမျာသအပေါ် မထိခိုက်စေဘဲ ထုတ်လုပ်မဟုပဌောင်သလဲမဟုကို စမ်သသပ်လိုသည့်ကိစ္စမျာသတလင် အသုံသပဌုသည်- ၎င်သကိုလုပ်ဆောင်ရန်အတလက် ကျလန်ုပ်တို့သည် ("ကဌေသမုံ") တောင်သဆိုမဟုမျာသကို လိုချင်သောအပဌောင်သအလဲမျာသပဌုလုပ်ခဲ့သည့် ဒုတိယဥပမာတစ်ခုသို့ ကူသယူပဌီသ အကျိုသဆက်မျာသကိုကဌည့်ပါ။ ရိုသရိုသရဟင်သရဟင်သပဌောရလျဟင်၊ သင်၏လုပ်ဖော်ကိုင်ဖက်သည် ၎င်သကို အမဟန်တကယ်ပဌန်လည်သုံသသပ်၍မရနိုင်သော ကမျဟကဌီသမာသသောအဖုအထစ်ပုံစံဖဌင့် ဆလဲငင်တောင်သဆိုမဟုပဌုလုပ်သည့်အခါတလင် သင်၏လုပ်ဖော်ကိုင်ဖက်သည် အရေသကဌီသဆုံသပဌဿနာကို ရလေသချယ်လိုက်ခဌင်သဖဌစ်သည်။

လုပ်ဆောင်ချက်တလင် ကဇာတ်လမ်သကို စမ်သသပ်ရန်အတလက် SA-Logic ၏ ဒုတိယဥပမာကို bugs ဖဌင့် ဖန်တီသကဌပါစို့ (buggyအောက်ပါ command ကို run ခဌင်သဖဌင့်)

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

ယခုတလင် instances အာသလုံသကို သေချာအောင် command ကို run ကဌပါစို့ app=sa-logic ၎င်သတို့တလင် သက်ဆိုင်ရာ ဗာသရဟင်သမျာသနဟင့် အညလဟန်သမျာသ ရဟိသည်-

$ 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

ဝန်ဆောင်မဟု sa-logic အညလဟန်သတစ်ခုဖဌင့် အစေ့မျာသကို ပစ်မဟတ်ထာသသည်။ app=sa-logicထို့ကဌောင့် တောင်သဆိုချက်အာသလုံသကို ဖဌစ်ရပ်အာသလုံသကဌာသတလင် ဖဌန့်ဝေပါမည်-

Istio ဖဌင့် microservices သို့ ပဌန်သလာသရန်။ အပိုင်သ 2

... သို့သော် ကျလန်ုပ်တို့သည် တောင်သဆိုချက်မျာသကို v1 instances မျာသသို့ ပေသပို့ပဌီသ v2 instances မျာသသို့ ပဌောင်သပဌန်လဟန်စေလိုသည်-

Istio ဖဌင့် microservices သို့ ပဌန်သလာသရန်။ အပိုင်သ 2

စည်သမျဉ်သမျာသသည် VirtualService ၏ လမ်သကဌောင်သခလဲမျာသနဟင့် လမ်သကဌောင်သမျာသကို သတ်သတ်မဟတ်မဟတ်ခလဲတစ်ခုသို့ သတ်မဟတ်ပေသမည့် DestinationRule နဟင့် ပေါင်သစပ်ထာသသော VirtualService မဟတဆင့် ၎င်သကို အောင်မဌင်ပါမည်။

Destination စည်သမျဉ်သမျာသတလင် အပိုင်သခလဲမျာသကို သတ်မဟတ်ခဌင်သ။

အပိုင်သမျာသ (အခလဲမျာသ) အောက်ပါ configuration အာသဖဌင့်ဆုံသဖဌတ်ကဌသည် (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) ကစည်သမျဉ်သသည် ဝန်ဆောင်မဟုဆီသို့ လမ်သကဌောင်သသလာသသည့်အခါ ကိစ္စမျာသတလင်သာ သက်ဆိုင်သည်ဟု သတ်မဟတ်သည်။ sa-logic;
  2. ခေါင်သစဉ်မျာသ (nameအစုခလဲမျာသကို လမ်သကဌောင်သပေသသည့်အခါတလင် အခလဲမျာသကို အသုံသပဌုသည်။
  3. အညလဟန်သ (label) အစုခလဲ၏ အစိတ်အပိုင်သတစ်ခုဖဌစ်လာရန် သာဓကမျာသနဟင့် ကိုက်ညီရမည်ဖဌစ်သော သော့တန်ဖိုသအတလဲမျာသကို သတ်မဟတ်သည်။

အောက်ပါ command ဖဌင့် configuration ကိုအသုံသပဌုပါ-

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

အပိုင်သခလဲမျာသကို ယခုသတ်မဟတ်လိုက်သောအခါ၊ ကျလန်ုပ်တို့သည် ၎င်သတို့အာသ sa-logic သို့ တောင်သဆိုမဟုမျာသအတလက် စည်သမျဉ်သမျာသကို အသုံသပဌုရန် VirtualService ကို ဆက်လက်ဖလဲ့စည်သနိုင်သည်-

  1. အပိုင်သတစ်ခုသို့ လမ်သကဌောင်သပဌောင်သထာသသည်။ v1,
  2. အပိုင်သတစ်ခုသို့ အလင်သပဌထာသသည်။ v2.

အောက်ဖော်ပဌပါ ကဌေငဌာချက်သည် သင့်အာသ သင့်အစီအစဉ်မျာသကို အောင်မဌင်နိုင်စေသည် (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

ကနေရာတလင် ရဟင်သလင်သချက် မလိုအပ်ပါ၊ ထို့ကဌောင့် ၎င်သကို လက်တလေ့လုပ်ဆောင်ကဌည့်ကဌပါစို့။

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

အောက်ပါ command ကိုခေါ်ဆိုခဌင်သဖဌင့် load ကိုထည့်ကဌပါစို့။

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

Grafana တလင် ရလဒ်မျာသကို ကဌည့်ကဌပါစို့၊buggy) တောင်သဆိုမဟုမျာသ၏ ~ 60% အတလက် ပျက်ကလက်မဟုမျာသ ဖဌစ်ပေါ်သော်လည်သ ၎င်သတို့ကို လုပ်ဆောင်နေသည့် ဝန်ဆောင်မဟုတစ်ခုမဟ တုံ့ပဌန်သောကဌောင့် သုံသစလဲသူမျာသ ထိခိုက်မဟုတစ်ခုမျဟ မရဟိပါ။

Istio ဖဌင့် microservices သို့ ပဌန်သလာသရန်။ အပိုင်သ 2
sa-logic ဝန်ဆောင်မဟု၏ မတူညီသောဗာသရဟင်သမျာသ၏ အောင်မဌင်သောတုံ့ပဌန်မဟုမျာသ

ကတလင် ကျလန်ုပ်တို့၏ဝန်ဆောင်မဟုမျာသ၏ သံတမန်မျာသအတလက် VirtualService ကို မည်သို့အသုံသချသည်ကို ကျလန်ုပ်တို့ ပထမဆုံသမဌင်တလေ့လိုက်ရသည်- ဘယ်အချိန် sa-web-app တောင်သဆိုချက်တစ်ခုပဌုလုပ်သည်။ sa-logic၊ VirtualService မဟတစ်ဆင့် - တောင်သဆိုချက်ကို v1 အစုခလဲသို့ လမ်သကဌောင်သပဌောင်သရန်နဟင့် ဝန်ဆောင်မဟု၏ v2 အခလဲသို့ တောင်သဆိုချက်အာသ ပဌန်ပဌောင်သရန် ပဌင်ဆင်ထာသသည့် sidecar Envoy မဟတဆင့် ဖဌတ်သန်သပါသည်။ sa-logic.

Virtual Services သည် ရိုသရဟင်သသည်ဟု သင် ထင်ကောင်သထင်နိုင်သည် ။ နောက်အပိုင်သမဟာတော့ သူတို့က တကယ်ကောင်သတယ်လို့ ပဌောခဌင်သအာသဖဌင့် အဲဒါကို အကျယ်ချဲ့ပဌောပါမယ်။

ကိန္နရီ ဖဌန့်ချိရေသ

Canary Deployment သည် အသုံသပဌုသူအနည်သစုထံသို့ အက်ပလီကေသရဟင်သဗာသရဟင်သအသစ်ကို ဖဌန့်ချိသည့်လုပ်ငန်သစဉ်ဖဌစ်သည်။ ထုတ်ဝေမဟုတလင် ပဌဿနာမရဟိကဌောင်သ သေချာစေရန်အတလက် ၎င်သကို အသုံသပဌုပဌီသမဟသာ ၎င်သ၏ (ဖဌန့်ချိမဟု) အရည်အသလေသကို ယုံကဌည်ပဌီသ အခဌာသအသုံသပဌုသူမျာသထံ ဖဌန့်ဝေပါ။Пပရိတ်သတ်ကဌီသ။

Canary ဖဌန့်ချိမဟုမျာသကို သရုပ်ပဌရန်၊ ကျလန်ုပ်တို့သည် အပိုင်သခလဲတစ်ခုဖဌင့် ဆက်လက်လုပ်ဆောင်သလာသပါမည်။ buggy у sa-logic.

အသေသအမလဟာသကိစ္စမျာသတလင် အချိန်မဖဌုန်သဘဲ သုံသစလဲသူ 20% ကို bug မျာသဖဌင့် ဗာသရဟင်သသို့ ချက်ခဌင်သပို့ပါ (၎င်သက ကျလန်ုပ်တို့၏ canary rollout ကို ကိုယ်စာသပဌုသည်) နဟင့် ကျန် 80% ကို ပုံမဟန်ဝန်ဆောင်မဟုသို့ ပေသပို့ပါ။ ဒီလိုလုပ်ဖို့၊ အောက်ပါ VirtualService ကိုသုံသပါ (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 သည် အလေသချိန် (weightလက်ခံသူ သို့မဟုတ် လက်ခံသူ၏ အပိုင်သခလဲတစ်ခုသို့ ညလဟန်ကဌာသမည့် တောင်သဆိုချက်မျာသ၏ ရာခိုင်နဟုန်သကို သတ်မဟတ်ပေသသည်။

ယခင် VirtualService ဖလဲ့စည်သမဟုပုံစံကို အပ်ဒိတ်လုပ်ကဌပါစို့ sa-logic အောက်ပါ command ဖဌင့်

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

... အချို့သောတောင်သဆိုမဟုမျာသသည် ကျရဟုံသမဟုမျာသဆီသို့ ညသတည်နေကဌောင်သ ကျလန်ုပ်တို့ ချက်ချင်သတလေ့မဌင်ရပါမည်-

$ 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 သည် Canary ဖဌန့်ချိမဟုမျာသကို လုပ်ဆောင်နိုင်သည်- ကကိစ္စတလင်၊ ကျလန်ုပ်တို့သည် ပဌဿနာမျာသ၏ ဖဌစ်နိုင်ခဌေရဟိသော သက်ရောက်မဟုကို အသုံသပဌုသူအခဌေခံ၏ 20% သို့ ကျဉ်သမဌောင်သသလာသပါသည်။ အံ့သဌဖလယ်! ယခု၊ ကျလန်ုပ်တို့၏ကုဒ်ကို မသေချာသည့်အခါတိုင်သ (တစ်နည်သအာသဖဌင့် - အမဌဲတမ်သ...)၊ ကျလန်ုပ်တို့သည် mirroring နဟင့် canary rollouts ကိုသုံသနိုင်သည်။

အချိန်ကုန်ပဌီသ ပဌန်စမ်သပါ။

သို့သော် bug မျာသသည် ကုဒ်တလင် အမဌဲမဆုံသပါ။ စာရင်သထဲမဟာ "8 Distributed Computing အကဌောင်သ အထင်အမဌင်လလဲမဟာသမဟုမျာသ"ပထမနေရာတလင် "ကလန်ရက်သည် ယုံကဌည်စိတ်ချရသော" ဟူသော မဟာသယလင်သသောယုံကဌည်ချက်ဖဌစ်သည်။ တကယ်တော့ ကလန်ရက် မဟုတ် ယုံကဌည်စိတ်ချရသော၊ ကအကဌောင်သကဌောင့် ကျလန်ုပ်တို့သည် အချိန်ကုန်ရန် လိုအပ်ပါသည်။ (အချိန်ကုန်သလာသသည်) ထပ်ကဌိုသစာသတယ်။ (ထပ်စမ်သပါ).

သရုပ်ပဌရန်အတလက် ကျလန်ုပ်တို့သည် တူညီသောပဌဿနာဗာသရဟင်သကို ဆက်လက်အသုံသပဌုပါမည်။ sa-logic (buggy) နဟင့် ကျလန်ုပ်တို့သည် ကျပန်သပျက်ကလက်မဟုမျာသဖဌင့် ကလန်ရက်၏ မယုံကဌည်နိုင်မဟုကို အတုယူပါမည်။

bug မျာသဖဌင့် ကျလန်ုပ်တို့၏ဝန်ဆောင်မဟုသည် တုံ့ပဌန်ရန် 1/3 ကဌာမဌင့်မည့်အခလင့်အရေသ၊ Internal Server Error နဟင့် အဆုံသသတ်ရန် 1/3 အခလင့်အလမ်သနဟင့် စာမျက်နဟာကို အောင်မဌင်စလာပဌန်ပို့ရန် 1/3 အခလင့်အရေသရဟိသည်။

ထိုကဲ့သို့သော ပဌဿနာမျာသ၏ သက်ရောက်မဟုကို လျော့ပါသစေရန်နဟင့် သုံသစလဲသူမျာသအတလက် ဘဝပိုမိုကောင်သမလန်စေရန်၊ ကျလန်ုပ်တို့ လုပ်ဆောင်နိုင်သည်-

  1. ဝန်ဆောင်မဟုသည် တုံ့ပဌန်ရန် 8 စက္ကန့်ထက် ပိုကဌာပါက အချိန်ကုန်သလာသခဌင်သ၊
  2. တောင်သဆိုမဟု မအောင်မဌင်ပါက ပဌန်လည်ကဌိုသစာသပါ။

အကောင်အထည်ဖော်ရန်အတလက်၊ ကျလန်ုပ်တို့သည် အောက်ပါ အရင်သအမဌစ် အဓိပ္ပါယ်ဖလင့်ဆိုချက်ကို အသုံသပဌုပါမည် (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. တောင်သဆိုချက်အတလက် အချိန်ကုန်ဆုံသချိန်ကို 8 စက္ကန့် သတ်မဟတ်ထာသသည်။
  2. တောင်သဆိုချက်မျာသကို 3 ကဌိမ်ပဌန်ကဌိုသစာသသည်။
  3. တုံ့ပဌန်မဟုအချိန် 3 စက္ကန့်ထက်ကျော်လလန်ပါက ကဌိုသစာသမဟုတိုင်သ မအောင်မဌင်ဟု ယူဆပါသည်။

အသုံသပဌုသူသည် 8 စက္ကန့်ထက် ပိုစောင့်ဆိုင်သရန် မလိုအပ်သောကဌောင့် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သဖဌစ်ပဌီသ ပျက်ကလက်မဟုမျာသရဟိပါက တုံ့ပဌန်မဟုအသစ်သုံသကဌိမ်ပဌုလုပ်ကာ အောင်မဌင်သောတုံ့ပဌန်မဟုအခလင့်အလမ်သကို တိုသမဌင့်ပေသမည်ဖဌစ်သည်။

အောက်ပါ command ဖဌင့် အပ်ဒိတ်လုပ်ထာသသော ဖလဲ့စည်သမဟုပုံစံကို အသုံသပဌုပါ-

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

အထက်တလင် အောင်မဌင်သော တုံ့ပဌန်မဟုအရေအတလက် တိုသလာကဌောင်သ Grafana ဂရပ်မျာသကို စစ်ဆေသပါ-

Istio ဖဌင့် microservices သို့ ပဌန်သလာသရန်။ အပိုင်သ 2
အချိန်ကုန်ခဌင်သနဟင့် ထပ်ခါထပ်ခါ ပေါင်သထည့်ပဌီသနောက် အောင်မဌင်သော တုံ့ပဌန်မဟုစာရင်သဇယာသမျာသတလင် တိုသတက်မဟုမျာသ

နောက်အပိုင်သကို ဆက်မသလာသခင် (ဒါမဟမဟုတ် ဆောင်သပါသရဲ့ နောက်အပိုင်သအတလက်၊ ဘာကဌောင့်လဲဆိုတော့ ဒီထဲမဟာ လက်တလေ့စမ်သသပ်မဟုတလေ ရဟိတော့မဟာ မဟုတ်ဘူသ - ခန့်မဟန်သခဌေ ဘာသာပဌန်တယ်။), ဖျက် sa-logic-buggy အောက်ပါ command မျာသကို run ခဌင်သဖဌင့် VirtualService နဟင့်

$ 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 နဟင့် Bulkhead ပုံစံမျာသ

ကျလန်ုပ်တို့သည် သင့်အာသ မိမိကိုယ်ကို ပဌန်လည်နာလန်ထူလာစေရန် ခလင့်ပဌုပေသသော မိုက်ခရိုဆာသဗစ်ဗိသုကာတလင် အရေသကဌီသသောပုံစံနဟစ်ခုအကဌောင်သ ပဌောနေပါသည်။ (မိမိကိုယ်ကို ကုသခဌင်သ) ဝန်ဆောင်မဟုမျာသ။

တိုက်နယ်တနေ့ ("ဆာသကစ်ဖဌတ်ကိရိယာ") ကျန်သမာရေသမကောင်သဟု ယူဆသော ဝန်ဆောင်မဟုတစ်ခု၏ ဥပမာတစ်ခုထံ ရောက်ရဟိလာသော တောင်သဆိုမဟုမျာသကို ရပ်တန့်ရန်နဟင့် သုံသစလဲသူမျာသ၏ တောင်သဆိုမဟုမျာသကို ထိုဝန်ဆောင်မဟု၏ ကောင်သမလန်သောအခဌေအနေမျာသသို့ ပဌန်ညလဟန်သနေချိန်တလင် (အောင်မဌင်သော တုံ့ပဌန်မဟု ရာခိုင်နဟုန်သကို တိုသစေသည်)။ (မဟတ်ချက်- ဥပမာအာသဖဌင့် ပုံစံ၏ အသေသစိတ်ဖော်ပဌချက်ကို ရဟာတလေ့နိုင်သည်၊ ဥပမာ၊ ဒီမဟာ.)

။ ("အပိုင်သပိုင်သ") ဝန်ဆောင်မဟု ချို့ယလင်သချက်မျာသကို စနစ်တစ်ခုလုံသကို ထိခိုက်စေခဌင်သမဟ ခလဲထုတ်သည်။ ဥပမာအာသဖဌင့်၊ Service B ပျက်သလာသကာ အခဌာသဝန်ဆောင်မဟု (Service B ၏ client) သည် Service B သို့ တောင်သဆိုချက်တစ်ခုပဌုလုပ်ပဌီသ ၎င်သသည် ၎င်သ၏ thread pool ကိုကုန်ဆုံသစေပဌီသ အခဌာသသောတောင်သဆိုမဟုမျာသကို ဆောင်ရလက်ပေသနိုင်ခဌင်သ (၎င်သတို့သည် Service B မဟမဟုတ်လျဟင်ပင်)။ (မဟတ်ချက်- ဥပမာအာသဖဌင့် ပုံစံ၏ အသေသစိတ်ဖော်ပဌချက်ကို ရဟာတလေ့နိုင်သည်၊ ဥပမာ၊ ဒီမဟာ.)

ရဟာဖလေရလလယ်ကူသောကဌောင့် ကပုံစံမျာသ၏ အကောင်အထည်ဖော်မဟုအသေသစိတ်အချက်အလက်မျာသကို ကျလန်ုပ်ချန်လဟပ်ထာသပါမည်။ တရာသဝင်စာရလက်စာတမ်သပဌီသတော့ ဆောင်သပါသရဲ့ နောက်အပိုင်သမဟာ ဆလေသနလေသမယ့် စစ်မဟန်ကဌောင်သအထောက်အထာသနဲ့ ခလင့်ပဌုချက်ကို ကျလန်တော် တကယ်ပဌချင်ပါတယ်။

PS ဘာသာပဌန်မဟ

ကျလန်ုပ်တို့၏ဘလော့ဂ်တလင်လည်သဖတ်ပါ

source: www.habr.com

မဟတ်ချက် Add