面向服務的架構(service-orientedarchitecture,soa)自提出到被普遍認可和接受,再到目前應用普及和成熟已有近20年時間,在領域的應用經歷了webservice介面、企業服務匯流排(esb)、服務管控等不同發展階段。目前雲計算、流程銀行等新概念又給了soa更廣泛的發展空間。國際權威機構gartner認為,soa是大型企業資訊現代化的根本。
dubbo是乙個分布式服務框架,致力於提供高效能和透明化的rpc遠端服務呼叫方案,以及soa服務治理方案。
簡單的說,dubbo就是個服務框架,如果沒有分布式的需求,其實是不需要用的,只有在分布式的時候,才有dubbo這樣的分布式服務框架的需求,並且本質上是個服務呼叫的東東,說白了就是個遠端服務呼叫的分布式框架(告別web service模式中的wsdl,以服務者與消費者的方式在dubbo上註冊)。
1. 遠端通訊:
提供對多種基於長連線的nio框架抽象封裝,包括多種執行緒模型,序列化,以及「請求-響應」模式的資訊交換方式。
2. 集群容錯:
提供基於介面方法的透明遠端過程呼叫,包括多協議支援,以及軟負載均衡,失敗容錯,位址路由,動態配置等集群支援。
3. 自動發現
基於註冊中心目錄服務,使服務消費方能動態的查詢服務提供方,使位址透明,使服務提供方可以平滑增加或減少機器。
呼叫流程
dubbo的provider,consumer在啟動時都會建立乙個註冊中心,註冊中心可以選擇zookeeper,redis。常用的是zookeeper,我們這篇部落格主要講的就是dubbo與zookeeper的註冊互動過程。
dubbo裡預設使用zkclient來操作zookeeper伺服器,其對zookeeper原始客戶單做了一定的封裝,操作zookeeper時能便捷一些,比如不需要手動處理session超時,不需要重複註冊watcher等等。
簡單來講,zookeeper可以充當乙個服務登錄檔(service registry),讓多個服務提供者形成乙個集群,讓服務消費者通過服務登錄檔獲取具體的服務訪問位址(ip+埠)去訪問具體的服務提供者。如下圖所示:
具體來說,zookeeper就是個分布式檔案系統,每當乙個服務提供者部署後都要將自己的服務註冊到zookeeper的某一路徑上: ///, 比如我們的helloworldservice部署到兩台機器,那麼zookeeper上就會建立兩條目錄:分別為/helloworldservice/1.0.0/100.19.20.01:16888 /helloworldservice/1.0.0/100.19.20.02:16888。
在zookeeper中,進行服務註冊,實際上就是在zookeeper中建立了乙個znode節點,該節點儲存了該服務的ip、埠、呼叫方式(協議、序列化方式)等。該節點承擔著最重要的職責,它由服務提供者(發布服務時)建立,以供服務消費者獲取節點中的資訊,從而定位到服務提供者真正網路拓撲位置以及得知如何呼叫。rpc服務註冊、發現過程簡述如下:
zookeeper提供了「心跳檢測」功能,它會定時向各個服務提供者傳送乙個請求(實際上建立的是乙個 socket 長連線),如果長期沒有響應,服務中心就認為該服務提供者已經「掛了」,並將其剔除,比如100.19.20.02這台機器如果宕機了,那麼zookeeper上的路徑就會只剩/helloworldservice/1.0.0/100.19.20.01:16888。
服務消費者會去監聽相應路徑(/helloworldservice/1.0.0),一旦路徑上的資料有任務變化(增加或減少),zookeeper都會通知服務消費方服務提供者位址列表已經發生改變,從而進行更新。
更為重要的是zookeeper 與生俱來的容錯容災能力(比如leader選舉),可以確保服務登錄檔的高可用性。
使用 zookeeper 作為註冊中心時,客戶端訂閱服務時會向 zookeeper 註冊自身;主要是方便對呼叫方進行統計、管理。但訂閱時是否註冊 client 不是必要行為,和不同的註冊中心實現有關,例如使用 consul 時便沒有註冊。
重試的動作包括:
為什麼如此設定? 主要是和zookeeper的通訊機制有關的。當zookeeper的client和server連線斷開,或者心跳超時,那麼server會將相應client註冊的臨時節點刪除,當然註冊的listener也相應刪除。
而provider和consumer註冊的url就屬於臨時節點,當連線斷開時,dubbo註冊了zookeeper的statelistener,也就是狀態***,當dubbo裡的zookeeper client和server重新連線上時,將之前註冊的的url新增入這幾個失敗集合中,然後重新註冊和訂閱。
消費者配置檔案:
<?xml version="1.0" encoding="utf-8"?>
提供者配置檔案:
<?xml version="1.0" encoding="utf-8"?>
在vmware中啟動ookeeper:
zookeeper的conf檔案目錄下:停止:zkserver.sh start
zkserver.sh stop狀態:
zkserver.sh status進入zookeeper中:
zkcli.sh注意關閉防火牆:
service iptables stop永久關閉:chkconfig iptables off 檢視埠:netstat -ntlp消費者測試**:
public class consumertest
}
提供者**:
public class providetest
}
總結:
provider和consumer向zookeeper註冊臨時節點,當連線斷開時刪除相應的註冊節點。
consumer訂閱providers節點的子節點,實時感知provider的變化情況,實時同步自身的invoker物件
Dubbo簡單介紹及其和zookeeper的關係
dubbox 是乙個分布式服務框架,其前身是阿里巴巴開源專案dubbo 被國內電商及網際網路專案中使用,後期阿里巴巴停止了該項目的維護,當當網便在dubbo基礎上進行優化,並繼續維護,為了與原有的dubbo區分,故將其命名為dubbox。dubbox 致力於提供高效能和透明化的rpc遠端服務呼叫方案...
Dubbo簡單介紹
抄寫了一部分別人的部落格,望請見諒 什麼是dubbo?dubbo是乙個分布式服務框架,致力於提供高效能和透明化的rpc遠端服務呼叫方案,以及soa服務治理方案。簡單的說,dubbo就是個服務框架,如果沒有分布式的需求,其實是不需要用的,只有在分布式的時候,才有dubbo這樣的分布式服務框架的需求,並...
簡單介紹 dubbo
dubbo是乙個開源的分布式服務框架,它最大的特點是按照分層的方式來架構,使用這種方式可以使各個層之間解耦合 從服務模型的角度來看,dubbo採用的是一種非常簡單的模型,要麼是提供方提供服務,要麼是消費方消費服務,所以基於這一點可以抽象出服務提供方 provider 和服務消費方 consumer ...