Linux-dubbo入門及單機版zookeeper安裝

如何實現遠程通信?

       1.WebService:效率不高,基於soap協議。在項目中不推薦使用。

       2.使用restful形式的服務:http+json。很多項目中應用。但是有個缺點是,如果服務太多,服務之間的調用關係就非常混亂,需要治療服務。

       3.使用dubbo。使用rpc協議進行遠程調用,直接使用socket通信。傳輸效率高,並且可以統計出系統之間的調用關係、調用次數。但是dubbo也有個比較大的缺點,那就是使用它的工程必須都是用java開發的才行,如果一個用的java,另一個用的PHP,就無法使用dubbo。

        那麼,什麼是dubbo?

        隨着互聯網的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分佈式服務架構以及流動計算架構勢在必行,亟需一個治理系統確保架構有條不紊的演進。Dubbo架構發展路線圖如下。


         從上圖可以看到,發展經歷了四個階段:

第一階段:單一應用架構

      當網站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節點和成本。此時,用於簡化增刪改查工作量的數據訪問框架(ORM)是關鍵。其中1~10的意思是,當一個tomcat服務無法滿足要求時,我們可以增加部署tomcat的數量並用反向代理來做負載均衡。由於不同的tomcat之間session要共享,方法就是要定時向其它節點進行廣播,其它tomcat發現發現與之不同時便會進行同步,當節點數量較多時,廣播將會佔用大部分帶寬,以至於真正的通信所用的帶寬嚴重不足。因此該架構只能用於節點數小於10的情況。

第二階段:垂直應用架構

       當訪問量逐漸增大,單一應用增加機器帶來的加速度越來越小,將應用拆成互不相干的幾個應用,以提升效率。舉個例子,比如把一個大的項目拆分成訂單系統、會員系統、前臺系統、後臺系統、搜索系統,每個系統自成一家,服務層和web層都在一起,哪個系統壓力大,就給那個系統增加節點以提升性能。此時用於加速前端開發的Web框架(MVC)是關鍵。

第三階段:分佈式服務架構

       當垂直應用越來越多,應用之間交互不可避免,這時代碼將非常臃腫(因爲同一套代碼邏輯可能會被寫多遍)。這時將核心業務抽離出來,作爲獨立的服務,逐漸形成穩定的服務中心,使前端應用能夠更快速的響應市場需求。此時用於提高業務複用及整合的分佈式服務框架(RPC)是關鍵。

第四階段:流動計算架構

       當服務越來越多,容量的評估、小服務資源的浪費等問題逐漸顯現,此時需增加一個調度中心基於訪問壓力實時管理集羣容量,提高集羣利用率。此時用於提高機器利用率的資源調度和治理中心(SOA)是關鍵。

      下面我們來看下Dobbo的架構,第0步是服務提供者的發佈,provider的發佈需要用到容器,我們的spring便是專門用來做容器的,因此服務提供者的發佈需要用到spring。

第1步是進行註冊,就是說服務提供者在發佈之後,要在dubbo的註冊管理中心進行註冊,扮演Registry(註冊中心的最好是zookeeper,其次可以選擇redis),這樣註冊中心便知道有哪些服務可供消費者使用了。第2步是消費者要調用服務,但是它是不知道有哪些服務可供調用的,因此它需要先到註冊中心進行詢問,查詢一下是否有自己想要調用的服務,註冊中心查找之後發現有匹配的服務可供調用,便會向消費者返回可供調用的服務的IP和端口號。消費者拿到IP和端口號之後,便不再需要經過註冊中心,直接就可以訪問服務了(這就是第4步),第5步是指dobbo想要監測都是哪些消費者調用了哪些服務,調用了多少次,這樣便於管理。


       上圖的節點角色說明:

       Provider:暴露服務的服務提供方。

      Consumer:調用遠程服務的服務消費方。

      Registry:服務註冊與發現的註冊中心。

      Monitor:統計服務的調用次數和調用時間的監控中心。

      Container:服務運行容器。

      調用關係說明:

      0.服務容器負責啓動、加載,運行服務提供者。

      1.服務提供者在啓動時,向註冊中心註冊自己提供的服務。

      2.服務消費者在啓動時,向註冊中心訂閱自己所需的服務。

      3.註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連接推送變更數據給消費者。

      4.服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一臺提供者進行調用,如果調用失敗,再選另一臺調用。

      5.服務消費者和服務提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心。

