国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

不改一行代碼輕松玩轉 Go 應用微服務治理

開發
為了更好的進行 Go 應用微服務治理,提高研發效率和系統穩定性,本文將介紹 MSE 微服務治理方案,無需修改業務代碼,即可實現上述治理能力。

01、Go 應用微服務治理簡介

Go 語言具有簡潔、高效、并發性強等特性,已經被廣泛認為是構建微服務的理想選擇之一。Go 語言作為構建 Kubernetes、Docker 的主要編程語言,目前不僅在云原生基礎組件領域中被廣泛使用,也逐漸被越來越多的開發者應用于各類業務場景中,基于微服務架構構建業務應用。

微服務架構通過模塊化體系結構,提高了系統的靈活性、敏捷性和擴展性,縮短了團隊開發周期、增加了資源利用效率,這也是越來越多的公司選擇采用微服務架構的主要原因之一。然而,隨著業務不斷發展與持續迭代,微服務帶來的系統復雜性也使得運維管理難度逐漸增加,從而影響開發效率和系統穩定性。

為了保證系統穩定性,我們在享受微服務帶來的優勢的同時,也不得不持續解決微服務帶來的問題和風險。例如:

  1. 在開發測試態,敏捷的迭代需要提供與線上完全隔離的環境用于研發和調試、業務發展帶來的服務增長需要有統一的面板來管理和觀測。
  2. 在變更態,為了防止新引入的 bug 給業務帶來的損失,需要具備灰度發布、快速回滾的能力。
  3. 在運行態,為了避免不確定流量、不穩定調用和基礎設施給業務帶來的穩定性問題,需要具備限流、熔斷、降級等能力,來規避運行時風險。

目前,在 Go 語言生態中,主流的微服務框架主要專注于解決如何快速構建微服務應用、以及微服務間通信問題,在微服務治理能力上仍有欠缺;主流的微服務治理組件,如 Sentinel-Golang、OpenTelemetry 等,雖然較好的解決了流量防護、應用可觀測等方面的微服務治理問題,但需要開發手動在業務代碼中通過 SDK 進行埋點,無法專注于業務邏輯的實現,這無疑在一定程度上降低了開發效率。

為了更好的進行 Go 應用微服務治理,提高研發效率和系統穩定性,本文將介紹 MSE 微服務治理方案,無需修改業務代碼,即可實現上述治理能力。

02、原理說明

不同于 JAVA,Golang 作為靜態編譯型語言,它在編譯時直接將源代碼轉換為機器碼,不依賴于虛擬機,也不具有字節碼。這種方式雖然無法屏蔽底層操作系統,但是由于可以直接在硬件上運行,會具有更高的性能。

我們通過 Go Build 工具原生提供的 -toolexec 機制,在編譯期進行代碼劫持,對特定 Go SDK 進行埋點注入來實現代碼增強(如框架 SDK、Go 內置 runtime、net/http 包等),從而使微服務應用具備了治理能力。

圖片

  1. Compile Front:在編譯過程中,我們通過 dry run 機制和抽象語法樹解析每個待編譯 .go 文件,通過 module + path + receive type name + function name 可以唯一識別一個方法,從而能夠判斷出該方法是否需要進行代碼增強和埋點注入。
  2. Code Inject:判斷出當前方法需要進行注入時,會在對該文件進行編譯之前,通過修改語法樹,插入預定義好的代碼,隨后編譯生成 .a 文件。
  3. Compile Backend:編譯器繼續執行原有編譯流程,最終生成二進制可執行文件,里面包含了服務治理邏輯。

編譯時注入框架現已開源,歡迎參與社區討論和貢獻,詳情請點擊 opentelemetry-go-auto-instrumentation[1]

03、接入并治理 Go 應用

為了更直觀的展示如何進行 Go 應用的微服務治理,接下來我們將通過一個 Demo,演示 Go 應用從接入到使用微服務治理并生效的全過程。

3.1 Demo 服務說明

Demo 服務部署在阿里云 ACK 集群中,調用順序為網關->A->B->C。其中網關采用阿里云 MSE 云原生網關,應用間調用方式為 http、服務發現方式采用 K8s 標準的 CoreDNS,應用 A、C 各部署了一個灰度版本,用于某需求迭代發布過程中的灰度驗證。

Demo 服務的實現源代碼請詳見 mse-go-demo/multiframe[2]

