多版本支持
在Dubbo中配置不同版本的接口,會在zookeeper地址中有多個協(xié)議url的體現(xiàn),具體內(nèi)容如下:
dubbo%3A%2F%2F192.168.94.1%3A20880%2Fcom.yxk.IyxkHello%3Fanyhost%3Dtrue%26application%3Ddubbo-server%26dubbo%3D2.5.3%26interface%3Dcom.yxk.IyxkHello%26methods%3DsayHello%26owner%3Dyxk%26pid%3D4988%26revision%3D1.0.0%26side%3Dprovider%26timestamp%3D1536659809975%26version%3D1.0.0
dubbo%3A%2F%2F192.168.94.1%3A20880%2Fcom.yxk.IyxkHello2%3Fanyhost%3Dtrue%26application%3Ddubbo-server%26dubbo%3D2.5.3%26interface%3Dcom.yxk.IyxkHello%26methods%3DsayHello%26owner%3Dyxk%26pid%3D4988%26revision%3D1.0.1%26side%3Dprovider%26timestamp%3D1536659820796%26version%3D1.0.1
主機綁定
在發(fā)布一個Dubbo服務(wù)的時候衍腥,會生成一個dubbo://ip:port的協(xié)議地址适滓,那么這個IP是根據(jù)什么生成的呢?大家可以在ServiceConfig.java代碼中找到如下代碼;可以發(fā)現(xiàn)鲜滩,在生成綁定的主機的時候淋袖,會通過一層一層的判斷鸿市,直到獲取到合法的ip地址。
集群容錯
什么是容錯機制即碗?容錯機制指的是某種系統(tǒng)控制在一定范圍內(nèi)的一種允許或包容犯錯情況的發(fā)生焰情,舉個簡單例子,我們在電腦上運行一個程序剥懒,有時候會出現(xiàn)無響應(yīng)的情況内舟,然后系統(tǒng)會彈出一個提示框讓我們選擇,是立即結(jié)束還是繼續(xù)等待蕊肥,然后根據(jù)我們的選擇執(zhí)行對應(yīng)的操作谒获,這就是“容錯”蛤肌。
在分布式架構(gòu)下壁却,網(wǎng)絡(luò)、硬件裸准、應(yīng)用都可能發(fā)生故障展东,由于各個服務(wù)之間可能存在依賴關(guān)系,如果一條鏈路中的其中一個節(jié)點出現(xiàn)故障炒俱,將會導致雪崩效應(yīng)盐肃。為了減少某一個節(jié)點故障的影響范圍,所以我們才需要去構(gòu)建容錯服務(wù)权悟,來優(yōu)雅的處理這種中斷的響應(yīng)結(jié)果砸王。
Dubbo提供了6種容錯機制,分別如下
1. failsafe失敗安全峦阁,可以認為是把錯誤吞掉(記錄日志)
2. failover(默認)? ?重試其他服務(wù)器; retries(2)
3. failfast快速失敗, 失敗以后立馬報錯
4. failback? 失敗后自動恢復(fù)慷暂。
5. forking? forks.設(shè)置并行數(shù)
6. broadcast? 廣播定硝,任意一臺報錯,則執(zhí)行的方法報錯
配置方式如下撒会,通過cluster方式嘹朗,配置指定的容錯方案
服務(wù)降級
降級的目的是為了保證核心服務(wù)可用
降級可以有幾個層面的分類:自動降級和人工降級; 按照功能可以分為:讀服務(wù)降級和寫服務(wù)降級诵肛;
1.對一些非核心服務(wù)進行人工降級屹培,在大促之前通過降級開關(guān)關(guān)閉哪些推薦內(nèi)容、評價等對主流程沒有影響的功能
2.故障降級,比如調(diào)用的遠程服務(wù)掛了惫谤,網(wǎng)絡(luò)故障壁顶、或者RPC服務(wù)返回異常。 那么可以直接降級溜歪,降級的方案比如設(shè)置默認值若专、采用兜底數(shù)據(jù)(系統(tǒng)推薦的行為廣告掛了,可以提前準備靜態(tài)頁面做返回)等等
3.限流降級蝴猪,在秒殺這種流量比較集中并且流量特別大的情況下调衰,因為突發(fā)訪問量特別大可能會導致系統(tǒng)支撐不了。這個時候可以采用限流來限制訪問量自阱。當達到閥值時嚎莉,后續(xù)的請求被降級,比如進入排隊頁面沛豌,比如跳轉(zhuǎn)到錯誤頁(活動太火爆趋箩,稍后重試等)
dubbo的降級方式: Mock
實現(xiàn)步驟
1.在client端創(chuàng)建一個TestMock類,實現(xiàn)對應(yīng)IGpHello的接口(需要對哪個接口進行mock加派,就實現(xiàn)哪個)叫确,名稱必須以Mock結(jié)尾
2.在client端的xml配置文件中,添加如下配置芍锦,增加一個mock屬性指向創(chuàng)建的TestMock
模擬錯誤(設(shè)置timeout)竹勉,模擬超時異常,運行測試代碼即可訪問到TestMock這個類娄琉。當服務(wù)端故障解除以后次乓,調(diào)用過程將恢復(fù)正常。
配置優(yōu)先級別
以timeout為例孽水,顯示了配置的查找順序票腰,其它retries, loadbalance等類似。
1.方法級優(yōu)先女气,接口級次之杏慰,全局配置再次之。
2.如果級別一樣主卫,則消費方優(yōu)先逃默,提供方次之。
其中簇搅,服務(wù)提供方配置完域,通過URL經(jīng)由注冊中心傳遞給消費方。
建議由服務(wù)提供方設(shè)置超時瘩将,因為一個方法需要執(zhí)行多長時間吟税,服務(wù)提供方更清楚凹耙,如果一個消費方同時引用多個服務(wù),就不需要關(guān)心每個服務(wù)的超時設(shè)置肠仪。