Zookeeper單機版安裝

      下面我們來說下zookeeper如何安裝,在實際開發中,zookeeper都是運行在linux系統上的,因此,我們也把zookeeper安裝到linux系統上,由於我們的電腦系統是windows系統,因此要想有linux環境就需要安裝虛擬機,然後在虛擬機中進行安裝。這裏我們使用的是CentOS6虛擬機,而且是最小化安裝的CentOS,關於如何最小化安裝CentOS,大家可以參考http://blog.csdn.net/u012453843/article/details/68947589這篇博客進行學習。安裝完CentOS之後我們需要配置下靜態IP而且要保證能上網,大家可以參考:http://blog.csdn.net/u012453843/article/details/52839105這篇博客進行學習。配置完之後,我們還需要zookeeper安裝包,大家可以到http://download.csdn.net/detail/u012453843/9793647這個地址進行下載。

       做好準備條件後,我們需要使用連接工具來訪問虛擬機,我使用的是XShell,關於XShell操作服務器大家可以參考:http://blog.csdn.net/u012453843/article/details/54293774這篇博客進行學習。由於最小化安裝的CentOS沒有rz和sz命令,因此我們需要先安裝rz和sz命令,安裝命令是yum install lrzsz。

[html] view plain copy
  1. [root@zookeeper1 ~]# yum install lrzsz  
        

       最小化安裝的虛擬機是沒有vim命令的,我們需要安裝一下

[html] view plain copy
  1. [root@zookeeper1 ~]# yum install vim-enhanced  

       下面我們我們在/usr/local目錄下新建一個software目錄,專門用於存放各種安裝包(這是我個人習慣)

[html] view plain copy
  1. [root@zookeeper1 ~]# mkdir /usr/local/software  

       由於zookeeper的安裝需要JDK的支持,因此需要先安裝JDK,大家可以參考http://blog.csdn.net/u012453843/article/details/52422736這篇博客進行學習。 

       安裝完JDK後,我們使用"rz"命令來上傳zookeeper安裝包到/usr/local/software目錄下

[html] view plain copy
  1. [root@zookeeper1 software]# rz  
  2.   
  3. [root@zookeeper1 software]# ll  
  4. 總用量 16020  
  5. -rw-r--r--. 1 root root 16402010 10月 15 2016 zookeeper-3.4.5.tar.gz  
  6. [root@zookeeper1 software]#   

      下面我們解壓開發包,將安裝包解壓到/usr/local目錄下(這是我的個人習慣),我們使用的命令是:tar -zxvf zookeeper-3.4.5.tar.gz  -C /usr/local/,如下所示。

[html] view plain copy
  1. [root@zookeeper1 software]# tar -zxvf zookeeper-3.4.5.tar.gz -C /usr/local/  

       我們進入到zookeeper-3.4.5文件夾,如下所示。

