SpringBoot 分布式系統簡單了解
SpringBoot 框架的使用基本是了解的差不多了,馬上就進入微服務的階段了,在此之前必須要了解什么是分布式系統,
1. 分布式系統簡介
分布式系統(distributed system)是建立在網路之上的軟體系統,在《分布式系統原理與范型》書中有分布式系統的定義:“分布式系統是若干獨立計算機的集合,這些計算機對于用戶來說就像單個相關系統”,
分布式系統是由一組通過網路進行通信、為了完成共同的任務而協調作業的計算機節點組成的系統,分布式系統的出現是為了用廉價的、普通的機器完成單個計算機無法完成的計算、存盤任務,其目的是利用更多的機器,處理更多的資料,
但是,只有當單個節點的處理能力無法滿足日益增長的計算、存盤任務的時候,且硬體的提升(加記憶體、加磁盤、使用更好的CPU)高昂到得不償失的時候,應用程式也不能進一步優化的時候,才需要考慮分布式系統,因為,分布式系統要解決的問題本身就是和單機系統一樣的,而由于分布式系統多節點、通過網路通信的拓撲結構,會引入很多單機系統沒有的問題,雖然分布式系統有潛在的問題,但其優點遠大于缺點,而且這些缺點也正得到克服,因此,分布式系統仍是人們研究、開發和應用的方向,
1.1 Web應用發展程序
從 Dubbo 應用架構演進圖看 Web 應用的發展程序
- 單一應用架構:當網站訪問量很小時,將所有的功能都部署在一個應用中,可以減少開發和部署的成本,此時,用于簡化增刪改查作業量的資料訪問框架(ORM)是關鍵,這種方式也有很多的缺點:協同開發較難、性能擴展較難、不利于升級維護,
- 垂直應用架構:當網站訪問量逐漸增大,單一應用部署的缺點逐漸暴露,此時將應用分解為幾個應用,以提高效率,此時,用于加速前端頁面開發的 Web 框架(MVC)是關鍵,這種方式的缺點為:公用模塊無法重復利用造成開發的浪費,
- 分布式服務架構:當垂直應用越來越多,應用之間的互動不可避免,此時將核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心,以使應用能更快速地回應多變的市場需求,此時,用于提高業務復用及整合的**分布式服務框架(RPC)**是關鍵,
- 流動計算架構:當服務越來越多時,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需增加一個調度中心基于訪問壓力實時管理集群容量,提高集群利用率,此時,用于提高機器利用率的資源調度和治理中心(SOA,Service Oriented Architecture)是關鍵,
1.2 什么是RPC
RPC(Remote Procedure Call),即遠程程序呼叫,是一種行程間的通信方式,它是一種技術的思想,而不是規范,**RPC 的目的是使程式呼叫另一個地址空間(即不在同一塊記憶體上,通常是共享網路的另一臺機器上)的程序或函式,而不用程式員顯式編碼這個遠程呼叫的細節,**即程式員無論是呼叫本地的還是遠程的函式,本質上撰寫的呼叫代碼基本相同,
舉個例子:現在有兩臺服務器 A 和 B,其中一個應用部署在 A 上,而 A 的某個業務需要呼叫 B 上的應用提供的方法,由于兩個應用不在同一個地址空間,所以不能直接呼叫,需要通過網路進行呼叫和傳遞資料,而此時 RPC 的作用就是讓這個呼叫程序像呼叫本地的方法一樣,而不用編碼其中的具體細節,RPC 的核心是通訊和序列化,
詳細解釋什么是 RPC
https://www.jianshu.com/p/2accc2840a1b
2. 分布式環境搭建
2.1 Dubbo簡介
Apache Dubbo 是一款高性能、輕量級的開源 Java RPC 框架,它具有三大核心功能:面向介面的遠程方法呼叫、智能容錯和負載均衡、服務自動注冊和發現,
Dubbo 架構圖中包含了 Dubbo 的基本概念
- 服務提供者(Provider):暴露服務的服務提供方,服務提供者在啟動時,向注冊中心注冊自己提供的服務;
- 服務消費者(Consumer):呼叫遠程服務的服務消費方,服務消費者在啟動時,向注冊中心訂閱自己所需的服務,服務消費者從提供者地址串列中,基于軟負載均衡演算法,選一臺提供者進行呼叫,如果呼叫失敗,再選另一臺呼叫;
- 注冊中心(Registry):注冊中心回傳服務提供者地址串列給消費者,如果有變更,注冊中心將基于長連接推送變更資料給消費者;
- 監控中心(Monitor):服務消費者和提供者,在記憶體中累計呼叫次數和呼叫時間,定時每分鐘發送一次統計資料到監控中心,
其中的呼叫關系流程為
- 服務容器負責啟動(0. start),加載,運行服務提供者;
- 服務提供者在啟動時,向注冊中心注冊(1. register)自己提供的服務;
- 服務消費者在啟動時,向注冊中心訂閱(2. subscribe)自己所需的服務,
- 注冊中心回傳(3. notify)服務提供者地址串列給消費者,如果有變更,注冊中心將基于長連接推送變更資料給消費者;
- 服務消費者,從提供者地址串列中,基于軟負載均衡演算法,選一臺提供者進行呼叫(4. invoke),如果呼叫失敗,再選另一臺呼叫;
- 服務消費者和提供者,在記憶體中累計呼叫次數和呼叫時間,定時每分鐘發送(5. count)一次統計資料到監控中心,
了解基本概念和呼叫流程后,可以發現注冊中心在分布式服務中扮演了一個中間商的角色,操辦起了一整套的分布式服務,因此要使用分布式環境,需要從注冊中心開始,Dubbo 官方檔案推薦我們使用 ZooKeeper 注冊中心,
2.2 ZooKeeper安裝
ZooKeeper 是一個分布式的,開放原始碼的分布式應用程式協調服務,它是一個為分布式應用提供一致性服務的軟體,提供的功能包括:配置維護、域名服務、分布式同步、組服務等,
ZooKeeper 的目標就是封裝好復雜易出錯的關鍵服務,將簡單易用的介面和性能高效、功能穩定的系統提供給用戶,
-
在 Windows 中安裝 ZooKeeper,可以直接在 https://dlcdn.apache.org/zookeeper/zookeeper-3.7.0/ 下載 ZooKeeper 的已編譯版本(帶 bin 的),直接解壓即可 ;
-
啟動 /bin/zkServer.cmd 以開啟服務,但初次啟動缺少 zoo.cfg 組態檔,所以沒有效果;編輯zkServer.cmd 在最后添加 pause 命令,在啟動的時候就可以查看具體資訊了;
-
將 conf 檔案夾下的 zoo_sample.cfg 復制一份,命名為 zoo.cfg 就得到了 ZooKeeper 的組態檔,其中的
dataDir=/tmp/zookeeper表示臨時資料的存盤路徑,clientPort=2181表示 ZooKeeper 的埠號; -
此時打開先打開服務端 zkServer.cmd,沒有閃退表明開啟成功,再開啟客戶端 zkCli.cmd,其中出現
[zk: localhost:2181(CONNECTED) 0]表明連接成功; -
使用
ls /命令展示出所有節點:[zk: localhost:2181(CONNECTED) 0] ls / [zookeeper] -
使用
create –e /qiyuan 723命令創建一個節點,名字為 qiyuan,值為 723:[zk: localhost:2181(CONNECTED) 1] create -e /qiyuan 723 Created /qiyuan [zk: localhost:2181(CONNECTED) 2] ls / [qiyuan, zookeeper] -
使用
get /qiyuan命令查看節點的資訊:[zk: localhost:2181(CONNECTED) 3] get /qiyuan 723 -
簡單的 ZooKeeper 安裝及測驗就先完成了!
2.3 Dubbo-Admin安裝
Dubbo 本身并不是一個服務軟體而是一個 jar 包,能夠使 Java 程式連接到 ZooKeeper,并利用 ZooKeeper進行消費或提供服務,
為了讓用戶更好地管理 Dubbo 中的服務,官方提供了可視化的監控程式 Dubbo-Admin,現在也進行安裝,
-
在 https://github.com/apache/dubbo-admin/tree/master 中下載壓縮包并直接解壓;
-
在 dubbo-admin-master\dubbo-admin-server\src\main\resources 目錄下的
application.properties檔案中可以設定 zookeeper 的埠等(明顯的 SpringBoot 專案); -
使用
mvn clean package -Dmaven.test.skip=true命令在專案目錄下進行打包,打包完成后,在 dubbo-admin-master\dubbo-admin-server\target 目錄下可以找到 dubbo-admin-server-0.3.0 的 jar 包 -
在 jar 包目錄中使用
java -jar dubbo-admin-server-0.3.0.jar命令直接運行 jar 包;已知問題:若 ZooKeeper 版本為 3.5 以上,則服務端默認使用的埠為 8080,而 Dubbo-Admin 也要使用 8080 埠,所以需要在 zoo.cfg 中添加
admin.serverPort=``8888以修改埠, -
開啟 Dubbo-Admin 服務后,在 ZooKeeper 服務端打開的情況下訪問 localhost:8080 即可進入管理頁面,默認用戶名和密碼都是 root,
這樣 Dubbo-Admin 監控服務就安裝完成了!
3. 總結
從這節開始,就進入分布式服務階段了,本節也只是進行了一些基礎知識的了解和測驗環境的搭建,還有很多內容需要學習😵,
新年快樂,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/423267.html
標籤:其他
