真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

基于Istio實現(xiàn)流量對比分析是怎樣的

本篇文章為大家展示了基于Istio實現(xiàn)流量對比分析是怎樣的,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

公司主營業(yè)務(wù):成都做網(wǎng)站、網(wǎng)站設(shè)計、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出莒縣免費做網(wǎng)站回饋大家。

流量鏡像

流量鏡像,也稱為影子流量,流量鏡像提供一種盡可能低的風(fēng)險為生產(chǎn)帶來變化的強(qiáng)大功能。鏡像會將實時流量的副本發(fā)送到鏡像服務(wù)。鏡像流量發(fā)生在主服務(wù)的關(guān)鍵請求路徑之外。

在非生產(chǎn)或者測試環(huán)境中,嘗試訪問一個服務(wù)所有可能的測試用例組合是個非常不現(xiàn)實的任務(wù)。 在某些情況下,編寫這些用例的所有工作也可能與實際生產(chǎn)所需的用例不匹配。在理想情況下,可以使用實時的生產(chǎn)用例和流量來幫助完善在測試環(huán)境中錯過的功能區(qū)域。

一旦我們能夠可靠地鏡像流量,就可以開始做一些有價值的事情,例如通過請求流量對比工具Diffy,可以將引入測試集群的流量與生產(chǎn)集群中的預(yù)期行為進(jìn)行比較。例如,我們可能想比較請求結(jié)果與預(yù)期結(jié)果間的偏差,或是API協(xié)議中的數(shù)據(jù)損壞情況,以便更好地兼容。
除此之外,需要注意:

  • 當(dāng)流量鏡像到不同的服務(wù)時,會發(fā)生在請求的關(guān)鍵路徑之外;

  • 忽略對任何鏡像流量的響應(yīng); 流量被視為“即發(fā)即忘”;

流量對比

此處,插入一個代理就可以負(fù)責(zé)此類流量的協(xié)調(diào),并對其進(jìn)行有趣的比較。Diffy就是一款這樣的代理工具。Diffy啟動一個代理服務(wù)(例如監(jiān)聽端口8880),再根據(jù)用戶設(shè)置的primary、secondary兩個舊服務(wù)地址(primary和secondary代碼完全相同,目的是為了減少噪音干擾)、candidate新服務(wù)地址。

它還能夠檢測結(jié)果中的噪音,并通過先調(diào)用兩個實時服務(wù)的實例來忽略它們(例如時間戳,單調(diào)遞增計數(shù)器等提示),總結(jié)來說就是檢測,然后在測試服務(wù)中忽略掉這部分。

基于Istio實現(xiàn)流量對比分析是怎樣的

Diffy還提供了一個不錯的頁面可以用來查看調(diào)用結(jié)果、對比情況、和基于某些特征的過濾。它還有一個很好的管理控制臺,可以查看有關(guān)調(diào)用比較結(jié)果的功能指標(biāo)(metrics)和統(tǒng)計數(shù)據(jù)(statistics)。

創(chuàng)建用于Istio流量鏡像的服務(wù)

在此任務(wù)中,將首先強(qiáng)制所有流量到 v1 版本的服務(wù)。然后,將使用規(guī)則將一部分流量鏡像到 v2版本。

首先部署兩個版本的示例服務(wù)。

版本1的部署使用了Docker鏡像httpbin,提供常見的http請求訪問:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: mirrorservice-sample-v1
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: mirrorservice-sample
        version: v1
    spec:
      containers:
      - image: docker.io/kennethreitz/httpbin
        imagePullPolicy: IfNotPresent
        name: mirrorservice-sample
        command: ["gunicorn", "--access-logfile", "-", "-b", "0.0.0.0:44134", "httpbin:app"]
        ports:
        - containerPort: 44134

版本2的部署使用了自定義的Docker鏡像,對應(yīng)的Dockerfile如下:

FROM nginx:latest
COPY default.conf /etc/nginx/conf.d/
EXPOSE 80

所需的nginx 配置文件:

server {
    listen       44134;
    server_name  localhost;

    location / {
        proxy_pass http://httpbin-diffy.diffy:8880/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";   
    }
}