應用名稱

語言及版本

微服務框架及版本

Client 調用方式

服務發現方式

A

go 1.20

gin 1.8.1

http

CoreDNS

B

go 1.19

kratos 2.7.1

http

CoreDNS

C

go 1.19

go-zero 1.5.1

/

CoreDNS

圖片


3.2 接入 MSE 服務治理中心

一個 Go 應用接入 MSE 服務治理中心,只需執行以下四步即可,其中步驟 1、2 只需首次接入時執行,后續無需再操作。

1. 在 MSE 服務治理中心中,為 ACK 集群一鍵安裝 ACK-Onepilot 組件

圖片

2. 在 MSE 服務治理中心中,為 ACK 集群一鍵開啟高階治理能力

圖片

3. 下載并使用我們提供的 Instgo 工具編譯 Go 應用,來代替 go build 命令,生成二進制可執行文件

# 生成當前操作系統可執行文件
./instgo build --mse --licenseKey="{licenseKey}"


# 交叉編譯,例如在MacOS中生成linux操作系統可執行文件
#amd
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 ./instgo build --mse --licenseKey="{licenseKey}"
#arm
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 ./instgo build --mse --licenseKey="{licenseKey}"

4. 將應用打包成鏡像之后,部署到集群之前,在相應的 Deployment YAML 文件中 spec.template.metadata.labels 中添加以下標簽后,部署應用即可完成接入

spec:
  template:
    metadata:
      labels:
        # required 
        msePilotAutoEnable: "on" #標識開啟MSE微服務治理
        mseNamespace: your-namespace #標識應用所屬微服務治理空間
        msePilotCreateAppName: "your-app-name" #標識應用名稱
        aliyun.com/app-language: golang #標識為Golang應用
        # optional
        alicloud.service.tag: pod-tag #在全鏈路灰度中,用于標識灰度節點,如gray、blue...

可以看到,整個接入過程中不會涉及到業務代碼的修改,相比自主魔改框架、手動引入 SDK 埋點等方式,更加清爽和簡潔。

關于上述各步驟更詳細的指引和說明請詳見 ACK 微服務應用接入 MSE 治理中心(Golang 版)[3]

3.3 使用服務治理能力

按照 3.2 所述步驟完成應用接入后,即可在 MSE 治理中心控制臺中看到具體的應用及服務信息,并且進行相應的服務治理規則配置。本節將從應用觀測與管理、流量治理、全鏈路灰度三個常見治理場景,演示操作過程與實際效果。

3.3.1 應用觀測與管理

將 3.1 中所述 Demo 的 A、B、C 三個 Go 應用接入到 MSE 治理中心,并設置:

  • mseNamespace=mse-go-agent-demo
  • 應用 A 的 msePilotCreateAppName=go-gin-demo-a
  • 應用 B 的 msePilotCreateAppName=go-kratos-demo-b
  • 應用 C 的 msePilotCreateAppName=go-zero-demo-c

接入完成后,可以在 MSE 治理中心 mse-go-agent-demo namespace 下看到對應的應用詳情。

3.3.1.1 服務信息查看

進入 MSE 服務治理中心,點擊服務查詢,可以查看服務信息,包括應用內創建的 http 或 rpc 服務,以及對應服務的元信息,如接口元信息、服務元信息等。

在左上角分別選擇 Gin、Kratos 和 Go-zero 框架,可以分別看到 A、B、C 應用的服務信息。由于我們在編碼實現時,分別為應用 B 和 C 各創建了一個 Http Server、一個 Grpc Server,用于接收不同類型的請求,因此可以在控制臺中看到兩個服務。

圖片

圖片

圖片

點擊相應的服務,能夠看到服務的詳細元信息,以應用 B 為例,以下為 B 應用的 Http 服務和 Grpc 服務信息。

圖片

圖片

3.3.1.2 應用信息查看

進入 MSE 服務治理中心,點擊應用治理,能夠從應用、接口、節點等不同維度查看應用的運行數據以及系統數據。

在應用列表處,可以看到不同應用的節點數、標簽數、請求數、QPS 等數據。

圖片

點擊對應應用卡片,即可從不同維度查看應用更詳細的信息,包括應用整體數據、接口數據、節點數據等。

1)應用概覽數據

圖片

2)接口數據

圖片

3)節點數據

