Dubbo簡介:
Dubbo 是阿里巴巴公司開源(以前不開源)的一個高性能優秀的服務框架, 使得應用可通過高性能的 RPC 實現服務的輸入和輸出功能, 可以和spring框架無縫集成.
那么這里, 啥是RPC啊?
這么來說吧, 業務邏輯層和展現層不在同一台電腦上, 甚至不在同一個城市, 當我展現層想調用邏輯層的東西, 怎么調? RPC 就是為了解決這個問題的. 你說將邏輯層做成了接口, 通過http調用接口的方式, 確實可以調用得到, 但是速度和性能沒有 RPC 高.
度娘解釋:
RPC (Remote Procedure Call) - 遠程過程調用. 它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通信程序之間攜帶信息數據。在OSI網絡通信模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網絡分布式多程序在內的應用程序更加容易。
看的可能有點雲里霧里, 不過沒關系, 總的, 可以將RPC理解為, 將業務層的某些方法, 做成了接口, 變成服務端, 供客戶端去調用.
框架演變:
-
單一應用框架(ORM)
當網站流量很小時,只需一個應用,將所有功能如下單支付等都部署在一起,以減少部署節點和成本。
缺點:單一的系統架構,使得在開發過程中,占用的資源越來越多,而且隨着流量的增加越來越難以維護 -
垂直應用框架(MVC)
垂直應用架構解決了單一應用架構所面臨的擴容問題,流量能夠分散到各個子系統當中,且系統的體積可控,一定程度上降低了開發人員之間協同以及維護的成本,提升了開發效率。
缺點:但是在垂直架構中相同邏輯代碼需要不斷的復制,不能復用。 -
分布式應用架構(RPC)
當垂直應用越來越多,應用之間交互不可避免,將核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心 -
流動計算架構(SOA)
隨着服務化的進一步發展,服務越來越多,服務之間的調用和依賴關系也越來越復雜,這時候, 就需要一個應用來治理這些復雜的關系, 從而誕生了面向服務的架構體系(SOA),也因此衍生出了一系列相應的技術,如對服務提供、服務調用、連接處理、通信協議、序列化方式、服務發現、服務路由、日志輸出等行為進行封裝的服務框架
從以上是電商系統的演變可以看出架構演變的過程:
-
單一應用架構
- 當網站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節點和成本。
- 此時,用於簡化增刪改查工作量的 數據訪問框架(ORM) 是關鍵。
-
垂直應用架構
- 當訪問量逐漸增大,單一應用增加機器帶來的加速度越來越小,將應用拆成互不相干的幾個應用,以提升效率。
- 此時,用於加速前端頁面開發的 Web框架(MVC) 是關鍵。
- 分布式服務架構
- 當垂直應用越來越多,應用之間交互不可避免,將核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心,使前端應用能更快速的響應多變的市場需求。
- 此時,用於提高業務復用及整合的 分布式服務框架(RPC) 是關鍵。
- 流動計算架構
- 當服務越來越多,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需增加一個調度中心基於訪問壓力實時管理集群容量,提高集群利用率。
- 此時,用於提高機器利用率的 資源調度和治理中心(SOA) 是關鍵。
Dubbo架構:
主頁地址: http://dubbo.io/
Provider: 暴露服務的服務提供方。
Consumer: 調用遠程服務的服務消費方。
Registry: 服務注冊與發現的注冊中心。
Monitor: 統計服務的調用次數和調用時間的監控中心。
調用流程
0.服務容器負責啟動,加載,運行服務提供者。
1.服務提供者在啟動時,向注冊中心注冊自己提供的服務。
2.服務消費者在啟動時,向注冊中心訂閱自己所需的服務。
3.注冊中心返回服務提供者地址列表給消費者,如果有變更,注冊中心將基於長連接推送變更數據給消費者。
4.服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一台提供者進行調用,如果調用失敗,再選另一台調用。
5.服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鍾發送一次統計數據到監控中心
Dubbo 注冊中心:
對於服務提供方,它需要發布服務,而且由於應用系統的復雜性,服務的數量、類型也不斷膨脹;
對於服務消費方,它最關心如何獲取到它所需要的服務,而面對復雜的應用系統,需要管理大量的服務調用。
而且,對於服務提供方和服務消費方來說,他們還有可能兼具這兩種角色,即既需要提供服務,有需要消費服務。
通過將服務統一管理起來,可以有效地優化內部應用對服務發布/使用的流程和管理。服務注冊中心可以通過特定協議來完成服務對外的統一。
Dubbo提供的注冊中心有如下幾種類型可供選擇:
- Multicast注冊中心
- Zookeeper 注冊中心
- Redis注冊中心
- Simple注冊中心
優點:
- 透明化的遠程方法調用
- 像調用本地方法一樣調用遠程方法;只需簡單配置,沒有任何API侵入。 - 軟負載均衡及容錯機制
- 可在內網替代nginx lvs等硬件負載均衡器。
- 服務注冊中心自動注冊 & 配置管理
-不需要寫死服務提供者地址,注冊中心基於接口名自動查詢提供者ip。
使用類似zookeeper等分布式協調服務作為服務注冊中心,可以將絕大部分項目配置移入zookeeper集群。 - 服務接口監控與治理
-Dubbo-admin與Dubbo-monitor提供了完善的服務接口管理與監控功能,針對不同應用的不同接口,可以進行 多版本,多協議,多注冊中心管理。
以上部分來源於參考地址, 其實, 和某機構培訓視頻里面講的, 差不多.
zookeeper(注冊中心) 下載和部署
下載地址: http://mirrors.hust.edu.cn/apache/zookeeper/
我這里下載的是 linux 版本的. 所以也會部署到linux上去, linux系統用的centos.
1. 拿到下載的文件, 進行解壓縮到事先建好的 /usr/java 文件中 (mkdir /usr/java)
tar -zxvf zookeeper-3.4.11 -C /usr/java
2. 新建data文件夾
cd /usr/java/zookeeper-3.4.11
mkdir data
3. 修改配置文件 zoo_sample.cfg
cd conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
將dataDir修改為之前新建的data文件夾
4. 啟動zookeeper
cd ../bin
./zkServer.sh start
注冊服務監控
1. 下載地址
https://github.com/alibaba/dubbo
將項目下載下來之后, 打開其中的target文件夾, 下面有一個已經編譯好的war包
將此war包拷貝到linux系統中的tomcat webapps文件夾下, 且重命名為 dubbo-admin.
2. 訪問監控頁面
如果是在linux 系統中直接訪問, 則輸入以下地址:
http://localhost:8080/dubbo-admin/
如果是在別的電腦中訪問, 則輸入替換地址為linux系統的ip地址即可.
在進入的時候, 會要求輸入賬號和密碼, 默認都是 root
參考: