<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
go chassis是一個go語言微服務開發框架,專注於雲原生應用的開發主要的使用場景是雲服務開發。go chassis將雲服務開發過程中沉澱的能力融入到了開發框架中,以幫助開發團隊快速編寫雲原生應用。
本文介紹我們的設計理念和目標,為何go chassis會誕生。後面的系列文章會著重介紹使用方法,專案實戰。對於微服務架構模式,雲原生要素,為什麼選擇go語言等將不再贅述。
公司開發雲服務,要構建健壯,韌性,安全,高可靠的雲服務,必然有大量基礎能力需要編寫,為了加速開發,我們將這些能力便沉澱在了該框架中。為什麼呢?
我們希望加速每一個元件也就是微服務的開發速度。有的人看到的只是冰山一角,真的要達成微服務架構模式的願景,其實需要繁重的工作量。就像冰山那樣,我們要將通用能力沉澱下去,能夠複用。如果讓各個業務團隊同時照顧冰山上下,各自開發各自的,那結果將是災難性的,企業用人成本極高。
在業務交付的過程中,各個雲團隊有大量的管理服務需要對接,每個團隊都在寫重複的程式碼,通過框架能力,將交付職責分離,減少開發成本:
可以跟隨這個檔案體驗。
我們使用Invocation概念來統一協定描述,當協定請求到來後,go chassis會把request轉換為Invocation進行治理(如負載均衡,限流,熔斷,重試,金絲雀釋出等),這樣就可以允許任意的協定接入到go chassis,並無縫使用go chassis提供的核心功能,當前預設提供原生grpc和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的外掛理念。基本所有的重要元件都是外掛化的,框架已經定義好標準介面,只需要開發者實現好,註冊到框架中,就可以在組態檔中設定並生效了,業務開發者是完全不感知的。可以參考我們對quota元件的擴充套件過程,他負責資源的配額管理
go-chassis.readthedocs.io/en/latest/d…
後續將詳細剖析go chassis的內部設計和特性使用。
在下一篇文章中,我將講述go chassis如何快速開發出一個微服務。由於是系列文章,隨著文章不斷更新,如果有期望瞭解的話題,內容可以留言反饋,我會加入到後續文章中。
專案地址:
目前的使用者:
以上就是Go chassis雲原生微服務開發框架應用程式設計實戰的詳細內容,更多關於Go chassis雲原生微服務架構的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45