【JAVA】dubbo

屏幕快照 2019-03-24 下午10.49.06.png

關于dubbo是用的什么協(xié)議呢灶?
在使用dubbo的時候會配置<dubbo:protocolname="dubbo"port="20880"/>所以在回答面試官的時候就隨口說的是dubbo協(xié)議,其實面試官問的此協(xié)議非彼協(xié)議守问,而是問的是http協(xié)議還是Tcp協(xié)議米丘,因為dubbo的核心就是用的單一長連接進行異步通信九孩。

Tcp協(xié)議就是所謂的長連接搅荞,長連接的好處:
減少來回握手的頻率躏惋,當操作頻繁幽污,點對點的通訊時,可以同時發(fā)送多個數(shù)據(jù)包簿姨,以不至于服務者被消費者壓死

為什么要用dubbo進行數(shù)據(jù)傳輸距误?
一般服務端服務器比較少,消費端有可能會有很多項目或者工程會調(diào)用dubbo的接口扁位,而且數(shù)據(jù)量傳輸較小且并發(fā)量比較高的情況下用dubbo效率會很高准潭。

Dubbo中zookeeper做注冊中心,如果注冊中心集群都掛掉域仇,發(fā)布者和訂閱者之間還能通信么压储? 可以
1.啟動dubbo時,消費者會從zk拉取注冊的生產(chǎn)者的地址接口等數(shù)據(jù)惠奸,緩存在本地。每次調(diào)用時沽讹,按照本地存儲的地址進行調(diào)用。
2.注冊中心對等集群武鲁,任意一臺宕掉后爽雄,會自動切換到另一臺 。
3.注冊中心全部宕掉沐鼠,服務提供者和消費者仍可以通過本地緩存通訊 挚瘟。
4.服務提供者無狀態(tài),任一臺 宕機后饲梭,不影響使用 乘盖。
5.服務提供者全部宕機,服務消費者會無法使用憔涉,并無限次重連等待服務者恢復 订框。

dubbo連接注冊中心和直連的區(qū)別 ?
在開發(fā)及測試環(huán)境下兜叨,經(jīng)常需要繞過注冊中心穿扳,只測試指定服務提供者,這時候可能需要點對點直連国旷, 點對點直聯(lián)方式矛物,將以服務接口為單位,忽略注冊中心的提供者列表跪但,服務注冊中心履羞,動態(tài)的注冊和發(fā)現(xiàn)服務,使服務的位置透明屡久,并通過在消費方獲取服務提供方地址列表忆首,實現(xiàn)軟負載均衡和Failover, 注冊中心返回服務提供者地址列表給消費者涂身,如果有變更雄卷,注冊中心將基于長連接推送變更數(shù)據(jù)給消費者。

服務消費者蛤售,從提供者地址列表中丁鹉,基于軟負載均衡算法,選一臺提供者進行調(diào)用悴能,如果調(diào)用失敗揣钦,再選另一臺調(diào)用。注冊中心負責服務地址的注冊與查找漠酿,相當于目錄服務冯凹,服務提供者和消費者只在啟動時與注冊中心交互,注冊中心不轉(zhuǎn)發(fā)請求,服務消費者向注冊中心獲取服務提供者地址列表宇姚,并根據(jù)負載算法直接調(diào)用提供者匈庭,注冊中心,服務提供者浑劳,服務消費者三者之間均為長連接阱持,監(jiān)控中心除外,注冊中心通過長連接感知服務提供者的存在魔熏,服務提供者宕機衷咽,注冊中心將立即推送事件通知消費者,注冊中心和監(jiān)控中心全部宕機蒜绽,不影響已運行的提供者和消費者镶骗,消費者在本地緩存了提供者列表,注冊中心和監(jiān)控中心都是可選的躲雅,服務消費者可以直連服務提供者

Dubbo在安全機制方面是如何解決的 鼎姊?
Dubbo通過Token令牌防止用戶繞過注冊中心直連,然后在注冊中心上管理授權(quán)相赁。Dubbo還提供服務黑白名單此蜈,來控制服務所允許的調(diào)用方。

Dubbo常見的異常 噪生?
TimeoutException
RemotingException
RpcException

Dubbo啟動時如果依賴的服務不可用會怎樣?
Dubbo 缺省會在啟動時檢查依賴的服務是否可用东囚,不可用時會拋出異常跺嗽,阻止 Spring 初始化完成,默認 check="true"页藻,可以通過 check="false" 關閉檢查桨嫁。