[html] view plain copy
  1. [root@zookeeper1 software]# cd /usr/local/zookeeper-3.4.5/  
  2. [root@zookeeper1 zookeeper-3.4.5]# ll  
  3. 總用量 1512  
  4. drwxr-xr-x.  2 501 games    4096 4月  25 07:34 bin  
  5. -rw-r--r--.  1 501 games   75988 10月  1 2012 build.xml  
  6. -rw-r--r--.  1 501 games   70223 10月  1 2012 CHANGES.txt  
  7. drwxr-xr-x.  2 501 games    4096 4月  25 07:34 conf  
  8. drwxr-xr-x. 10 501 games    4096 4月  25 07:34 contrib  
  9. drwxr-xr-x.  2 501 games    4096 4月  25 07:34 dist-maven  
  10. drwxr-xr-x.  6 501 games    4096 4月  25 07:34 docs  
  11. -rw-r--r--.  1 501 games    1953 10月  1 2012 ivysettings.xml  
  12. -rw-r--r--.  1 501 games    3120 10月  1 2012 ivy.xml  
  13. drwxr-xr-x.  4 501 games    4096 4月  25 07:34 lib  
  14. -rw-r--r--.  1 501 games   11358 10月  1 2012 LICENSE.txt  
  15. -rw-r--r--.  1 501 games     170 10月  1 2012 NOTICE.txt  
  16. -rw-r--r--.  1 501 games    1770 10月  1 2012 README_packaging.txt  
  17. -rw-r--r--.  1 501 games    1585 10月  1 2012 README.txt  
  18. drwxr-xr-x.  5 501 games    4096 4月  25 07:34 recipes  
  19. drwxr-xr-x.  8 501 games    4096 4月  25 07:34 src  
  20. -rw-r--r--.  1 501 games 1315806 11月  5 2012 zookeeper-3.4.5.jar  
  21. -rw-r--r--.  1 501 games     833 11月  5 2012 zookeeper-3.4.5.jar.asc  
  22. -rw-r--r--.  1 501 games      33 11月  5 2012 zookeeper-3.4.5.jar.md5  
  23. -rw-r--r--.  1 501 games      41 11月  5 2012 zookeeper-3.4.5.jar.sha1  
  24. [root@zookeeper1 zookeeper-3.4.5]#   

       我們在zookeeper-3.4.5目錄下新建一個data目錄,如下圖所示。

[html] view plain copy
  1. [root@zookeeper1 zookeeper-3.4.5]# mkdir data  
  2. [root@zookeeper1 zookeeper-3.4.5]# ll  
  3. 總用量 1516  
  4. drwxr-xr-x.  2  501 games    4096 4月  25 07:34 bin  
  5. -rw-r--r--.  1  501 games   75988 10月  1 2012 build.xml  
  6. -rw-r--r--.  1  501 games   70223 10月  1 2012 CHANGES.txt  
  7. drwxr-xr-x.  2  501 games    4096 4月  25 07:34 conf  
  8. drwxr-xr-x. 10  501 games    4096 4月  25 07:34 contrib  
  9. drwxr-xr-x.  2 root root     4096 4月  25 07:35 data  
  10. drwxr-xr-x.  2  501 games    4096 4月  25 07:34 dist-maven  
  11. drwxr-xr-x.  6  501 games    4096 4月  25 07:34 docs  
  12. -rw-r--r--.  1  501 games    1953 10月  1 2012 ivysettings.xml  
  13. -rw-r--r--.  1  501 games    3120 10月  1 2012 ivy.xml  
  14. drwxr-xr-x.  4  501 games    4096 4月  25 07:34 lib  
  15. -rw-r--r--.  1  501 games   11358 10月  1 2012 LICENSE.txt  
  16. -rw-r--r--.  1  501 games     170 10月  1 2012 NOTICE.txt  
  17. -rw-r--r--.  1  501 games    1770 10月  1 2012 README_packaging.txt  
  18. -rw-r--r--.  1  501 games    1585 10月  1 2012 README.txt  
  19. drwxr-xr-x.  5  501 games    4096 4月  25 07:34 recipes  
  20. drwxr-xr-x.  8  501 games    4096 4月  25 07:34 src  
  21. -rw-r--r--.  1  501 games 1315806 11月  5 2012 zookeeper-3.4.5.jar  
  22. -rw-r--r--.  1  501 games     833 11月  5 2012 zookeeper-3.4.5.jar.asc  
  23. -rw-r--r--.  1  501 games      33 11月  5 2012 zookeeper-3.4.5.jar.md5  
  24. -rw-r--r--.  1  501 games      41 11月  5 2012 zookeeper-3.4.5.jar.sha1  
  25. [root@zookeeper1 zookeeper-3.4.5]#  


      下面我們進入到conf目錄下,可以看到該目錄下有個zoo_sample.cfg文件。

