Dubbo背景和簡介
Dubbo開始於電商系統,因此在這里先從電商系統的演變講起。
1.單一應用框架(ORM)
當網站流量很小時,只需一個應用,將所有功能如下單支付等都部署在一起,以減少部署節點和成本。
缺點:單一的系統架構,使得在開發過程中,占用的資源越來越多,而且隨着流量的增加越來越難以維護
2.垂直應用框架(MVC)
垂直應用架構解決了單一應用架構所面臨的擴容問題,流量能夠分散到各個子系統當中,且系統的體積可控,一定程度上降低了開發人員之間協同以及維護的成本,提升了開發效率。
缺點:但是在垂直架構中相同邏輯代碼需要不斷的復制,不能復用。
3.分布式應用架構(RPC)
當垂直應用越來越多,應用之間交互不可避免,將核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心
4.流動計算架構(SOA)
隨着服務化的進一步發展,服務越來越多,服務之間的調用和依賴關系也越來越復雜,誕生了面向服務的架構體系(SOA),也因此衍生出了一系列相應的技術,如對服務提供、服務調用、連接處理、通信協議、序列化方式、服務發現、服務路由、日志輸出等行為進行封裝的服務框架
-
單一應用架構
- 當網站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節點和成本。
- 此時,用於簡化增刪改查工作量的 數據訪問框架(ORM) 是關鍵。
-
垂直應用架構
- 當訪問量逐漸增大,單一應用增加機器帶來的加速度越來越小,將應用拆成互不相干的幾個應用,以提升效率。
- 此時,用於加速前端頁面開發的 Web框架(MVC) 是關鍵。
- 分布式服務架構
- 當垂直應用越來越多,應用之間交互不可避免,將核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心,使前端應用能更快速的響應多變的市場需求。
- 此時,用於提高業務復用及整合的 分布式服務框架(RPC) 是關鍵。
- 流動計算架構
- 當服務越來越多,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需增加一個調度中心基於訪問壓力實時管理集群容量,提高集群利用率。
- 此時,用於提高機器利用率的 資源調度和治理中心(SOA) 是關鍵。
在這里插播一條關於RPC的簡介:
RPC(Remote Procedure Call Protocol):遠程過程調用:
兩台服務器A、B,分別部署不同的應用a,b。當A服務器想要調用B服務器上應用b提供的函數或方法的時候,由於不在一個內存空間,不能直接調用,需要通過網絡來表達調用的語義傳達調用的數據。
說白了,就是你在你的機器上寫了一個程序,我這邊是無法直接調用的,這個時候就出現了一個遠程服務調用的概念。
RPC是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通信程序之間攜帶信息數據。在OSI網絡通信模型中,RPC跨越了傳輸層和應用層。
RPC使得開發包括網絡分布式多程序在內的應用程序更加容易。 RPC采用客戶機/服務器模式。請求程序就是一個客戶機,而服務提供程序就是一個服務器。首先,客戶機調用進程發送一個有進程參數的調用信息到服務進程,然后等待應答信息。
在服務器端,進程保持睡眠狀態直到調用信息到達為止。當一個調用信息到達,服務器獲得進程參數,計算結果,發送答復信息,然后等待下一個調用信息,最后,客戶端調用進程接收答復信息,獲得進程結果,然后調用執行繼續進行。
RPC需要解決的問題:
(可以稍作了解,詳情可查看別的博文)
- 通訊問題 : 主要是通過在客戶端和服務器之間建立TCP連接,遠程過程調用的所有交換的數據都在這個連接里傳輸。連接可以是按需連接,調用結束后就斷掉,也可以是長連接,多個遠程過程調用共享同一個連接。
- 尋址問題 : A服務器上的應用怎么告訴底層的RPC框架,如何連接到B服務器(如主機或IP地址)以及特定的端口,方法的名稱名稱是什么,這樣才能完成調用。比如基於Web服務協議棧的RPC,就要提供一個endpoint URI,或者是從UDDI服務上查找。如果是RMI調用的話,還需要一個RMI Registry來注冊服務的地址。
- 序列化 與 反序列化 : 當A服務器上的應用發起遠程過程調用時,方法的參數需要通過底層的網絡協議如TCP傳遞到B服務器,由於網絡協議是基於二進制的,內存中的參數的值要序列化成二進制的形式,也就是序列化(Serialize)或編組(marshal),通過尋址和傳輸將序列化的二進制發送給B服務器。
同理,B服務器接收參數要將參數反序列化。B服務器應用調用自己的方法處理后返回的結果也要序列化給A服務器,A服務器接收也要經過反序列化的過程。
以上理論都來自 http://blog.csdn.net/noaman_wgs/article/details/70214612
正式安裝步驟
一.zookeeper安裝
1.下載zookeeper
路徑為http://www-eu.apache.org/dist/zookeeper/zookeeper-3.5.3-beta/
2.解壓到指定目錄下
3.解壓后,將con文件夾下的zoo_sample.cfg拷貝一份,重命名為zoo.cfg
紅色路徑需要真實存在,不然可能報錯。沒有的話就去新建對應的文件路徑
4.windows系統下會使用zkServer.cmd開啟,所以在bin目錄下找到zkServer.cmd,雙擊開啟,我們可以看到他的端口為2181
注意這里還有一個端口8088被啟用。
發現一個問題。 zookeeper最近的版本中有個內嵌的管理控制台是通過jetty啟動,也會占用8080 端口。可能會跟你的Tomcat沖突。 修改端口的方法有兩種,一種是在啟動腳本中增加 -Dzookeeper.admin.serverPort=你的端口號.一種是在zoo.cfg中增加admin.serverPort=沒有被占用的端口號。 也可以停用這個服務,在啟動腳本中增加"-Dzookeeper.admin.enableServer=false"。
插播一個查詢端口占用情況,清除端口的方法
1. win + R,輸入cmd回車進入dos界面 2. 輸入netstat -ano|findstr 8080 查看占用8080端口的進程 3. 輸入taskkill /pid 10148 /f 將顯示的進程號(我的是10148)結束掉
二.dubbo安裝
1.下載dubbo源碼
源碼地址為github上的地址,可以使用git或者直接下載壓縮包.https://github.com/alibaba/dubbo/tree/2.5.x
2.下載完之后的目錄結構,若是壓縮包,就將壓縮包解壓
3.在當前目錄下打開命令窗口,使用命令mvn clean install -Dmaven.test.skip=true構建dubbo源碼(要安裝maven喲)
4.構建完成之后,找到上圖中dubbo-admin下target文件夾中的war包,將其拷貝到本地的tomcat的webapps下
測試環境搭建是否成功
先啟動zk,然后啟動tomcat,此時會看到兩個dos窗口中信息滾動特快,特炫酷.待tomcat啟動完畢之后,在瀏覽器中輸入地址.提前說明,
我拷貝到tomcat-->webapps下的dubbo-admin的war包我改名為了dubbo-admin.war,如下圖所示,我的tomcat端口號是8080,在瀏覽其中輸入地址http://localhost:8080/dubbo-admin/回車,
輸入用戶名和密碼,用戶名和密碼均為root,這時候就會看到dubbo控制台,如下圖.
就是這么簡單就好了