1. 程式人生 > >在windows環境搭建dubbo+zookeeper分散式服務架構

在windows環境搭建dubbo+zookeeper分散式服務架構

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提供的函式或方法的時候,由於不在一個記憶體空間,不能直接呼叫,需要通過網路來表達呼叫的語義傳達呼叫的資料。 
    說白了,就是你在你的機器上寫了一個程式,我這邊是無法直接呼叫的,這個時候就出現了一個遠端服務呼叫的概念。

    ?
    1 RPC是一種通過網路從遠端計算機程式上請求服務,而不需要了解底層網路技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通訊程式之間攜帶資訊資料。在OSI網路通訊模型中,RPC跨越了傳輸層和應用層。<br>RPC使得開發包括網路分散式多程式在內的應用程式更加容易。 RPC採用客戶機/伺服器模式。請求程式就是一個客戶機,而服務提供程式就是一個伺服器。首先,客戶機呼叫程序傳送一個有程序引數的呼叫資訊到服務程序,然後等待應答資訊。<br>在伺服器端,程序保持睡眠狀態直到呼叫資訊到達為止。當一個呼叫資訊到達,伺服器獲得程序引數,計算結果,傳送答覆資訊,然後等待下一個呼叫資訊,最後,客戶端呼叫程序接收答覆資訊,獲得程序結果,然後呼叫執行繼續進行。

    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被啟用。

    ?
    1 2 3 4 發現一個問題。 zookeeper最近的版本中有個內嵌的管理控制檯是通過jetty啟動,也會佔用8080 埠。可能會跟你的Tomcat衝突。 修改埠的方法有兩種,一種是在啟動指令碼中增加 -Dzookeeper.admin.serverPort=你的埠號.一種是在zoo.cfg中增加admin.serverPort=沒有被佔用的埠號。 也可以停用這個服務,在啟動指令碼中增加 "-Dzookeeper.admin.enableServer=false"

     插播一個查詢端口占用情況,清除埠的方法

    ?
    1 2 3 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控制檯,如下圖.

     就是這麼簡單就好了