圖片

3.3.2 流量治理

目前,我們提供了以下流量治理能力,支持用戶自主配置并應對不同的場景,同時支持通過控制臺配置規則快速啟停:

  • 接口流控:設置單接口最大 QPS,超過閾值的請求將會被拒絕或進入等待隊列。
  • 并發隔離:設置單接口的最大并發協程數,超過閾值的請求將會被拒絕。
  • 熔斷:設置接口的熔斷防護規則,閾值可以設置為慢調用比例或者失敗率,達到閾值后會觸發熔斷,在熔斷時長內,該接口的請求都會快速失敗,熔斷狀態結束后通過單次探測或漸進式策略恢復。
  • 熱點參數防護:相比接口流控,防護的規則精細到參數級別,例如可以設置某接口第 N 個參數占用最大并發資源數不超過 10,如果超過閾值則對應的請求會快速失敗。
  • 行為降級:觸發接口流控后,可以自定義防護行為,例如返回指定狀態碼和內容、重定向等。
  • 自適應過載保護:以 CPU 使用率作為衡量實例負載的依據,自適應地調整對入口流量的防護策略,避免因 CPU 資源打滿導致服務崩潰。
3.3.2.1 規則配置

以應用 A 為例,假設我們希望為接口 /greet1a 設置單機 QPS 閾值為 1 的接口流控規則,如果達到閾值之后立即失敗,并且返回 429 作為 Http 狀態碼,返回內容為"Too Many Request! The Server A will not process!"。

為了達到以上效果,可以直接在 MSE 治理中心配置如下:

1. 點擊應用治理,點擊 go-gin-demo-a 應用卡片,點擊流量治理

圖片

2. 點擊流量防護-行為管理,點擊新增行為,按下圖所示配置行為后,點擊新建

圖片

3. 點擊流量防護-接口流控,按下圖所示步驟配置流控防護規則,然后點擊新增

圖片

圖片

圖片

4. 在規則列表處,點擊規則狀態置為開啟后,規則即生效

圖片

3.3.2.2 結果觀測

持續一段時間后,可以看到應用 A 單節點通過的 QPS 穩定在 1,超過閾值的請求已經被拒絕;應用 B 的 QPS 穩定為 2,這是因為應用 A 一共有 2 個節點,最多允許通過的 QPS 為 2。

1)應用 A 單節點 QPS 數據

圖片

2)應用 B 整體 QPS 數據

圖片

使用云原生網關對應用 A/greet1a 發起調用,可以觀察到由于觸發了流控,接口返回了我們剛剛定義的錯誤狀態碼和內容。

圖片

3.3.3 全鏈路灰度

3.3.3.1 規則配置

假設在某次需求迭代中,我們變更了應用 A 和應用 C 的部分邏輯,并且希望通過灰度發布的方式測試并驗證功能的正確性,希望 Header 內容中 x-user-uuid=123456789 的請求路由到灰度節點,其他請求仍然路由到常規節點。

為了達到以上效果,我們可以按照以下步驟進行操作和配置:

  1. 為應用 A 和應用 C 部署灰度節點,通過在 YAML 文件中 spec.template.metatada.labels 增加 alicloud.servicetag=gray 標識節點類型。
  2. 進入 MSE 治理中心,點擊全鏈路灰度,創建泳道組,泳道組主要用于業務模塊隔離,例如,同部門下業務小組 A 可以創建并使用泳道組 a,業務小組 B 可以創建并使用泳道組 b,兩者相互隔離,互不干擾。
  3. 在泳道組內創建標簽為 gray 的灰度泳道,如下圖所示填寫泳道信息、配置基線路由和灰度規則。

圖片

圖片

圖片

泳道組及泳道創建完成后,全鏈路灰度的配置就已經完成,如下圖所示,泳道組的流量入口為 MSE 云原生網關,接下來我們通過對應的網關發起請求,Demo 應用中的業務返回結果打印了請求的調用鏈以及每一跳所路由到的節點標簽和 IP,用于方便觀察調用鏈路。

圖片

3.3.3.2 結果觀測

1)設置請求 Header 中無 x-user-uuid,請求均路由到基線節點

圖片

2)設置請求 Header x-user-uuid=1,請求均路由到基線節點

圖片

3)設置請求 Header x-user-uuid=123456789,請求路由到 A、C 的灰度節點,由于應用 B 不存在灰度節點,因此路由到基線節點

