天天看點

【JAVA秒會技術之Dubbo入門】Dubbo在電商開發中的應用

dubbo在電商開發中的應用

一、dubbo背景

所謂背景介紹,就是“我們在什麼情況下,基于什麼原因開發了這樣一個中間件?”就部落客來看,簡而言之,總結如下:

(1) 随着服務的不斷增多,服務的url配置管理變得非常困難。此時,我們需要找一個中介替我們管理。

(2) 服務間的依賴關系變得錯蹤複雜,互相調用混亂。此時,我們需要厘清誰是服務提供方,誰是服務的消費方。

(3) 服務間的調用量越來越大,服務的容量問題就暴露出來,這個服務需要多少機器支撐?什麼時候該加機器?此時,我們需要有一個自動監控系統,幫助我們監控管理這一切。

基于以上三點,我們再做一個進一步提取:

我們需要一個管理衆多服務url的中介 ——注冊中心;

我們需要搞清服務間複雜的依賴關系 ——服務提供方和服務消費方;

我們需要有一個自動監控系統,監管一切 ——監控中心。

如此,我們dubbo的模型就自然而然的出來了。

二、dubbo簡介

dubbo是alibaba開源的分布式服務架構,它最大的特點是按照分層的方式來架構,使用這種方式可以使各個層之間解耦合(或者最大限度地松耦合),比如表現層和業務層就需要解耦合。

從面向服務的角度來看,dubbo采用的是一種非常簡單的模型,要麼是提供方提供服務,要麼是消費方消費服務,是以基于這一點可以抽象出服務提供方(provider)和服務消費方(consumer)兩個角色。

除了以上兩個角色,它還有注冊中心和監控中心。它可以通過注冊中心對服務進行注冊和訂閱,實作了軟負載均衡和failover(故障切換),降低對f5硬體負載均衡器的依賴,也能減少部分成本。同僚,還可以通過監控中心對服務進行監控,這樣的話,就可以知道哪些服務使用率高、哪些服務使用率低。對使用率高的服務增加機器,對使用率低的服務減少機器,達到合理配置設定資源的目的。

【JAVA秒會技術之Dubbo入門】Dubbo在電商開發中的應用

調用關系說明:

[0] 服務容器負責啟動,加載,運作服務提供者。

[1] 服務提供者在啟動時,向注冊中心注冊自己提供的服務。

[2] 服務消費者在啟動時,向注冊中心訂閱自己所需的服務。

[3] 注冊中心傳回服務提供者位址清單給消費者,如果有變更,注冊中心将基于長連接配接推送變更資料給消費者。

[4] 服務消費者,從提供者位址清單中,基于軟負載均衡算法,選一台提供者進行調用,如果調用失敗,再選另一台調用。

[5] 服務消費者和提供者,在記憶體中累計調用次數和調用時間,定時每分鐘發送一次統計資料到監控中心。

三、注冊中心

注冊中心負責服務位址的注冊與查找,相當于目錄服務,服務提供者和消費者隻在啟動時與注冊中心互動,注冊中心不轉發請求,壓力較小。dubbo目前支援4種注冊中心,(multicast、zookeeper、redis、simple),但是對于dubbo-2.3.3以上版本,建議使用zookeeper注冊中心。

(1)zookeeper簡介

zookeeper是apacahe hadoop的子項目,是一個樹型的目錄服務,支援變更推送,适合作為dubbo服務的注冊中心,工業強度較高,可用于生産環境,并推薦使用。

【JAVA秒會技術之Dubbo入門】Dubbo在電商開發中的應用

流程說明:

①服務提供者啟動時:

    向/dubbo/com.foo.barservice/providers目錄下寫入自己的url位址。

②服務消費者啟動時:

    訂閱/dubbo/com.foo.barservice/providers目錄下的提供者url位址。

    并向/dubbo/com.foo.barservice/consumers目錄下寫入自己的url位址。

③監控中心啟動時:

    訂閱/dubbo/com.foo.barservice目錄下的所有提供者和消費者url位址。

支援以下功能:

①當提供者出現斷電等異常停機時,注冊中心能自動删除提供者資訊。

②當注冊中心重新開機時,能自動恢複注冊資料,以及訂閱請求。

③當會話過期時,能自動恢複注冊資料,以及訂閱請求。

④當設定<dubbo:registry check="false" />時,記錄失敗注冊和訂閱請求,背景定時重試。

⑤可通過<dubbo:registry username="admin" password="1234" />設定zookeeper登入資訊。

⑥可通過<dubbo:registry group="dubbo" />設定zookeeper的根節點,不設定将使用無根樹。

⑦支援*号通配符<dubbo:reference group="*" version="*" />,可訂閱服務的所有分組和所有版本的提供者

(2)zookeeper單機安裝

安裝環境:linux centos、jdk環境(zookeeper是由java開發的)

第一步:下載下傳zookeeper的壓縮包,上傳到linux系統

第二步:解壓縮

第三步:建立zoo.cfg檔案,進入zookeeper-3.4.5/conf/目錄,修改zoo_sample.cfg 為zoo.cfg

第四步:配置zoo.cfg

第五步:啟動zookeeper

第六步:關閉防火牆(可選)

四、dubbo的配置

dubbo采用全spring配置方式,透明化接入應用,對應用沒有任何api侵入,隻需用spring加載dubbo的配置即可,dubbo基于spring的schema擴充進行加載。

在maven的pom.xml中配置如下

在applicationcontext.xml中添加如下配置

在applicationcontext-dubbo.xml中添加如下配置

服務提供方service-provider.xml配置如下

服務消費方service-consumer.xml配置如下

dubbo.properties配置如下