如何提高微服務(wù)的幸福感?
點擊“開發(fā)者技術(shù)前線”,選擇“星標(biāo)??”
在看|星標(biāo)|留言,? 真愛
Photo?@??Andreas Weiland
回復(fù)“手冊”,獲取一份技術(shù)人全套技術(shù)手冊
?文? |?亦盞
前言
隨著微服務(wù)的流行,越來越多公司使用了微服務(wù)框架,微服務(wù)以其高內(nèi)聚、低耦合等特性,提供了更好的容錯性,也更適應(yīng)業(yè)務(wù)的快速迭代,為開發(fā)人員帶來了很多的便利性。但是隨著業(yè)務(wù)的發(fā)展,微服務(wù)拆分越來越復(fù)雜,微服務(wù)的治理也成了一個比較令人頭疼的問題,我相信下面這些場景大家或多或少都遇到過。
上述場景還是在新版本沒有任何問題的情況下,如果新版本有問題,則會導(dǎo)致大量業(yè)務(wù)直接請求到有問題的新版本,輕則修復(fù)數(shù)據(jù),重則嚴(yán)重影響用戶體驗,甚至產(chǎn)生資損。最后不得不每次發(fā)版都安排在凌晨兩三點發(fā)布,心驚膽顫,睡眠不足,苦不可言。
但是這只是治標(biāo)不治本的方式,因為很難復(fù)現(xiàn)從而無法有效定位,可能明天又被吵醒,繼續(xù)重啟。上述場景還是建立在報警系統(tǒng)比較完善的情況下,如果沒有完善的報警系統(tǒng),嚴(yán)重情況可能整個業(yè)務(wù)系統(tǒng)都被單機(jī)異常拖垮。
“打擾了,還是業(yè)務(wù)重要,產(chǎn)品經(jīng)理給的需求還沒完成呢,剛剛說的場景也沒那么痛苦,不就幾個小問題嘛,真的沒事。”
為什么 EDAS 用戶可以輕松發(fā)布
傳統(tǒng)的發(fā)布流程真的很容易出錯
傳統(tǒng)的發(fā)布流程中,服務(wù)提供者停止再啟動,服務(wù)消費者感知到服務(wù)提供者節(jié)點停止的流程如下:

為什么 EDAS 用戶不需要修數(shù)據(jù)
當(dāng)您的應(yīng)用部署到 EDAS 之后,EDAS 的無損下線功能會自動在發(fā)布新版本的時候做如下的增強(qiáng),我們主要關(guān)注綠色部分的信息:

金絲雀發(fā)布為 EDAS 用戶再加一重保障
在普通的新版本發(fā)布場景中,默認(rèn)情況下請求到各個節(jié)點的流量是均勻分布的。
假設(shè)服務(wù)提供者有 4 臺,只要某個節(jié)點一發(fā)布新版本,就會有 25% 的流量打到新版本。如果新版本存在問題,就會影響線上 25% 的流量,輕則修復(fù)數(shù)據(jù),重則嚴(yán)重影響用戶體驗,甚至產(chǎn)生資損。

EDAS 提供的金絲雀發(fā)布功能,支持 EDAS 用戶在發(fā)布新版本之前就提前配置好金絲雀規(guī)則,使得只有符合流量特征的流量會調(diào)用到新版本,從而可以精準(zhǔn)地控制調(diào)用到新版本的流量,進(jìn)行新版本驗證。

如圖所示,EDAS 的用戶可以在發(fā)布之前配置好金絲雀規(guī)則。
這里以 Dubbo 為例,下圖中配置表明 調(diào)用?
com.alibaba.edas.demo.EchoService.echo(String string) 的流量中,只有參數(shù)為 "helloworld" 的流量才會被路由到新版本。

在服務(wù)提供者的將服務(wù)注冊到注冊中心前,EDAS 已經(jīng)將新版本對應(yīng)的金絲雀規(guī)則推送到服務(wù)消費者端。服務(wù)消費者在調(diào)用的時候,會根據(jù)金絲雀規(guī)則對流量進(jìn)行分析,并與服務(wù)提供者列表中的元數(shù)據(jù)進(jìn)行比對,選擇正確的調(diào)用地址。
除了上圖中演示的簡單參數(shù)比對之外,EDAS 也支持解析更復(fù)雜的結(jié)構(gòu)體進(jìn)行規(guī)則配置。當(dāng)然,如果某個場景只需要控制流量百分比就能滿足需求,EDAS 用戶也可以直接按比例進(jìn)行灰度。
EDAS 金絲雀發(fā)布 將路由到新版本的流量,從所占總節(jié)點數(shù)的百分比轉(zhuǎn)變成了根據(jù)流量特征進(jìn)行控制。您可以自由地控制路由到新版本的流量,比如只將內(nèi)部測試賬號的流量路由到新版本,從而做到小心發(fā)布、大膽驗證。所以,趕緊來 EDAS 進(jìn)行輕松發(fā)布吧。
為什么 EDAS 用戶不需要半夜醒來重啟機(jī)器
在微服務(wù)架構(gòu)中,當(dāng)服務(wù)提供者的應(yīng)用實例出現(xiàn)異常時,服務(wù)消費者無法及時感知,會影響服務(wù)的正常調(diào)用,進(jìn)而影響消費者的服務(wù)性能甚至可用性。