圖片

由此,我們驗證了全鏈路灰度規則配置已經生效。

本文鏈接:

[1] opentelemetry-go-auto-instrumentation

https://github.com/alibaba/opentelemetry-go-auto-instrumentation

[2] mse-go-demo/multiframe

https://github.com/aliyun/alibabacloud-microservice-demo/tree/master/mse-go-demo/multiframe

[3] ACK 微服務應用接入 MSE 治理中心(Golang 版)

https://help.aliyun.com/zh/mse/getting-started/ack-microservice-application-access-mse-governance-center-golang-version

相關鏈接:

[1] Go 應用治理接入指引

https://help.aliyun.com/zh/mse/getting-started/ack-microservice-application-access-mse-governance-center-golang-version

[2] Go 應用治理兼容性要求與功能說明

https://help.aliyun.com/zh/mse/product-overview/golang-application-governance-compatibility-requirements-and-function-description

[3] 15 分鐘快速體驗 Go 應用服務治理

https://help.aliyun.com/zh/mse/getting-started/15-minutes-to-complete-the-rapid-experience-of-service-governance-capabilities-golang-version

責任編輯:龐桂玉 來源: 阿里云云原生
相關推薦

2022-11-09 09:15:31

ProtoBufGo語言

2022-04-14 07:57:52

Python代碼熱力圖

2022-08-25 06:42:00

飛書GCD 隊列啟動優化

2016-12-02 08:53:18

Python一行代碼

2018-01-02 09:26:28

Ubuntuzzupdate版本升級

2015-03-20 14:51:09

Testin云測

2019-10-26 13:59:35

PythonRFM模型數據

2021-06-09 08:50:39

C語言關機代碼復雜代碼解讀

2014-02-12 13:43:50

代碼并行任務

2022-04-09 09:11:33

Python

2017-04-05 11:10:23

Javascript代碼前端

2024-06-07 14:54:55

2021-12-29 09:34:49

Log4j漏洞代碼

2021-11-11 23:02:16

電腦垃圾軟件

2017-04-13 19:20:18

Python代碼并行任務

2021-08-31 09:49:37

CPU執行語言

2020-08-19 10:30:25

代碼Python多線程

2021-11-02 16:25:41

Python代碼技巧

2020-09-09 16:00:22

Linux進程

2020-08-11 07:40:37

數組數據存儲
點贊
收藏

51CTO技術棧公眾號

