微服務(wù)架構(gòu)實施原理詳解
作者:風中程序猿



動態(tài)路由:動態(tài)的將請求路由到所需要的后端服務(wù)集群。雖然內(nèi)部是復(fù)雜的分布式微服務(wù)網(wǎng)狀結(jié)構(gòu),但是外部系統(tǒng)從網(wǎng)關(guān)看就像是一個整體服務(wù),網(wǎng)關(guān)屏蔽了后端服務(wù)的復(fù)雜性。
限流和容錯:為每種類型的請求分配容量,當請求數(shù)量超過閥值時拋掉外部請求,限制流量,保護后臺服務(wù)不被大流量沖垮;黨內(nèi)部服務(wù)出現(xiàn)故障時直接在邊界創(chuàng)建一些響應(yīng),集中做容錯處理,而不是將請求轉(zhuǎn)發(fā)到內(nèi)部集群,保證用戶良好的體驗。
身份認證和安全性控制:對每個外部請求進行用戶認證,拒絕沒有通過認證的請求,還能通過訪問模式分析,實現(xiàn)反爬蟲功能。
監(jiān)控:網(wǎng)關(guān)可以收集有意義的數(shù)據(jù)和統(tǒng)計,為后臺服務(wù)優(yōu)化提供數(shù)據(jù)支持。
訪問日志:網(wǎng)關(guān)可以收集訪問日志信息,比如訪問的是哪個服務(wù)?處理過程(出現(xiàn)什么異常)和結(jié)果?花費多少時間?通過分析日志內(nèi)容,對后臺系統(tǒng)做進一步優(yōu)化。
我們采用Spring Cloud Netflix框架的開源組件Zuul來實現(xiàn)網(wǎng)關(guān)服務(wù)。Zuul使用一系列不同類型的過濾器(Filter),通過重寫過濾器,使我們能夠靈活的實現(xiàn)網(wǎng)關(guān)(GateWay)的各種功能。



熔斷模式:熔斷模式原理類似于電路熔斷器,當電路發(fā)生短路時,熔斷器熔斷,保護電路避免遭受災(zāi)難性損失。當服務(wù)異常或者大量延時,滿足熔斷條件時服務(wù)調(diào)用方會主動啟動熔斷,執(zhí)行fallback邏輯直接返回,不會繼續(xù)調(diào)用服務(wù)進一步拖垮系統(tǒng)。熔斷器默認配置服務(wù)調(diào)用錯誤率閥值為50%,超過閥值將自動啟動熔斷模式。服務(wù)隔離一段時間以后,熔斷器會進入半熔斷狀態(tài),即允許少量請求進行嘗試,如果仍然調(diào)用失敗,則回到熔斷狀態(tài),如果調(diào)用成功,則關(guān)閉熔斷模式。
隔離模式:Hystrix默認采用線程隔離,不同的服務(wù)使用不同的線程池,彼此之間不受影響,當一個服務(wù)出現(xiàn)故障耗盡它的線程池資源,其他的服務(wù)正常運行不受影響,達到隔離的效果。例如我們通過andThreadPoolKey配置某個服務(wù)使用命名為TestThreadPool的線程池,實現(xiàn)與其他命名的線程池隔離。
回退(fallback):fallback機制其實是一種服務(wù)故障時的容錯方式,原理類似Java中的異常處理。只需要繼承HystixCommand并重寫getFallBack()方法,在此方法中編寫處理邏輯,比如可以直接拋異常(快速失敗),可以返回空值或缺省值,也可以返回備份數(shù)據(jù)等。當服務(wù)調(diào)用出現(xiàn)異常時,會轉(zhuǎn)向執(zhí)行g(shù)etFallBack()。有以下幾種情況會觸發(fā)fallback:
程序拋出非HystrixBadRequestExcepption異常,當拋出HystrixBadRequestExcepption異常時,調(diào)用程序可以捕獲異常,沒有觸發(fā)fallback,當拋出其他異常時,會觸發(fā)fallback;
程序運行超時;
熔斷啟動;
線程池已滿。
限流:限流是指對服務(wù)的并發(fā)訪問量進行限制,設(shè)置單位時間內(nèi)的并發(fā)數(shù),超出限制的請求拒絕并fallback,防止后臺服務(wù)被沖垮。

大家一起在評論區(qū)聊聊唄~