在上圖的示例場景中,系統(tǒng)包含 4 個應(yīng)用,A、B、C 和 D,其中應(yīng)用 A 會分別調(diào)用應(yīng)用 B、C 和 D。當(dāng)應(yīng)用 B、C 或 D 的某些實例異常時(如圖中應(yīng)用 B、C 和 D 標(biāo)識的各有 1個和 2 個異常實例),如果應(yīng)用 A 無法感知,會導(dǎo)致部分調(diào)用失敗;如果業(yè)務(wù)代碼寫的不夠優(yōu)雅,有可能影響應(yīng)用 A 的性能甚至整個系統(tǒng)的可用性。
離群實例摘除給業(yè)務(wù)系統(tǒng)的穩(wěn)定性加把鎖
為了保護(hù)應(yīng)用的服務(wù)性能和可用性,EDAS 支持檢測應(yīng)用實例的可用性并進(jìn)行動態(tài)調(diào)整,以保證服務(wù)成功調(diào)用,從而提升業(yè)務(wù)的穩(wěn)定性和服務(wù)質(zhì)量。
如下圖所示,EDAS 用戶可以在控制臺上對應(yīng)用 A 進(jìn)行如下配置,從而保證 A 應(yīng)用的穩(wěn)定性。

為什么 EDAS 用戶對自己的服務(wù)胸有成竹
服務(wù)查詢一目了然
我們熟知的 zookeeper 組件并沒有服務(wù)查詢界面,Eureka 和 Nacos 這兩個注冊中心,雖然提供了網(wǎng)頁版的控制臺,但是在控制臺上只能查詢到服務(wù)的 IP 和 port 等基本的信息。
EDAS 用戶在使用服務(wù)查詢時,不僅能夠查詢到應(yīng)用注冊了哪些服務(wù),對應(yīng)的 IP 和 port 是什么,還能查詢到服務(wù)包含的具體方法和參數(shù)類型,以及直觀地看到服務(wù)被其他應(yīng)用和節(jié)點的訂閱情況。

即使部門組織再復(fù)雜、微服務(wù)模塊再多,EDAS 的用戶也可以清晰地查詢出服務(wù)的被調(diào)用情況,做到心中有數(shù),在梳理服務(wù)依賴以及評估影響面的時候可以做到胸有成竹。
精準(zhǔn)地控制服務(wù)調(diào)用的權(quán)限
業(yè)務(wù)發(fā)展后,服務(wù)還會遇到權(quán)限控制的需求。比如優(yōu)惠券部門的某個應(yīng)用,同時包含了優(yōu)惠券查詢接口 和優(yōu)惠券發(fā)放接口。對于優(yōu)惠券查詢接口來說,默認(rèn)公司內(nèi)部的所有應(yīng)用都有權(quán)限調(diào)用的;但優(yōu)惠券發(fā)放接口只有客服和運營部門的某些應(yīng)用才有權(quán)限調(diào)用。
如下圖所示,EDAS 用戶可以對自己的服務(wù)進(jìn)行權(quán)限管理,這里以 Dubbo 為例,下圖中配置表明,應(yīng)用 cartservice 發(fā)布的 com.alibaba.edas.demo.EchoService 服務(wù)的 addItemToCart 的方法,只允許 frontend 這個應(yīng)用調(diào)用。

除了支持對指定的接口添加鑒權(quán)規(guī)則之外,服務(wù)鑒權(quán)也支持對整個應(yīng)用添加鑒權(quán)規(guī)則,還支持根據(jù)調(diào)用方 IP 進(jìn)行鑒權(quán)。
精準(zhǔn)的權(quán)限管理,可以讓你更好地管理微服務(wù)調(diào)用的權(quán)限,保證業(yè)務(wù)的合規(guī)性,保障數(shù)據(jù)的安全。
EDAS 微服務(wù)治理使用成本真的很低
使用 EDAS 微服務(wù)治理的成本真的已經(jīng)低得不能再低,不需要修改任何代碼和配置,直接將應(yīng)用部署上來就可以享受完整的 EDAS 微服務(wù)治理能力。
只要你的應(yīng)用是基于 Spring Cloud 或 Dubbo 最近五年內(nèi)的版本開發(fā),就能直接使用完整的 ?EDAS 微服務(wù)治理能力,趕快來體驗吧!
肖京,花名:亦盞,阿里云智能技術(shù)專家,Spring Cloud Alibaba PMC 。主要負(fù)責(zé)阿里云微服務(wù)產(chǎn)品的研發(fā)工作,關(guān)注微服務(wù)、云原生等技術(shù)方向。
綜合考慮,Mybatis的優(yōu)點是簡單高效,優(yōu)化起來也方便,比較符合現(xiàn)在的開發(fā)節(jié)奏,現(xiàn)在的互聯(lián)網(wǎng)公司都是先快速開發(fā)占領(lǐng)市場,然后再優(yōu)化代碼。而且這個過程需求經(jīng)常是變來變?nèi)サ模_發(fā)人員也有流動性,這種情況下用Mybatis顯然更加適合。
END
前線推出學(xué)習(xí)交流群,加群一定要備注:研究/工作方向+地點+學(xué)校/公司+昵稱(如Java+上海+上交+可可),根據(jù)格式備注,可更快被通過且邀請進(jìn)群,領(lǐng)取一份專屬學(xué)習(xí)禮包 掃碼加我微信進(jìn)群,內(nèi)推和技術(shù)交流,大佬們零距離
歷史推薦
如何用 SQL 來查詢 Elasticsearch 中的數(shù)據(jù)? GitHub 開源!Facebook工程師出品了一份技術(shù)面試手冊,史上最全,標(biāo)星 3.2w! 最全的 Vue 跨平臺性能優(yōu)化指南出爐
