Dubbo工做原理緩存
工做流程:安全
1)第一步,provider向註冊中心去註冊
2)第二步,consumer從註冊中心訂閱服務,註冊中心會通知consumer註冊好的服務
3)第三步,consumer調用provider
4)第四步,consumer和provider都異步的通知監控中心網絡
能夠,由於剛開始初始化的時候,消費者會將提供者的地址等信息拉取到本地緩存,因此註冊中心掛了能夠繼續通訊。併發
項目一啓動,加載配置文件的時候,就會初始化,服務的提供方ServiceProvider就會向註冊中心註冊本身提供的服務,當消費者在啓動時,就會向註冊中心訂閱本身所須要的服務,若是服務提供方有數據變動等,註冊中心將基於長鏈接的形式推送變動數據給消費者。
默認使用Dubbo協議:負載均衡
鏈接個數:單鏈接 鏈接方式:長鏈接 傳輸協議:TCP 傳輸方式:NIO異步傳輸 序列化:Hessian二進制序列化 適用範圍:傳入傳出參數數據包較小(建議小於100K),消費者比提供者個數多,單一消費者沒法壓滿提供者,儘可能不要使用dubbo協議傳輸大文件或超大字符串 使用場景:常規遠程服務方法調用 從上面的適用範圍總結,dubbo適合小數據量大併發的服務調用,以及消費者機器遠大於生產者機器數的狀況,不適合傳輸大數據量的服務好比文件、視頻等,除非請求量很低。
Dubbo的安全性如何獲得保障:異步
a.在有註冊中心的狀況下,能夠經過dubbbo admin中的路由規則,來指定固定ip的消費方來訪問 b.在直連的狀況下,經過在服務的提供方中設置密碼(令牌)token,消費方須要在消費時也輸入這 個密碼,纔可以正確使用。 Dubbo添加服務ip白名單,防止不法調用
Duubo中如何保證分佈式事務?socket
通常狀況下,咱們儘可能將須要事務的方法放在一個service中,從而避開分步式事務。 Dubbo底層是基於socket: Socket通訊是一個全雙工的方式,若是有多個線程同時進行遠程方法調用,這時創建在client server之間的socket鏈接上會有不少雙方發送的消息傳遞,先後順序也多是亂七八糟的,server處理完結果後,將結果消息發送給client,client收到不少消息,怎麼知道哪一個消息結果是原先哪一個線程調用的? 答:使用一個ID,讓其惟一,而後傳遞給服務端,再服務端又回傳回來,這樣就知道結果是原先哪一個線程的了。
Dubbo的zookeeper作註冊中心,若是註冊中心所有掛掉,發佈者和訂閱者還能通訊嗎?
能夠通訊的,啓動dubbo時,消費者會從zk拉取註冊的生產者的地址接口等數據,緩存在本地。每次調用時,按照本地存儲的地址進行調用;
註冊中心對等集羣,任意一臺宕機後,將會切換到另外一臺;註冊中心所有宕機後,服務的提供者和消費者仍能經過本地緩存通信。服務提供者無狀態,任一臺 宕機後,不影響使用;服務提供者所有宕機,服務消費者會沒法使用,並沒有限次重連等待服務者恢復;
掛掉是沒關係的,但前提是你沒有增長新的服務,若是你要調用新的服務,則是不能辦到的。分佈式
隨便寫點什麼,而後就發佈了!