Go 開源說第九期:go chassis——微服務(wù)開發(fā)框架
點(diǎn)擊藍(lán)字
關(guān)注我們
本文由“GO開源說”第九期 《go chassis——微服務(wù)開發(fā)框架》直播內(nèi)容修改整理而成,視頻內(nèi)容較長,本文內(nèi)容有所刪減和重構(gòu)。
在2020年上海Gopher?會(huì)上,我分享了主題“華為云的Go語?云原?實(shí)踐”。其中講述了我們使?Go語?構(gòu)建云服務(wù)的經(jīng)驗(yàn),并講述了Go chassis的理念和設(shè)計(jì)。本次開源說,我將講述它的設(shè)計(jì)與思考,以及我們?cè)谖⒎?wù)落地中的經(jīng)驗(yàn)和踩坑。更加具體的信息請(qǐng)觀看直播
我將簡單的回顧下?會(huì)的內(nèi)容并講述今天的主題
Go chassis的誕?背景
規(guī)劃范:規(guī)范化的框架可以在微服務(wù)架構(gòu)下落地通?能?
成本:云服務(wù)資源占?成本降低
異構(gòu)服務(wù):?個(gè)后臺(tái)服務(wù)可能有多種具體實(shí)現(xiàn)
基線化需求:提供通?能?,引?即?效,?需編碼

圖中最上邊的部分為?于管控的服務(wù),中間是微服務(wù)框架主要處理的部分,也就是系統(tǒng)內(nèi)部東?向的流量。業(yè)務(wù)流量都要經(jīng)過這?,通過管控服務(wù)進(jìn)?微服務(wù)的管理。最下邊的部分是插件化的組件,插件接?規(guī)范內(nèi)置在框架中,通過import?式顯示引?插件。
設(shè)計(jì)上的考慮
什么是個(gè)好的微服務(wù)開發(fā)框架,應(yīng)該是在最?化業(yè)務(wù)適配量和學(xué)習(xí)曲線為前提下,最?化的提升?個(gè)團(tuán)隊(duì)的?產(chǎn)效率和交付的服務(wù)質(zhì)量
面向故障的注冊(cè)發(fā)現(xiàn)設(shè)計(jì)
中?化的服務(wù)總是?臨的穩(wěn)定性的挑戰(zhàn),看似簡單的注冊(cè)發(fā)現(xiàn),其實(shí)有著很多的設(shè)計(jì)考慮,也經(jīng)過了?量的現(xiàn)?考驗(yàn)。注冊(cè)中?實(shí)際上?臨的是注冊(cè),?跳,發(fā)現(xiàn)3種不同的流量。隨著微服務(wù)實(shí)例的增多,流量增加?然?臨了很多問題。所以在做這??設(shè)計(jì)和編寫代碼時(shí),應(yīng)該?向故障去思考。
?如:
使?避讓算法進(jìn)?重試 -- 避免調(diào)??暴
中?斷服不影響業(yè)務(wù)系統(tǒng) -- 保證業(yè)務(wù)不斷服
只拉取??關(guān)?的服務(wù) -- 減少數(shù)據(jù)量,即減少c/s兩端的cpu和內(nèi)存壓?
不可變實(shí)例ID -- 避免負(fù)載均衡不均勻
本地緩存設(shè)計(jì)

通過緩存可以應(yīng)對(duì)中?斷服,另外完全中?的API設(shè)計(jì),可以允許任意注冊(cè)中?的接?,?如Consul,Eureka,Service Center。開放性的緩存API也允許你隨時(shí)訪問,開發(fā)定制特性
通信協(xié)議中立設(shè)計(jì)

?論是http還是grpc,在框架內(nèi)核處理的過程中都會(huì)被標(biāo)準(zhǔn)化為Invocation統(tǒng)?模型,路由管理,調(diào)?鏈跟蹤,限流等能?都基于該模型進(jìn)?開發(fā),這樣當(dāng)你要進(jìn)?定制協(xié)議時(shí),就可以復(fù)?同?份邏輯,?在?絡(luò)中傳輸?shù)倪^程中依然是原?的協(xié)議,所以和其他?態(tài)的集成也是開放性的,不存在任何私有協(xié)議在?絡(luò)上傳輸。
路由管理設(shè)計(jì)

有了注冊(cè)發(fā)現(xiàn),統(tǒng)?緩存,協(xié)議中?的設(shè)計(jì),我們就能設(shè)計(jì)統(tǒng)?的路由管理能?。可以基于任意微服務(wù)元數(shù)據(jù)定義路由規(guī)則來實(shí)現(xiàn)?絲雀發(fā)布,藍(lán)綠發(fā)布等能?。?路由的配置可以來?不同的數(shù)據(jù)源,?持?jǐn)U展,這部分能?有g(shù)o-archaius提供
盡量兼容原本的編程模型
我們提到學(xué)習(xí)成本,所以要盡量復(fù)?已知的知識(shí)

曾經(jīng)踩過熔斷的坑
https://juejin.im/post/5bd4169c6fb9a05cf9087a5c
忠告所有使?熔斷和降級(jí)功能的朋友,使?之前要思考清楚,充分的進(jìn)?測試
可觀察性
只需要引?go chassis,他就會(huì)?動(dòng)幫你導(dǎo)出符合prometheus標(biāo)準(zhǔn)的數(shù)據(jù),以便于接?到現(xiàn)有的監(jiān)控系統(tǒng)中,以下是?些數(shù)據(jù),供參考,?如錯(cuò)誤數(shù),請(qǐng)求數(shù),延遲,業(yè)務(wù)處理時(shí)?等

微服務(wù)框架和服務(wù)網(wǎng)格選擇困難?
服務(wù)網(wǎng)格是下一代微服務(wù)?
應(yīng)該共同使?么?
?選?怎么選?
我的業(yè)務(wù)到底適合哪種?案?
從我的實(shí)踐經(jīng)驗(yàn)來看,其實(shí)沒有真正的銀彈,所以微服務(wù)框架和服務(wù)?格只會(huì)?期共存,所以我們才會(huì)?研mesher作為go chassis和spring cloud的補(bǔ)充。
這就像是單體架構(gòu)還將永存?樣,存在是有他的合理性的。詳細(xì)的介紹請(qǐng)觀看直播。
歡迎關(guān)注個(gè)?公眾號(hào):
— 往期回顧 —
Go 開源說第七期:Harbor助你玩轉(zhuǎn)云原生

Go 開源說第五期:MOSN Go語言網(wǎng)絡(luò)代理軟件

Go 開源說第四期(下):go-zero緩存管理最佳實(shí)踐


?? 各位Gopher們,注意啦!
別忘了還有 Gopher China2021 大會(huì)
還沒報(bào)名的童鞋們趕快抓住最后的機(jī)會(huì)!!!