版本2的部署作為Istio的流量鏡像目標(biāo),在接收到流量之后會轉(zhuǎn)發(fā)到Diffy的代理中。當(dāng)前沒有直接將Diffy代理作為Isito流量鏡像目標(biāo),原因是Diffy代理與Envoy代理目前本身有沖突,無法正常流量轉(zhuǎn)發(fā),因此需要此部署中轉(zhuǎn)一下。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: mirrorservice-sample-v2
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: mirrorservice-sample
        version: v2
    spec:
      containers:
      - name: mirrorservice-sample
        image: registry.cn-beijing.aliyuncs.com/wangxining/mirrorservice:0.1
        imagePullPolicy: Always
        ports:
        - containerPort: 44134

對應(yīng)的Kubernetes service:

apiVersion: v1
kind: Service
metadata:
  name: mirrorservice-sample
spec:
  type: ClusterIP
  ports:
  - name: http
    port: 44134
  selector:
    app: mirrorservice-sample

創(chuàng)建流量鏡像的Istio策略

默認(rèn)情況下,Kubernetes 在服務(wù)的兩個版本之間進(jìn)行負(fù)載均衡。創(chuàng)建如下流量鏡像規(guī)則將 100% 的流量發(fā)送到 v1, 同時指定流量鏡像到v2。當(dāng)流量被鏡像時,請求將通過其主機(jī)/授權(quán)報頭發(fā)送到鏡像服務(wù)附上 -shadow 。

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: mirrorservice-sample
spec:
  host: mirrorservice-sample
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
---      
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: mirrorservice-sample
spec:
  hosts:
    - mirrorservice-sample
  http:
  - route:
    - destination:
        host: mirrorservice-sample
        subset: v1
      weight: 100
    #- destination:
    #    host: mirrorservice-sample
    #    subset: v2
    #  weight: 0
    mirror:
      host: mirrorservice-sample
      subset: v2

搭建Diffy用于請求流量對比

Diffy可以作為代理,截取請求并發(fā)送至所有運行的服務(wù)實例,通過對比響應(yīng)結(jié)果來發(fā)現(xiàn)每次迭代代碼中可能存在的問題。其中,Diffy上運行了三類代碼實例:

  • 線上穩(wěn)定版本:一個運行線上穩(wěn)定版本代碼的節(jié)點

  • 線上穩(wěn)定版本備份:同樣運行了線上的穩(wěn)定版本,用于消除噪音

  • 測試版本:待上線的測試版本,用于和線上環(huán)境代碼進(jìn)行對比
    圖片.png

在實際Diffy測試中,會發(fā)現(xiàn)大部分的接口都會有一定差異,原因是這些響應(yīng)中存在了噪音,噪音可能包括:

  • server響應(yīng)中生成的時間戳

  • 隨機(jī)生成的數(shù)字

  • 系統(tǒng)服務(wù)間的有條件競爭

Diffy能夠通過一定的方式,清除這類噪音,保證分析結(jié)果不被影響。

創(chuàng)建Diffy及示例服務(wù)

通過以下YAML創(chuàng)建Diffy服務(wù):

apiVersion: v1
kind: Service
metadata:
  name: httpbin-diffy
  labels:
    app: httpbin-diffy
spec:
  ports:
  - name: http-proxy
    port: 8880
  - name: http-admin
    port: 8881
  - name: http-console
    port: 8888    
  selector:
    app: httpbin-diffy
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: httpbin-diffy
    version: v2
  name: httpbin-diffy-v2