久久久久久久久久久久久久久久久久 | 欧美日韩另类一区| 国产激情偷乱视频一区二区三区| 国产探花一区二区| 日韩成人一区| 影音先锋另类| 黄色国产网站在线观看| 日韩精品免费播放| 视频在线精品一区| 精品午夜一区二区三区| 欧洲s码亚洲m码精品一区| 日韩视频第一页| 亚洲精品一区二区三区不| 在线成人免费视频| 一本色道a无线码一区v| 亚洲一区二区综合| 欧美激情综合五月色丁香| 99re视频精品| 日韩欧洲国产| 不卡一区视频| 日韩一区二区三区免费视频| 成人在线爆射| 欧美人与性动交α欧美精品济南到| 在线国产情侣| 中文字幕在线官网| 亚洲www.| 色播一区二区| 少妇精品在线| 精品国产欧美日韩| 日韩欧美伦理| 婷婷中文字幕一区| 久久av最新网址| 日韩在线观看一区二区| 国产做a爰片久久毛片| 激情av综合网| 99精品视频中文字幕| 久久久久国产一区二区三区四区| 欧美国产欧美亚州国产日韩mv天天看完整| 久久尤物电影视频在线观看| 亚洲一区二区三区在线观看视频| 欧美高清一区二区| 亚洲日本欧美在线| 日韩亚洲欧美一区二区| 自拍偷拍 国产| 在线人体午夜视频| 性欧美1819sex性高清大胸| 成人日韩在线| 成人一区不卡| 国产乱子伦视频一区二区三区| 久久久国产综合精品女国产盗摄| 五月天欧美精品| 亚洲国产精品专区久久| 最近2019好看的中文字幕免费| 国产精品自拍偷拍视频| 精品一区二区三区电影| 国产成人综合久久| 国产日产欧美一区二区| 情趣网站视频在线观看| www在线看| 久久综合成人| 波多野结衣中文一区| 欧美精品免费视频| 97av视频在线| 永久域名在线精品| 一二三区在线| 国产免费区一区二区三视频免费| 黑人一区二区| 国产精品不卡视频| 亚洲一区第一页| 国产一级二级三级精品| 日本三级黄色网址| 不卡av免费观看| 亚洲一级高清| 性久久久久久久久久久久 | 色婷婷一区二区| 欧美尺度大的性做爰视频| 日本精品视频一区| 性感av在线播放| 任你弄精品视频免费观看| 午夜dj在线观看高清视频完整版| 深爱激情久久| 欧美hd在线| 中文字幕在线不卡国产视频| xx视频.9999.com| 天天爱天天做天天操| 色av手机在线| 日日摸夜夜添夜夜添国产精品| 欧美日韩国产综合新一区 | 欧美一级高清片在线观看| 91视频99| 日韩黄色影片| 夜夜春成人影院| 亚洲欧洲99久久| 欧美激情久久久| 日韩精品视频一区二区在线观看| 在线成人视屏| 成人午夜看片网址| 精品国产一区久久久| 大肉大捧一进一出好爽视频| 99国内精品久久久久| 国产精品久久久久三级| 九九热这里只有精品免费看| 日韩欧美精品在线观看视频| 日韩欧美中文在线观看| 国产欧美综合色| 热久久免费视频精品| 中文字幕2018| 激情欧美日韩一区| 欧美成人a视频| 亚洲砖区区免费| 成人精品动漫一区二区三区| 亚洲一区二区三区激情| 亚洲xxxx视频| 一本大道色婷婷在线| 97精品久久久午夜一区二区三区| 久久久中文字幕| 桃乃木香奈av在线| 一区二区毛片| 这里精品视频免费| 国产va在线| 精品成人一区| 国产一区二区三区视频免费| 国产真实伦在线观看| 久久久久久影院| 精品国产三级电影在线观看| 欧美肥婆姓交大片| 午夜丝袜av电影| 久久精品观看| 久久久国产精彩视频美女艺术照福利| 美女做a视频| av网站在线免费| 久久久美女艺术照精彩视频福利播放 | 国产亚洲视频中文字幕视频| 麻豆av在线| 国产高清视频一区| 国产成人福利视频| 免费不卡av| 亚洲免费成人av| 你真棒插曲来救救我在线观看| 国产成人1区| 久久久精品网站| 国产黄色在线播放| 欧美国产精品一区二区| 人人妻人人澡人人爽精品欧美一区| 香蕉久久夜色精品国产使用方法 | 天天操综合520| 亚洲精品久久久一区二区三区 | 都市激情亚洲综合| 欧美午夜精品久久久久久浪潮 | caoporn视频在线| 天天综合日日夜夜精品| 日韩在线免费视频观看| 黄色网页在线播放| 精品国产31久久久久久| 香蕉视频禁止18| 麻豆91在线观看| 国产精品一区二区a| 蜜桃国内精品久久久久软件9| 欧美成人合集magnet| av影院在线免费观看| 91精品国模一区二区三区| 最近中文字幕mv免费高清在线| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲国产午夜伦理片大全在线观看网站 | 欧美性大战久久久久久久蜜臀| 国产欧美精品一区二区三区-老狼| 波多野结衣精品久久| 伊人久久99| 欧美69xxx| 国产精品hd| 51午夜精品国产| 欧美成人黑人猛交| 免费精品国产| 色先锋久久av资源部| 国产精品777| 特黄aaaaaaaaa毛片免费视频| 一区二区三区高清在线观看| 国产精品视频看| 欧美尺度大的性做爰视频| 韩国中文字幕av| 国产一区二区三区黄网站| 中文字幕在线不卡一区| 久久久久高清| 波多野结衣欧美| 亚洲国产精品久久91精品| 蜜桃视频网站www| 黄色亚洲大片免费在线观看| 欧美壮男野外gaytube| 91福利免费| 国产91丝袜在线观看| 激情偷乱视频一区二区三区| 久久蜜桃一区二区| 亚洲国产精品影院| 日韩精品一区二区三区视频在线观看| 久久精品中文字幕免费mv| 国产在线播放91| 人人妻人人澡人人爽欧美一区| caoporen人人| 成人一级福利| 日韩片欧美片|