當一個服務接口有多種實現(xiàn)時怎么做?
當一個接口有多種實現(xiàn)時份帐,可以用 group 屬性來分組璃吧,服務提供方和消費方都指定同一個 group 即可。

服務上線怎么兼容舊版本废境?
可以用版本號(version)過渡畜挨,多個不同版本的服務注冊到注冊中心,版本號不同的服務相互間不引用噩凹。這個和服務分組的概念有一點類似巴元。

服務讀寫推薦的容錯策略是怎樣的?
讀操作建議使用 Failover 失敗自動切換驮宴,默認重試兩次其他服務器逮刨。
寫操作建議使用 Failfast 快速失敗,發(fā)一次調(diào)用失敗就立即報錯堵泽。

Dubbo的管理控制臺能做什么修己?
管理控制臺主要包含:路由規(guī)則恢总,動態(tài)配置,服務降級睬愤,訪問控制片仿,權(quán)重調(diào)整,負載均衡戴涝,等管理功能滋戳。

服務提供者能實現(xiàn)失效踢出是什么原理?
基于zookeeper的臨時節(jié)點原理
持久節(jié)點
所謂持久節(jié)點,是指在節(jié)點創(chuàng)建后,就一直存在,直到有刪除操作來主動清除這個節(jié)點,也就是說不會因為創(chuàng)建該節(jié)點的客戶端會話失效而消失
臨時節(jié)點
臨時節(jié)點的生命周期和客戶端會話綁定,也就是說,如果客戶端會話失效,那么這個節(jié)點就會自動被清除掉

創(chuàng)建的臨時節(jié)點什么時候會被刪除啥刻,是連接一斷就刪除嗎奸鸯?延時是多少?
連接斷了之后可帽,ZK不會馬上移除臨時數(shù)據(jù)娄涩,只有當SESSIONEXPIRED之后,才會把這個會話建立的臨時數(shù)據(jù)移除映跟。因此蓄拣,用戶需要謹慎設置Session_TimeOut

說說核心的配置有哪些?
dubbo:service/ 服務提供者暴露服務配置
dubbo:reference/ 服務消費者引用服務配置
dubbo:protocol/ 服務提供者協(xié)議配置
dubbo:registry/ 注冊中心配置
dubbo:application/ 應用信息配置
dubbo:provider/ 服務提供者缺省值配置
dubbo:consumer/ 服務消費者缺省值配置
dubbo:method/ 方法級配置

集群容錯
1.Failover Cluster
失敗自動切換努隙,當出現(xiàn)失敗球恤,重試其它服務器,通常用于讀操作,但重試會帶來更長延遲荸镊⊙矢可通過 retries="2" 來設置重試次數(shù)(不含第一次)。
重試次數(shù)配置如下:

<dubbo:service retries="2" />
或
<dubbo:reference retries="2" />
或
<dubbo:reference>
    <dubbo:method name="findFoo" retries="2" />
</dubbo:reference>

2.Failfast Cluster
快速失敗躬存,只發(fā)起一次調(diào)用张惹,失敗立即報錯。通常用于非冪等性的寫操作岭洲,比如新增記錄宛逗。

3.Failsafe Cluster
失敗安全,出現(xiàn)異常時盾剩,直接忽略雷激。通常用于寫入審計日志等操作。

4.Failback Cluster
失敗自動恢復告私,后臺記錄失敗請求侥锦,定時重發(fā)。通常用于消息通知操作德挣。

5.Forking Cluster
并行調(diào)用多個服務器恭垦,只要一個成功即返回。通常用于實時性要求較高的讀操作,但需要浪費更多服務資源番挺∵氲郏可通過 forks="2" 來設置最大并行數(shù)。

6.Broadcast Cluster
廣播調(diào)用所有提供者玄柏,逐個調(diào)用襟衰,任意一臺報錯則報錯,通常用于通知所有提供者更新緩存或日志等本地資源信息。

配置

服務提供方配置:

    <!-- 提供方應用信息粪摘,用于計算依賴關系 -->
    <dubbo:application name="hello-world-app"  />

    <!-- 使用zookeeper注冊中心暴露服務地址 -->
    <dubbo:registry address="zookeeper://224.5.6.7:1234" />

    <!-- 用dubbo協(xié)議在20880端口暴露服務 這個端口可用于點對點調(diào)試-->
    <dubbo:protocol name="dubbo" port="20880" />

    <!-- 聲明需要暴露的服務接口 -->
    <dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" />

    <!-- 和本地bean一樣實現(xiàn)服務 -->
    <bean id="demoService" class="com.alibaba.dubbo.demo.provider.DemoServiceImpl" />