spec:
  replicas: 1
  selector:
    matchLabels:
      app: httpbin-diffy
      version: v2
  template:
    metadata:
      labels:
        app: httpbin-diffy
        version: v2
    spec:
      containers:
      - image: lordofthejars/diffy:1.0
        imagePullPolicy: IfNotPresent
        livenessProbe:
          exec:
            command:
            - curl
            - localhost:8888
          initialDelaySeconds: 10
          periodSeconds: 60
          timeoutSeconds: 1
        name: httpbin-diffy
        args: ["-candidate=httpbin-candidate:8080", "-master.primary=httpbin-master:8080", "-master.secondary=httpbin-master:8080", "-service.protocol=http", "-serviceName=httpbin", "-proxy.port=:8880", "-admin.port=:8881", "-http.port=:8888", "-rootUrl='localhost:8888'"]
        ports:
        - containerPort: 8888
          name: http-console
          protocol: TCP
        - containerPort: 8880
          name: http-proxy
          protocol: TCP
        - containerPort: 8881
          name: http-admin
          protocol: TCP
        readinessProbe:
          exec:
            command:
            - curl
            - localhost:8888
          initialDelaySeconds: 10
          periodSeconds: 60
          timeoutSeconds: 1
        securityContext:
          privileged: false

通過以下YAML創(chuàng)建示例所用的primary、secondary(當(dāng)前示例中與primary相同)與candidate服務(wù):

apiVersion: v1
kind: Service
metadata:
  name: httpbin-master
  labels:
    app: httpbin-master
spec:
  ports:
  - name: http
    port: 8080
  selector:
    app: httpbin
    version: v1
---
apiVersion: v1
kind: Service
metadata:
  name: httpbin-candidate
  labels:
    app: httpbin-candidate
spec:
  ports:
  - name: http
    port: 8080
  selector:
    app: httpbin
    version: v2
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: httpbin-v1
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: httpbin
        version: v1
    spec:
      containers:
      - image: docker.io/kennethreitz/httpbin
        imagePullPolicy: IfNotPresent
        name: httpbin
        command: ["gunicorn", "--access-logfile", "-", "-b", "0.0.0.0:8080", "httpbin:app"]
        ports:
        - containerPort: 8080
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: httpbin-v2
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: httpbin
        version: v2
    spec:
      containers:
      - image: docker.io/kennethreitz/httpbin
        imagePullPolicy: IfNotPresent
        name: httpbin
        command: ["gunicorn", "--access-logfile", "-", "-b", "0.0.0.0:8080", "httpbin:app"]
        ports:
        - containerPort: 8080

發(fā)送流量進(jìn)行鏡像驗證

啟動 sleep 服務(wù),這樣就可以使用 curl 來提供負(fù)載:

cat <

進(jìn)入到SLEEP_POD, 具體POD名稱根據(jù)實際賦值。

kubectl exec -it $SLEEP_POD -c sleep sh

發(fā)送流量:

curl -v http://mirrorservice-sample:44134/headers

可以查看 v1的訪問日志記錄,如下所示創(chuàng)建的請求100%指向了v1。
基于Istio實現(xiàn)流量對比分析是怎樣的

與此同時,查看Diffy的Web界面,可以看到創(chuàng)建的請求也被鏡像到Diffy Proxy:
基于Istio實現(xiàn)流量對比分析是怎樣的

Diffy能夠通過一定的方式,清除這類噪音,保證分析結(jié)果不被影響。

結(jié)論

流量鏡像提供一種盡可能低的風(fēng)險為生產(chǎn)帶來變化的強(qiáng)大功能。鏡像會將實時流量的副本發(fā)送到鏡像服務(wù),鏡像流量發(fā)生在主服務(wù)的關(guān)鍵請求路徑之外。一旦我們能夠可靠地鏡像流量,就可以開始做一些有價值的事情,例如通過請求流量對比工具Diffy,可以將引入測試集群的流量與生產(chǎn)集群中的預(yù)期行為進(jìn)行比較。

支持流量鏡像只是 Istio 的眾多功能之一,它將使基于大型微服務(wù)的應(yīng)用程序的生產(chǎn)部署與管理變得更加簡單。歡迎大家使用阿里云上的容器服務(wù),快速搭建微服務(wù)的開放治理平臺Istio,比較簡單地集成到自己項目的微服務(wù)開發(fā)中。

上述內(nèi)容就是基于Istio實現(xiàn)流量對比分析是怎樣的,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)頁名稱:基于Istio實現(xiàn)流量對比分析是怎樣的
當(dāng)前路徑:http://weahome.cn/article/pesccc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部