[html] view plain copy
  1. [root@zookeeper1 zookeeper-3.4.5]# cd conf  
  2. [root@zookeeper1 conf]# ll  
  3. 總用量 12  
  4. -rw-r--r--. 1 501 games  535 10月  1 2012 configuration.xsl  
  5. -rw-r--r--. 1 501 games 2161 10月  1 2012 log4j.properties  
  6. -rw-r--r--. 1 501 games  808 10月  1 2012 zoo_sample.cfg  
  7. [root@zookeeper1 conf]#   

       我們需要將zoo_sample.cfg文件改下名字,如下圖所示。

[html] view plain copy
  1. [root@zookeeper1 conf]# mv zoo_sample.cfg zoo.cfg  
  2. [root@zookeeper1 conf]# ll  
  3. 總用量 12  
  4. -rw-r--r--. 1 501 games  535 10月  1 2012 configuration.xsl  
  5. -rw-r--r--. 1 501 games 2161 10月  1 2012 log4j.properties  
  6. -rw-r--r--. 1 501 games  808 10月  1 2012 zoo.cfg  
  7. [root@zookeeper1 conf]#   

      下面我們來修改zoo.cfg文件,我們使用的命令是vi zoo.cfg,在打開的文件中修改"dataDir"的路徑爲我們上面創建的data的絕對路徑。如下所示。

[html] view plain copy
  1. [root@zookeeper1 conf]# vi zoo.cfg   
  2.   
  3. # The number of milliseconds of each tick  
  4. tickTime=2000  
  5. # The number of ticks that the initial  
  6. # synchronization phase can take  
  7. initLimit=10  
  8. # The number of ticks that can pass between  
  9. # sending a request and getting an acknowledgement  
  10. syncLimit=5  
  11. # the directory where the snapshot is stored.  
  12. # do not use /tmp for storage, /tmp here is just  
  13. # example sakes.  
  14. dataDir=/usr/local/zookeeper-3.4.5/data  
  15. # the port at which the clients will connect  
  16. clientPort=2181  

     修改完zoo.cfg之後,按ESC退出編輯模式,然後按Shift+ZZ來保存並退出zoo.cfg,這樣我們便配置好了。接下來我們便啓動zookepper,我們進入到bin目錄下,使用命令./zkServer.sh start來啓動zookeeper,啓動完之後,我們可以使用./zkServer.sh status來查看啓動狀態,如下圖所示。

[html] view plain copy
  1. [root@zookeeper1 zookeeper-3.4.5]# cd bin  
  2. [root@zookeeper1 bin]# ls  
  3. README.txt  zkCleanup.sh  zkCli.cmd  zkCli.sh  zkEnv.cmd  zkEnv.sh  zkServer.cmd  zkServer.sh  
  4. [root@zookeeper1 bin]# ./zkServer.sh start  
  5. JMX enabled by default  
  6. Using config: /usr/local/zookeeper-3.4.5/bin/../conf/zoo.cfg  
  7. Starting zookeeper ... STARTED  
  8. [root@zookeeper1 bin]# ./zkServer.sh status  
  9. JMX enabled by default  
  10. Using config: /usr/local/zookeeper-3.4.5/bin/../conf/zoo.cfg  
  11. Mode: standalone  
  12. [root@zookeeper1 bin]#   

      如果想關閉zookeeper可以使用命令./zkServer.sh stop來關閉,這裏就不演示了。啓動完zookeeper,我們便有註冊中心了。

      注:如果出現端口無法訪問的情況,請關閉防火牆,並且設置開機也不啓動

[html] view plain copy
  1. [root@zookeeper1 bin]# service iptables stop  
       設置開機不啓動

[html] view plain copy
  1. [root@zookeeper1 bin]# chkconfig iptables off  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章