Dubbo——面试问题集(4~14)
4、默認使用什么序列化框架,你知道的還有哪些?
在Dubbo RPC中,同時支持多種序列化方式:
dubbo序列化,阿里尚不成熟的java序列化實現(xiàn)。
hessian2序列化:hessian是一種跨語言的高效二進制的序列化方式,但這里實際不是原生的hessian2序列化,而是阿里修改過的hessian lite,它是dubbo RPC默認啟用的序列化方式。
json序列化:目前有兩種實現(xiàn),一種是采用的阿里的fastjson庫,另一種是采用dubbo中自已實現(xiàn)的簡單json庫,一般情況下,json這種文本序列化性能不如二進制序列化。
java序列化:主要是采用JDK自帶的java序列化實現(xiàn),性能很不理想。
另外還有專門針對Java語言的Kryo,FST,及跨語言的Protostuff、ProtoBuf,Thrift,Avro等。
5、服務提供者能實現(xiàn)失效踢出是什么原理?
利用的是zookeeper的臨時節(jié)點原理
Zookeeper
持久節(jié)點
所謂持久節(jié)點,是指在節(jié)點創(chuàng)建后,就一直存在,直到有刪除操作來主動清除這個節(jié)點,也就是說不會因為創(chuàng)建該節(jié)點的客戶端會話失效而消失
臨時節(jié)點
臨時節(jié)點的生命周期和客戶端會話綁定,也就是說,如果客戶端會話失效,那么這個節(jié)點就會自動被清除掉
Dubbo創(chuàng)建的zookeeper樹結(jié)構(gòu)
當提供者出現(xiàn)斷電等異常停機時,注冊中心能自動刪除提供者信息(通過臨時節(jié)點及watch機制實現(xiàn))
詳見,Dubbo zookeeper注冊中心,傳送門
5、服務上線怎么不影響舊版本?
來自dubbo文檔
<!--當一個接口實現(xiàn),出現(xiàn)不兼容升級時,可以用版本號過渡,版本號不同的服務相互間不引用。在低壓力時間段,先升級一半提供者為新版本再將所有消費者升級為新版本然后將剩下的一半提供者升級為新版本--> <dubbo:service interface="com.foo.BarService" version="1.0.0" /> <dubbo:service interface="com.foo.BarService" version="2.0.0" /> <dubbo:reference id="barService" interface="com.foo.BarService" version="1.0.0" /> <dubbo:reference id="barService" interface="com.foo.BarService" version="2.0.0" />不區(qū)分版本:(2.2.0以上版本支持)<dubbo:reference id="barService" interface="com.foo.BarService" version="*" />6、如何解決服務調(diào)用鏈過長的問題?
使用分布式服務追蹤,如zipkin
7、核心的配置有哪些
核心配置有:
dubbo:service/dubbo:reference/dubbo:protocol/dubbo:registry/dubbo:application/dubbo:provider/dubbo:consumer/dubbo:method/8、dubbo推薦用什么協(xié)議?
默認使用dubbo協(xié)議。
dubbo共支持如下幾種通信協(xié)議:
- dubbo://
- rmi://
- hessian://
- http://
- webservice://
- thrift://
- memcached://
- redis://
- rest://
詳見:http://dubbo.apache.org/zh-cn/docs/user/references/protocol/introduction.html
9、同一個服務多個提供者,消費者可以直連嗎
可以直連,修改配置即可,也可以通過telnet直接某個服務。
10、畫一畫服務注冊與發(fā)現(xiàn)的流程圖
11、集群容錯怎么做?
讀操作建議使用Failover失敗自動切換,默認重試兩次其他服務器。寫操作建議使用Failfast快速失敗,發(fā)一次調(diào)用失敗就立即報錯。
11.1 集群容錯模式:
Failover Cluster
失敗自動切換,當出現(xiàn)失敗,重試其它服務器。(缺省)
通常用于讀操作,但重試會帶來更長延遲。
可通過retries="2"來設(shè)置重試次數(shù)(不含第一次)。正是文章剛開始說的那種情況.
Failfast Cluster
快速失敗,只發(fā)起一次調(diào)用,失敗立即報錯。
通常用于非冪等性的寫操作,比如新增記錄。
Failsafe Cluster
失敗安全,出現(xiàn)異常時,直接忽略。
通常用于寫入審計日志等操作。
Failback Cluster
失敗自動恢復,后臺記錄失敗請求,定時重發(fā)。
通常用于消息通知操作。
Forking Cluster
并行調(diào)用多個服務器,只要一個成功即返回。
通常用于實時性要求較高的讀操作,但需要浪費更多服務資源。
可通過forks="2"來設(shè)置最大并行數(shù)。
Broadcast Cluster
廣播調(diào)用所有提供者,逐個調(diào)用,任意一臺報錯則報錯。(2.1.0開始支持)
通常用于通知所有提供者更新緩存或日志等本地資源信息。
重試次數(shù)配置如:(failover集群模式生效)
詳見:http://dubbo.apache.org/zh-cn/docs/source_code_guide/cluster.html
12、負載均衡策略
Dubbo提供了多種均衡策略,缺省為random隨機調(diào)用。
Random LoadBalance
隨機,按權(quán)重設(shè)置隨機概率。
在一個截面上碰撞的概率高,但調(diào)用量越大分布越均勻,而且按概率使用權(quán)重后也比較均勻,有利于動態(tài)調(diào)整提供者權(quán)重。
RoundRobin LoadBalance
輪循,按公約后的權(quán)重設(shè)置輪循比率。
存在慢的提供者累積請求問題,比如:第二臺機器很慢,但沒掛,當請求調(diào)到第二臺時就卡在那,久而久之,所有請求都卡在調(diào)到第二臺上。
LeastActive LoadBalance
最少活躍調(diào)用數(shù),相同活躍數(shù)的隨機,活躍數(shù)指調(diào)用前后計數(shù)差。
使慢的提供者收到更少請求,因為越慢的提供者的調(diào)用前后計數(shù)差會越大。
ConsistentHash LoadBalance
一致性Hash,相同參數(shù)的請求總是發(fā)到同一提供者。
當某一臺提供者掛時,原本發(fā)往該提供者的請求,基于虛擬節(jié)點,平攤到其它提供者,不會引起劇烈變動。
Dubbo的集群容錯和負載均衡同樣也是Dubbo本身的高級特性.正如我們在說自定義擴展的時候一樣,這兩個特征同樣也可以進行自定義擴展,用戶可以根據(jù)自己實際的需求來擴展他們從而滿足項目的實際需求.
13、Dubbo和Spring Cloud
14、Dubbo如何優(yōu)雅停機?
Dubbo 是通過 JDK 的 ShutdownHook 來完成優(yōu)雅停機的,所以如果使用 kill -9 PID 等強制關(guān)閉指令,是不會執(zhí)行優(yōu)雅停機的,只有通過 kill PID 時,才會執(zhí)行。
總結(jié)
以上是生活随笔為你收集整理的Dubbo——面试问题集(4~14)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为Mate30系列连接电脑有多方便华为
- 下一篇: linux下装QQ,64位系统