服務消費方配置:

    <!-- 消費方應用名瀑晒,用于計算依賴關系,不是匹配條件徘意,不要與提供方一樣 -->
    <dubbo:application name="consumer-of-helloworld-app"  />

    <!-- 使用zookeeper注冊中心暴露發(fā)現(xiàn)服務地址 -->
    <dubbo:registry address="zookeeper://224.5.6.7:1234" />

    <!-- 生成遠程服務代理苔悦,可以和本地bean一樣使用demoService -->
    <dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.DemoService" />

<!-- 服務啟動關閉對該服務提供者的接口是否正常的監(jiān)測,也就是BarService是否可以正常調(diào)用不影響本應用的啟動椎咧,當為true的時候如果該接口掛了玖详,本應用就起不起來了-->
<dubbo:reference interface="com.foo.BarService" check="false" />

<!-- 關閉所有服務的啟動時檢查 -->
<dubbo:consumer check="false" />

<!-- 配置重試次數(shù),最好只用于讀的重試勤讽,寫操作可能會引起多次寫入 下面三個任意一個配置就行 默認retries="0"-->
<dubbo:service retries="2" />
<dubbo:reference retries="2" />
<dubbo:reference>
    <dubbo:method name="findFoo" retries="2" />
</dubbo:reference>
<!-- 掃描注解包路徑蟋座,多個包用逗號分隔,不填pacakge表示掃描當前ApplicationContext中所有的類 -->
<dubbo:annotation package="com.foo.bar.service" />

dubbo調(diào)用服務的負載均衡脚牍,最后一種比較適合短時間內(nèi)大量參數(shù)一樣的請求

Random LoadBalance
    隨機向臀,按權(quán)重設置隨機概率。
    在一個截面上碰撞的概率高诸狭,但調(diào)用量越大分布越均勻飒硅,而且按概率使用權(quán)重后也比較均勻,有利于動態(tài)調(diào)整提供者權(quán)重作谚。
RoundRobin LoadBalance
    輪循,按公約后的權(quán)重設置輪循比率庵芭。
    存在慢的提供者累積請求問題妹懒,比如:第二臺機器很慢,但沒掛双吆,當請求調(diào)到第二臺時就卡在那眨唬,久而久之,所有請求都卡在調(diào)到第二臺上好乐。
LeastActive LoadBalance
    最少活躍調(diào)用數(shù)匾竿,相同活躍數(shù)的隨機,活躍數(shù)指調(diào)用前后計數(shù)差蔚万。
    使慢的提供者收到更少請求岭妖,因為越慢的提供者的調(diào)用前后計數(shù)差會越大。
ConsistentHash LoadBalance
    一致性Hash,相同參數(shù)的請求總是發(fā)到同一提供者昵慌。
    當某一臺提供者掛時假夺,原本發(fā)往該提供者的請求,基于虛擬節(jié)點斋攀,平攤到其它提供者已卷,不會引起劇烈變動。
    算法參見:http://en.wikipedia.org/wiki/Consistent_hashing淳蔼。
    缺省只對第一個參數(shù)Hash侧蘸,如果要修改,請配置<dubbo:parameter key="hash.arguments" value="0,1" />
    缺省用160份虛擬節(jié)點鹉梨,如果要修改讳癌,請配置<dubbo:parameter key="hash.nodes" value="320" />
配置如:

<dubbo:service interface="..." loadbalance="roundrobin" />
或:

<dubbo:reference interface="..." loadbalance="roundrobin" />
或:

<dubbo:service interface="...">
    <dubbo:method name="..." loadbalance="roundrobin"/>
</dubbo:service>
或:

<dubbo:reference interface="...">
    <dubbo:method name="..." loadbalance="roundrobin"/>
</dubbo:reference>
當一個接口有多種實現(xiàn)時,可以用group區(qū)分俯画。

<dubbo:service group="feedback" interface="com.xxx.IndexService" />
<dubbo:service group="member" interface="com.xxx.IndexService" />
<dubbo:reference id="feedbackIndexService" group="feedback" interface="com.xxx.IndexService" />
<dubbo:reference id="memberIndexService" group="member" interface="com.xxx.IndexService" />
任意組:(2.2.0以上版本支持析桥,總是只調(diào)一個可用組的實現(xiàn))
<dubbo:reference id="barService" interface="com.foo.BarService" group="*" />

