Dubbo部分
- Dubbo工作原理
-
dubbo工作原理
第一層:service層俯渤,接口層越除,給服務(wù)提供者和消費者來實現(xiàn)的
第二層:config層藤乙,配置層,主要是對dubbo進行各種配置的
第三層:proxy層阶界,服務(wù)代理層,透明生成客戶端的stub和服務(wù)單的skeleton
第四層:registry層聋庵,服務(wù)注冊層膘融,負責(zé)服務(wù)的注冊與發(fā)現(xiàn)
第五層:cluster層,集群層祭玉,封裝多個服務(wù)提供者的路由以及負載均衡氧映,將多個實例組合成一個服務(wù)
第六層:monitor層,監(jiān)控層脱货,對rpc接口的調(diào)用次數(shù)和調(diào)用時間進行監(jiān)控
第七層:protocol層岛都,遠程調(diào)用層,封裝rpc調(diào)用
第八層:exchange層振峻,信息交換層臼疫,封裝請求響應(yīng)模式民晒,同步轉(zhuǎn)異步
第九層:transport層迈勋,網(wǎng)絡(luò)傳輸層,抽象mina和netty為統(tǒng)一接口
第十層:serialize層昧谊,數(shù)據(jù)序列化層工作流程: 1)第一步凤价,provider向注冊中心去注冊 2)第二步鸽斟,consumer從注冊中心訂閱服務(wù),注冊中心會通知consumer注冊好的服務(wù) 3)第三步利诺,consumer調(diào)用provider 4)第四步富蓄,consumer和provider都異步的通知監(jiān)控中心
-
-
注冊中心掛了可以繼續(xù)通信嗎?
可以慢逾,因為剛開始初始化的時候立倍,消費者會將提供者的地址等信息拉取到本地緩存灭红,所以注冊中心掛了可以繼續(xù)通信。
Dubbo的執(zhí)行流程:
項目一啟動帐萎,加載配置文件的時候比伏,就會初始化,服務(wù)的提供方ServiceProvider就會向注冊中心注冊自己提供的服務(wù)疆导,當消費者在啟動時赁项,就會向注冊中心訂閱自己所需要的服務(wù),如果服務(wù)提供方有數(shù)據(jù)變更等澈段,注冊中心將基于長連接的形式推送變更數(shù)據(jù)給消費者悠菜。
默認使用Dubbo協(xié)議:
連接個數(shù):單連接
連接方式:長連接
傳輸協(xié)議:TCP
傳輸方式:NIO異步傳輸
序列化:Hessian二進制序列化
適用范圍:傳入傳出參數(shù)數(shù)據(jù)包較小(建議小于100K)败富,消費者比提供者個數(shù)多悔醋,單一消費者無法壓滿提供者,盡量不要使用dubbo協(xié)議傳輸大文件或超大字符串
使用場景:常規(guī)遠程服務(wù)方法調(diào)用
從上面的適用范圍總結(jié)兽叮,dubbo適合小數(shù)據(jù)量大并發(fā)的服務(wù)調(diào)用芬骄,以及消費者機器遠大于生產(chǎn)者機器數(shù)的情況,不適合傳輸大數(shù)據(jù)量的服務(wù)比如文件鹦聪、視頻等账阻,除非請求量很低。
Dubbo的安全性如何得到保障:
a.在有注冊中心的情況下,可以通過dubbbo admin中的路由規(guī)則泽本,來指定固定ip的消費方來訪問
b.在直連的情況下淘太,通過在服務(wù)的提供方中設(shè)置密碼(令牌)token,消費方需要在消費時也輸入這 個密碼规丽,才能夠正確使用蒲牧。
Dubbo添加服務(wù)ip白名單,防止不法調(diào)用Duubo中如何保證分布式事務(wù)赌莺?
一般情況下冰抢,我們盡量將需要事務(wù)的方法放在一個service中,從而避開分步式事務(wù)雄嚣。
Dubbo底層是基于socket: Socket通信是一個全雙工的方式晒屎,如果有多個線程同時進行遠程方法調(diào)用,這時建立在client server之間的socket連接上會有很多雙方發(fā)送的消息傳遞缓升,前后順序也可能是亂七八糟的鼓鲁,server處理完結(jié)果后,將結(jié)果消息發(fā)送給client港谊,client收到很多消息骇吭,怎么知道哪個消息結(jié)果是原先哪個線程調(diào)用的?
答:使用一個ID歧寺,讓其唯一燥狰,然后傳遞給服務(wù)端棘脐,再服務(wù)端又回傳回來,這樣就知道結(jié)果是原先哪個線程的了龙致。Dubbo的心跳機制:
目的:
維持provider和consumer之間的長連接
實現(xiàn):
dubbo心跳時間heartbeat默認是1s蛀缝,超過heartbeat時間沒有收到消息,就發(fā)送心跳消 息(provider目代,consumer一樣),如果連著3次(heartbeatTimeout為heartbeat*3)沒有收到心跳響應(yīng)屈梁,provider會關(guān)閉channel,而consumer會進行重連;不論是provider還是consumer的心跳檢測都是通過啟動定時任務(wù)的方式實現(xiàn)榛了;
Dubbo的zookeeper做注冊中心在讶,如果注冊中心全部掛掉,發(fā)布者和訂閱者還能通信嗎霜大?
可以通信的构哺,啟動dubbo時,消費者會從zk拉取注冊的生產(chǎn)者的地址接口等數(shù)據(jù)战坤,緩存在本地曙强。每次調(diào)用時,按照本地存儲的地址進行調(diào)用途茫;
注冊中心對等集群旗扑,任意一臺宕機后,將會切換到另一臺慈省;注冊中心全部宕機后,服務(wù)的提供者和消費者仍能通過本地緩存通訊眠菇。服務(wù)提供者無狀態(tài)边败,任一臺 宕機后,不影響使用捎废;服務(wù)提供者全部宕機笑窜,服務(wù)消費者會無法使用,并無限次重連等待服務(wù)者恢復(fù)登疗;
掛掉是不要緊的排截,但前提是你沒有增加新的服務(wù),如果你要調(diào)用新的服務(wù)辐益,則是不能辦到的断傲。
隨便寫點什么,然后就發(fā)布了智政!