您好,登錄后才能下訂單哦!
這篇“Go chassis云原生微服務開發框架怎么應用”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Go chassis云原生微服務開發框架怎么應用”文章吧。
go chassis是一個go語言微服務開發框架,專注于云原生應用的開發主要的使用場景是云服務開發。go chassis將云服務開發過程中沉淀的能力融入到了開發框架中,以幫助開發團隊快速編寫云原生應用。
公司開發云服務,要構建健壯,韌性,安全,高可靠的云服務,必然有大量基礎能力需要編寫,為了加速開發,我們將這些能力便沉淀在了該框架中。為什么呢?
我們希望加速每一個組件也就是微服務的開發速度。有的人看到的只是冰山一角,真的要達成微服務架構模式的愿景,其實需要繁重的工作量。就像冰山那樣,我們要將通用能力沉淀下去,能夠復用。如果讓各個業務團隊同時照顧冰山上下,各自開發各自的,那結果將是災難性的,企業用人成本極高。
在業務交付的過程中,各個云團隊有大量的管理服務需要對接,每個團隊都在寫重復的代碼,通過框架能力,將交付職責分離,減少開發成本:
我們使用Invocation概念來統一協議描述,當協議請求到來后,go chassis會把request轉換為Invocation進行治理(如負載均衡,限流,熔斷,重試,金絲雀發布等),這樣就可以允許任意的協議接入到go chassis,并無縫使用go chassis提供的核心功能,當前默認提供原生grpc和http兩種協議的接入。
為什么會有這樣的設計呢?
每個協議層的優化空間非常大,用戶態到內核態的調用速度本來就相對內部代碼來說是很慢的,優化這一層代碼很重要,RPC怎么也比http來得好。
不同部門可能有私有協議訴求,那么服務治理就交給核心框架完成。協議由業務部門決定自主研發或是集成現有協議。當你發現公司內部不同部門都在開發自己的協議做自己的服務治理時,再向將業務統一一個架構,一個工具鏈上,將非常困難。
我們以Java為例,大家在寫一個攔截器或者過濾器的時候可以對請求進行處理,處理完,這個攔截器的的執行過程就結束了,那么如何達成以下目標?
1.跟蹤業務執行結果指標,比如http狀態碼,并導出他們讓prometheus收集。
2.跟蹤關鍵的業務執行結果,審計這些信息。比如請求返回的一些結果信息
3.分布式調用鏈追蹤,end span必須等到請求返回才能拿到。
客戶端調用遠程服務時,也需要進行中間處理,比如客戶端負載均衡,請求重試,這些不能夠耦合在業務代碼中
Java的答案很簡單,注解。那么go呢?
我們引入了handler chain編程模型,chain中每個handler都可以拿到后面的handler的執行結果,包括業務代碼的執行結果。
看下接口定義
type Handler interface { Handle(*Chain, *invocation.Invocation, invocation.ResponseCallBack) Name() string }
// ResponseCallBack process invocation response type ResponseCallBack func(*Response)
ResponseCallBack用于接受后置handler返回的結果,所以每一個handler處理時都可以按需定義自己的ResponseCallBack來獲取后面handler甚至是業務邏輯代碼的執行結果。幫助通用邏輯(即中間件)和業務邏輯徹底解耦。可以看下現在已經支持的中間件,無論限流,熔斷,負載均衡,認證鑒權,審計,我們都用此機制實現:
go-chassis.readthedocs.io/en/latest/m…
將公司全部的工具鏈,服務治理手段,安全合規等都落入到處理鏈中,可快速加快研發速度,并統一規范,減少管理負擔。
只舉2個例子
減少讓開發者自己調用API的過程,將他們簡化為配置項
例如可觀察:
引入一行代碼
import _ github.com/go-chassis/go-chassis/v2/middleware/monitoring
加上配置
handler: chain: Provider: default: monitoring
就可以在服務端進行監控,導出請求數,延遲等指標,大大加速開發人員效率
# HELP request_count # TYPE request_count counter request_count{app="default",env="",instance="",service="servicecomb-kie",version="0.1.0"} 14 # HELP request_process_duration # TYPE request_process_duration summary request_process_duration{app="default",env="",instance="",service="servicecomb-kie",version="0.1.0",quantile="0.5"} 3 request_process_duration{app="default",env="",instance="",service="servicecomb-kie",version="0.1.0",quantile="0.9"} 80 request_process_duration{app="default",env="",instance="",service="servicecomb-kie",version="0.1.0",quantile="0.99"} 80 request_process_duration_sum{app="default",env="",instance="",service="servicecomb-kie",version="0.1.0"} 315 request_process_duration_count{app="default",env="",instance="",service="servicecomb-kie",version="0.1.0"} 14
需要自定義指標:
err := metrics.CreateCounter(metrics.CounterOpts{ Name: “user_login”, Labels: labelsSlice, }) metrics.CounterAdd(“user_login”, 1, labelMap)
公司對軟件質量的高要求,需要我們編寫大量的基礎代碼。我們也將通用的部分都落地到了框架中,通過簡單的配置文件啟用,不再需要不同團隊重復編寫代碼
servicecomb: transport: failure: rest: http_500,http_502 #統計錯誤率時,例如只把500和502作為錯誤 maxIdleCon: rest: 1024 maxBodyBytes: rest: 20 #只需要指定我的服務能接受的body體大小,訪問的超時時間即可不再需要各個團隊維護代碼。 maxHeaderBytes: rest: 1 #限制http header大小 timeout: #限制客戶端超時 rest: 30s
以上就是關于“Go chassis云原生微服務開發框架怎么應用”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。