當一個接口實現(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="*" />

按組合并返回結(jié)果娩怎,比如菜單服務,接口一樣胰柑,但有多種實現(xiàn)截亦,用group區(qū)分,現(xiàn)在消費方需從每種group中調(diào)用一次返回結(jié)果柬讨,合并結(jié)果返回崩瓤,這樣就可以實現(xiàn)聚合菜單項。比較雞肋踩官,小點的項目應該都用不到
配置如:(搜索所有分組)
<dubbo:reference interface="com.xxx.MenuService" group="*" merger="true" />
(合并指定分組)
<dubbo:reference interface="com.xxx.MenuService" group="aaa,bbb" merger="true" />

(指定方法合并結(jié)果却桶,其它未指定的方法,將只調(diào)用一個Group)
<dubbo:reference interface="com.xxx.MenuService" group="*">
    <dubbo:method name="getMenuItems" merger="true" />
</dubbo:service>

(某個方法不合并結(jié)果蔗牡,其它都合并結(jié)果)
<dubbo:reference interface="com.xxx.MenuService" group="*" merger="true">
<dubbo:method name="getMenuItems" merger="false" />
</dubbo:service>

(指定合并策略颖系,缺省根據(jù)返回值類型自動匹配,如果同一類型有兩個合并器時辩越,需指定合并器的名稱)
<dubbo:reference interface="com.xxx.MenuService" group="*">
    <dubbo:method name="getMenuItems" merger="mymerge" />
</dubbo:service>

(指定合并方法嘁扼,將調(diào)用返回結(jié)果的指定方法進行合并,合并方法的參數(shù)類型必須是返回結(jié)果類型本身)
<dubbo:reference interface="com.xxx.MenuService" group="*">
    <dubbo:method name="getMenuItems" merger=".addAll" />
</dubbo:service>

dubbo的令牌驗證

防止消費者繞過注冊中心訪問提供者
在注冊中心控制權(quán)限黔攒,以決定要不要下發(fā)令牌給消費者
注冊中心可靈活改變授權(quán)方式趁啸,而不需修改或升級提供者
可以全局設置開啟令牌驗證:

<!--隨機token令牌强缘,使用UUID生成-->
<dubbo:provider interface="com.foo.BarService" token="true" />
<!--固定token令牌,相當于密碼-->
<dubbo:provider interface="com.foo.BarService" token="123456" />
也可在服務級別設置:

<!--隨機token令牌莲绰,使用UUID生成-->
<dubbo:service interface="com.foo.BarService" token="true" />
<!--固定token令牌欺旧,相當于密碼-->
<dubbo:service interface="com.foo.BarService" token="123456" />

https://blog.csdn.net/abcde474524573/article/details/53026110

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蛤签,隨后出現(xiàn)的幾起案子辞友,更是在濱河造成了極大的恐慌,老刑警劉巖震肮,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件称龙,死亡現(xiàn)場離奇詭異,居然都是意外死亡戳晌,警方通過查閱死者的電腦和手機鲫尊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沦偎,“玉大人疫向,你說我怎么就攤上這事『篮浚” “怎么了搔驼?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長侈询。 經(jīng)常有香客問我舌涨,道長,這世上最難降的妖魔是什么扔字? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任囊嘉,我火速辦了婚禮,結(jié)果婚禮上革为,老公的妹妹穿的比我還像新娘扭粱。我一直安慰自己,他們只是感情好震檩,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布琢蛤。 她就那樣靜靜地躺著,像睡著了一般恳蹲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上俩滥,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天嘉蕾,我揣著相機與錄音,去河邊找鬼霜旧。 笑死错忱,一個胖子當著我的面吹牛儡率,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播以清,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼儿普,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了掷倔?” 一聲冷哼從身側(cè)響起眉孩,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎勒葱,沒想到半個月后浪汪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡凛虽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年死遭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凯旋。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡呀潭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出至非,到底是詐尸還是另有隱情钠署,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布睡蟋,位于F島的核電站踏幻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏戳杀。R本人自食惡果不足惜该面,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望信卡。 院中可真熱鬧隔缀,春花似錦、人聲如沸傍菇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丢习。三九已至牵触,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間咐低,已是汗流浹背揽思。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留见擦,地道東北人钉汗。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓羹令,卻偏偏與公主長得像,于是被迫代替她去往敵國和親损痰。 傳聞我的和親對象是個殘疾皇子福侈,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容