1)Dubbo 提供了聲明式緩存,用于加速熱門數(shù)據(jù)的訪問(wèn)速度,以減少用戶加緩存的工作量。
2)Dubbo 2.2.0 以上版本支持服務(wù)降級(jí)。
3)Dubbo目前暫時(shí)不支持,后續(xù)可能采用基于 JTA/XA 規(guī)范實(shí)現(xiàn)。
4)Dubbo 允許配置多協(xié)議,在不同服務(wù)上支持不同協(xié)議或者同一服務(wù)上同時(shí)支持多種協(xié)議。
當(dāng)一個(gè)接口有多種實(shí)現(xiàn)時(shí),可以用 group 屬性來(lái)分組,服務(wù)提供方和消費(fèi)方都指定同一個(gè) group 即可。
Dubbo 缺省會(huì)在啟動(dòng)時(shí)檢查依賴的服務(wù)是否可用,不可用時(shí)會(huì)拋出異常,阻止 Spring 初始化完成,默認(rèn) check="true",可以通過(guò) check="false" 關(guān)閉檢查。
可以的,啟動(dòng) dubbo 時(shí),消費(fèi)者會(huì)從 zookeeper 拉取注冊(cè)的生產(chǎn)者的地址接口等數(shù)據(jù),緩存在本地。每次調(diào)用時(shí),按照本地存儲(chǔ)的地址進(jìn)行調(diào)用。
去除dubbo超時(shí)重試機(jī)制,并重新評(píng)估設(shè)置超時(shí)時(shí)間。業(yè)務(wù)處理代碼必須放在服務(wù)端,客戶端只做參數(shù)驗(yàn)證和服務(wù)調(diào)用,不涉及業(yè)務(wù)流程處理。
當(dāng)然Dubbo的重試機(jī)制其實(shí)是非常好的QOS保證,它的路由機(jī)制,是會(huì)幫你把超時(shí)的請(qǐng)求路由到其他機(jī)器上,而不是本機(jī)嘗試,所以 dubbo的重試機(jī)器也能一定程度的保證服務(wù)的質(zhì)量。但是請(qǐng)一定要綜合線上的訪問(wèn)情況,給出綜合的評(píng)估。
檢查 dubbo 的 jar 包有沒(méi)有在 classpath 中,以及有沒(méi)有重復(fù)的 jar 包
檢查暴露服務(wù)的 spring 配置有沒(méi)有加載
在服務(wù)提供者機(jī)器上測(cè)試與注冊(cè)中心的網(wǎng)絡(luò)是否通
可以用版本號(hào)(version)過(guò)渡,多個(gè)不同版本的服務(wù)注冊(cè)到注冊(cè)中心,版本號(hào)不同的服務(wù)相互間不引用。這個(gè)和服務(wù)分組的概念有一點(diǎn)類似。
容錯(cuò)指的是某種系統(tǒng)控制在一定范圍內(nèi)的一種允許或包容犯錯(cuò)情況的發(fā)生。具體容錯(cuò)策略如下:
1.Failover Cluster失敗自動(dòng)切換:dubbo的默認(rèn)容錯(cuò)方案,當(dāng)調(diào)用失敗時(shí)自動(dòng)切換到其他可用的節(jié)點(diǎn),具體的重試次數(shù)和間隔時(shí)間可通過(guò)引用服務(wù)的時(shí)候配置,默認(rèn)重試次數(shù)為1也就是只調(diào)用一次。
2.Failback Cluster失敗重新恢復(fù):在調(diào)用失敗,記錄日志和調(diào)用信息,然后返回空結(jié)果給consumer,并且通過(guò)定時(shí)任務(wù)每隔5秒對(duì)失敗的調(diào)用進(jìn)行重試
3.Failfast Cluster快速失敗:只會(huì)調(diào)用一次,失敗后立刻拋出異常
4.Failsafe Cluster失敗安全:調(diào)用出現(xiàn)異常,記錄日志不拋出,返回空結(jié)果
5.Forking Cluster并行調(diào)用多個(gè)服務(wù)提供者:通過(guò)線程池創(chuàng)建多個(gè)線程,并發(fā)調(diào)用多個(gè)provider,結(jié)果保存到阻塞隊(duì)列,只要有一個(gè)provider成功返回結(jié)果,就會(huì)立刻返回結(jié)果
6.Broadcast Cluster廣播模式:逐個(gè)調(diào)用每個(gè)provider,如果其中一臺(tái)報(bào)錯(cuò),在循環(huán)調(diào)用結(jié)束后,拋出異常
RandomLoadBalance:隨機(jī)負(fù)載均衡。隨機(jī)的選擇一個(gè)。是Dubbo的默認(rèn)負(fù)載均衡策略。
RoundRobinLoadBalance:輪詢負(fù)載均衡。輪詢選擇一個(gè)。
LeastActiveLoadBalance:最少活躍調(diào)用數(shù),相同活躍數(shù)的隨機(jī)。活躍數(shù)指調(diào)用前后計(jì)數(shù)差。使慢的 Provider 收到更少請(qǐng)求,因?yàn)樵铰?Provider 的調(diào)用前后計(jì)數(shù)差會(huì)越大。
ConsistentHashLoadBalance:一致性哈希負(fù)載均衡。相同參數(shù)的請(qǐng)求總是落在同一臺(tái)機(jī)器上。
Dubbo是通過(guò) JDK 的 ShutdownHook 來(lái)完成優(yōu)雅停機(jī)的,所以如果使用 kill -9 PID 等強(qiáng)制關(guān)閉指令,是不會(huì)執(zhí)行優(yōu)雅停機(jī)的,只有通過(guò) kill PID 時(shí),才會(huì)執(zhí)行。
Dubbo 可以使用 Pinpoint 和 Apache Skywalking(Incubator) 實(shí)現(xiàn)分布式服務(wù)追蹤