<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          干貨,搞定 Istio + SkyWalking + Spring Boot 實(shí)戰(zhàn)環(huán)境

          共 6508字,需瀏覽 14分鐘

           ·

          2022-05-20 19:18


          微服務(wù)架構(gòu)被企業(yè)級(jí)開(kāi)發(fā)廣泛采用,而隨著業(yè)務(wù)迅速發(fā)展,服務(wù)數(shù)量也呈現(xiàn)爆炸式的增長(zhǎng)。日常開(kāi)發(fā)過(guò)程中一套測(cè)試環(huán)境可能包含成千上百個(gè)服務(wù)。在協(xié)作過(guò)程中等待環(huán)境、搶占環(huán)境、驗(yàn)證沖突已成為常態(tài)。而長(zhǎng)期發(fā)展導(dǎo)致的技術(shù)債和基礎(chǔ)架構(gòu)復(fù)雜度又非常高,復(fù)制多套環(huán)境存在較高難度,工程師日常協(xié)作只能在等待中苦不堪言。


          在 Zadig V1.11.0 版本中推出了環(huán)境自測(cè)模式,工程師可以基于一套含全量服務(wù)的基準(zhǔn)環(huán)境低成本搭建獨(dú)享的開(kāi)發(fā)者子環(huán)境。利用 Istio 和 Tracing 組件的鏈路追蹤和流量動(dòng)態(tài)路由的能力,實(shí)現(xiàn)開(kāi)發(fā)者子環(huán)境與基準(zhǔn)環(huán)境聯(lián)調(diào)的目的,從而解決大規(guī)模微服務(wù)下工程師被環(huán)境問(wèn)題阻塞的情況。

          下面以服務(wù)網(wǎng)格組件  Istio [1]  + 企業(yè)采用率非常廣泛的  SkyWalking [2+ 典型微服務(wù)架構(gòu) Spring Boot 項(xiàng)目 PiggyMetrics [3] 為例,演示如何使用 Zadig 自測(cè)模式實(shí)現(xiàn)工程師日常自測(cè)聯(lián)調(diào)過(guò)程。

          項(xiàng)目簡(jiǎn)介

          本例 PiggyMetrics [4] 項(xiàng)目,架構(gòu)如下:

          服務(wù)配置文件參考 YAML [5],服務(wù)組成如下:


          8 個(gè) Spring Boot 應(yīng)用程序:

          • account-service

          • auth-service

          • config-service (主要管理服務(wù)依賴的 configmap 和 secret 等配置)

          • gateway

          • monitoring-service

          • notification-service

          • registry-service

          • statistics-service


          4 個(gè) MongoDB 實(shí)例:

          • account-mongodb

          • auth-mongodb

          • notification-mongodb

          • statistics-mongodb

          1 個(gè) RabbitMq:

          • rabbitmq

          對(duì)于 statistics-service 服務(wù)開(kāi)發(fā)者需要自測(cè)聯(lián)調(diào),可以基于基準(zhǔn)環(huán)境拉起一套含有 config-service' 和 statistics-service' 服務(wù)的子環(huán)境,通過(guò)訪問(wèn)基準(zhǔn)環(huán)境的地址,并且在請(qǐng)求中加上子環(huán)境相應(yīng)的 header 信息可實(shí)現(xiàn)訪問(wèn)子環(huán)境的能力。效果圖如下:




          前置準(zhǔn)備工作

          基礎(chǔ)組件信息

          • Kubernetes 版本:v1.20.11(Node 2*8c16g)

          • Zadig 版本:1.11.0+

          • Skywalking 版本:v8.8.1

          • ElasticSearch 版本:7.5.1

          • Istio 版本:1.12.1


          安裝組件

          1

          安裝 Zadig:安裝方式參考官方文檔:「快速安裝 | Zadig 文檔」[6]

          2

          安裝 Istio:安裝方式參考官方文檔: Installation Guides [7]

          3

          安裝 SkyWalking:

          kubectl create ns skywalking
          git clone https://github.com/apache/skywalking-kubernetescd skywalking-kuberneteshelm repo add elastic https://helm.elastic.cohelm dep up chart/skywalking
          helm install skywalking skywalking -n skywalking -f ./skywalking/values-es7.yaml

          代碼片段:左右滑動(dòng)可查看完整代碼


          準(zhǔn)備基準(zhǔn)環(huán)境

          1、在 Zadig 上創(chuàng)建項(xiàng)目 piggymetrics,配置服務(wù),服務(wù) YAML fork 自 Zadig 代碼庫(kù) [8] ,可使用「從代碼庫(kù)同步」方式批量導(dǎo)入服務(wù)配置


          服務(wù) YAML 聲明中,已通過(guò) initContainer 共享 SkyWalking Agent jar 到業(yè)務(wù)容器。initContainer 所使用的 IMAGE 通過(guò)以下方式生成:

          # 選擇對(duì)應(yīng)版本的 Agent jar 包下載 [9] ,并構(gòu)建成鏡像。Dockerfile示例如下:FROM busybox:latestRUN mkdir -p /usr/skywalking/agent/ADD apache-skywalking-apm-bin/agent/ /usr/skywalking/agent/WORKDIR /

          代碼片段:左右滑動(dòng)可查看完整代碼


          業(yè)務(wù)鏡像所使用的 IMAGE 生成方式舉例:

          FROM java:8-jre
          ADD ./target/statistics-service.jar /app/ENTRYPOINT ["sh","-c","java -Dapp.id=$SW_AGENT_NAME -Xmx200m $JAVA_OPTS -Dskywalking.agent.service_name=$SW_AGENT_NAME -Dskywalking.collector.backend_service=$SW_AGENT_COLLECTOR_BACKEND_SERVICES -jar /app/statistics-service.jar"]EXPOSE 7000

          代碼片段:左右滑動(dòng)可查看完整代碼


          需要根據(jù)實(shí)際情況修改服務(wù) YAML 的環(huán)境變量中 skywalking-oap 的地址:SW_AGENT_COLLECTOR_BACKEND_SERVICES 的值,即 <service-name>. <namespace-name>.svc.cluster.local


          2、創(chuàng)建包含全量服務(wù)的基準(zhǔn)環(huán)境  base

          部署完成后,可從 SkyWalking UI 上查看的服務(wù)之間的依賴關(guān)系如下:


          開(kāi)啟自測(cè)模式

          在基準(zhǔn)環(huán)境準(zhǔn)備完成以后即可開(kāi)啟自測(cè)模式并創(chuàng)建包含 config-service  statistics-service 服務(wù)的子環(huán)境 subdev


          創(chuàng)建完成后,修改子環(huán)境的中服務(wù)依賴的中間件等配置,環(huán)境配置-編輯 configmap special-config-env修改中間件地址為:<service-name>. <namespace-name>.svc.cluster.local。

          apiVersion: v1data:  account_mongodb_host: account-mongodb.piggymetrics-env-base.svc.cluster.local  auth_mongodb_host: auth-mongodb.piggymetrics-env-base.svc.cluster.local  auth_service_host: auth-service.piggymetrics-env-base.svc.cluster.local  notification_mongodb_host: notification-mongodb.piggymetrics-env-base.svc.cluster.local  rabbitmq_host: rabbitmq.piggymetrics-env-base.svc.cluster.local  registry_service_host: registry.piggymetrics-env-base.svc.cluster.local  statistics_mongodb_host: statistics-mongodb.piggymetrics-env-base.svc.cluster.localkind: ConfigMapmetadata:  name: special-config-env

          代碼片段:左右滑動(dòng)可查看完整代碼



          完成配置修改后,子環(huán)境環(huán)境即可正常和基準(zhǔn)環(huán)境交互。


          驗(yàn)證自測(cè)模式

          訪問(wèn) gateway 服務(wù)的接口:/account/current

          訪問(wèn)鏈路如下:


          1、訪問(wèn)基準(zhǔn)環(huán)境

          本機(jī)訪問(wèn)集群中的 gateway 服務(wù),需要先做端口轉(zhuǎn)發(fā)。

          kubectl port-forward service/gateway 8085:80 -n  piggymetrics-env-base

          代碼片段:左右滑動(dòng)可查看完整代碼


          • 方式一:

            Chrome 訪問(wèn)  localhost:8085  頁(yè)面正常操作,即訪問(wèn)的是基準(zhǔn)環(huán)境


          • 方式二:

            使用 curl 命令請(qǐng)求基準(zhǔn)環(huán)境

          curl -v -X PUT -H "Authorization: Bearer c7f5d94f-8eca-4702-96b4-f496837e8e29" -H "Content-Type:application/json" -d '{"note":null,"incomes":[{"income_id":1,"title":"10000www","icon":"wallet","currency":"USD","period":"MONTH","amount":"10000","converted":"NaN"}],"expenses":[],"saving":{"amount":0,"capitalization":false,"deposit":false,"currency":"USD","interest":0}}' localhost:8085/accounts/current

          代碼片段:左右滑動(dòng)可查看完整代碼

          上述請(qǐng)求中的 access token  Bearer c7f5d94f-

          8eca-4702-96b4-f496837e8e29,可以通過(guò)登錄 

          piggymetrics web 端新建用戶獲取,如下圖所示:

          1

          2


          2、訪問(wèn)子環(huán)境

          訪問(wèn)地址使用 base 環(huán)境的地址,并在請(qǐng)求 header 中添加字段:

          • x-env:表示請(qǐng)求轉(zhuǎn)發(fā)到的子環(huán)境名,如 x-env=subdev

          • sw8:參考 「跨進(jìn)程傳播的頭部協(xié)議 sw8 詳情」[10]

          • 方式一:

            利用 「 Chrome 插件 ModHeader 」[11],使頁(yè)面發(fā)起的請(qǐng)求在 header 中添加字段。加上字段后,可以使用 Chrome 頁(yè)面操作,訪問(wèn)子環(huán)境進(jìn)行自測(cè)聯(lián)調(diào)。


          • 方式二:

            使用 curl 命令將請(qǐng)求轉(zhuǎn)發(fā)到子環(huán)境,使用子環(huán)境進(jìn)行自測(cè)聯(lián)調(diào),請(qǐng)求 header 中添加字段 x-env、sw8。

          curl -v -X PUT -H "Authorization: Bearer c7f5d94f-8eca-4702-96b4-f496837e8e29" -H 'x-env: subdev' -H 'sw8: 1-Mjk3ZWIyYTIzNzk2NGQzZDgzMzVkMjk3MTA3NjliNjQuNDkuMTY1MTczNjc1NDEwNTAwMDE=-Mjk3ZWIyYTIzNzk2NGQzZDgzMzVkMjk3MTA3NjliNjQuNDkuMTY1MTczNjc1NDEwNTAwMDA=-1-U2VydmljZUI=-MTEwY2VhMzFhODcwNDBlZTkwN2QxZjQxOTg0MjUzMTFAMTkyLjE2OC4wLjI0MA==-R0VUOi9ncmVldGluZy97bmFtZX0=-U2VydmljZUE6ODA=' -H "Content-Type:application/json" -d '{"note":null,"incomes":[{"income_id":1,"title":"10000www","icon":"wallet","currency":"USD","period":"MONTH","amount":"10000","converted":"NaN"}],"expenses":[],"saving":{"amount":0,"capitalization":false,"deposit":false,"currency":"USD","interest":0}}' localhost:8085/accounts/current

          代碼片段:左右滑動(dòng)可查看完整代碼


          查看子環(huán)境 subdev 中 statistics-service 服務(wù)的日志,

          可知請(qǐng)求已到子環(huán)境服務(wù)中。

          kubectl logs statistics-service-5966d6b65c-5sc98 -n piggymetrics-env-subdev|grep "statistics-service-"

          代碼片段:左右滑動(dòng)可查看完整代碼



          至此已實(shí)現(xiàn)自測(cè)模式的能力,工程師可以根據(jù)實(shí)際情況基于基準(zhǔn)環(huán)境創(chuàng)建屬于自己的子環(huán)境。


          GitHub: https://github.com/koderover/zadig,歡迎大家前來(lái)圍觀。

          掃描以下二維碼,添加 KodeRover / Zadig 小伙伴,備注 【姓名-公司-城市】,即可加入我們的「Zadig 開(kāi)源吐槽群」


          參考資料:

          [1]   Istiohttps://github.com/istio/istio

          [2]   SkyWalkinghttps://github.com/apache/skywalking

          [3、4]    PiggyMetricshttps://github.com/sqshq/piggymetrics

          [5]   YAMLhttps://github.com/koderover/zadig/tree/main/examples/spring-cloud-piggymetrics

          [6]  「快速安裝 | Zadig 文檔」https://docs.koderover.com/zadig/v1.11.0/quick-start/try-out-install/#%E5%89%8D%E7%BD%AE%E6%9D%A1%E4%BB%B6

          [7]    Installation Guideshttps://istio.io/latest/docs/setup/install/

          [8]    Zadig 代碼庫(kù)https://github.com/koderover/zadig/tree/main/examples/spring-cloud-piggymetrics

          [9]    Agent jar 包下載https://skywalking.apache.org/downloads/#JavaAgent

          [10]   「跨進(jìn)程傳播的頭部協(xié)議 sw8 詳情」:https://skyapm.github.io/document-cn-translation-of-skywalking/zh/8.0.0/protocols/Skywalking-Cross-Process-Propagation-Headers-Protocol-v3.html

          [11]   「Chrome 插件 ModHeader 」:https://chrome.google.com/webstore/detail/modheader/idgpnmonknjnojddfkpgkljpfnnfcklj


          瀏覽 25
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩无码AV一区 | 国产无遮挡A片又黄又爽小直播 | 免费无码婬片AAAA片在线蜜芽 | 黑人操逼视频 | 日韩黄色激情 |