學習目標
- 瞭解應用架構演進過程
- 瞭解RPC遠程調用方式
- 掌握Dubbo框架的架構【重點】
- 掌握Zookeeper註冊中心的基本使用
- 掌握Dubbo生產者和消費者的開發【重點】
- 瞭解Dubbo的管理控制檯的使用
- 瞭解Dubbo的相關配置
- 瞭解Dubbo的負載均衡(4種)
- 瞭解Dubbo的配置中心(難點 代碼 Watch)
1. 應用架構的演進過程 【瞭解】
1.1 主流的互聯網技術特點
分佈式、高併發、集羣、負載均衡、高可用。
分佈式:一件事情拆開來做。
集羣:一件事情大家一起做。
負載均衡:將請求平均分配到不同的服務器中,達到均衡的目的。
高併發:同一時刻,處理同一件事情的處理能力(解決方案:分佈式、集羣、負載均衡)
高可用:系統都是可用的。
1.2 架構的演變過程
1.2.1 單一應用架構(all in one)
當網站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節點和成本。此時,用於簡化增刪改查工作量的數據訪問框架(ORM)是關鍵。
-
架構優點:
架構簡單,前期開發成本低、開發週期短,適合小型項目(OA、CRM、ERP企業內部應用)。
-
架構缺點:
全部功能集成在一個工程中
(1)業務代碼耦合度高,不易維護。
(2)維護成本高,不易拓展。
(3)併發量大,不易解決。
(4)技術棧受限,只能使用一種語言開發。
1.2.2. 垂直應用架構
當訪問量逐漸增大,單一應用增加機器帶來的加速度越來越小,將應用拆成互不相干的幾個應用,以提升效率。此時,用於加速前端頁面開發的Web框架(MVC)是關鍵。
-
架構優點:
(1)業務代碼相對解耦
(2)維護成本相對易於拓展(修改一個功能,可以直接修改一個項目,單獨部署)
(3)併發量大相對易於解決(搭建集羣)
(4)技術棧可擴展(不同的系統可以用不同的編程語言編寫)
-
架構缺點:
功能集中在一個項目中,不利於開發、擴展、維護。
代碼之間存在數據、方法的冗餘
1.2.3. 分佈式服務架構
當垂直應用越來越多,應用之間交互不可避免,將核心業務抽取出來,作爲獨立的服務,逐漸形成穩定的服務中心,使前端應用能更快速的響應多變的市場需求。此時,用於提高業務複用及整合的分佈式服務框架(RPC)是關鍵。
-
架構優點:
(1)業務代碼完全解耦,並可實現通用
(2)維護成本易於拓展(修改一個功能,可以直接修改一個項目,單獨部署)
(3)併發量大易於解決(搭建集羣)
(4)技術棧完全擴展(不同的系統可以用不同的編程語言編寫)
-
架構缺點:
缺少統一管理資源調度的框架
1.2.4. 流動計算架構(SOA)
當服務越來越多,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需增加一個調度中心基於訪問壓力實時管理集羣容量,提高集羣利用率。此時,用於提高機器利用率的資源調度和治理中心(SOA)是關鍵。
資源調度和治理中心的框架:dubbo、spring cloud
-
架構優點:
(1)業務代碼完全解耦,並可實現通用
(2)維護成本易於拓展(修改一個功能,可以直接修改一個項目,單獨部署)
(3)併發量大易於解決(搭建集羣)
(4)技術棧完全擴展(不同的系統可以用不同的編程)
(5)框架實現了服務治理,不去擔心集羣的使用情況(失敗會嘗試其它服務....)
【小結】
1:單體架構
全部功能集中在一個項目內(All in one)。 打一個war, 一個tomcat
2:垂直架構
按照業務進行切割,形成小的單體項目。 每個業務模塊就是一個war,一個tomcat
3 : 分佈式:應用調用服務(ip寫死),服務掛了就不能用了,缺少服務治理。把業務服務(service+dao)拆分成一個war包,一個tomcat裏。
4:SOA架構(項目一)
服務的提供者(以服務爲主 service調用dao->數據庫),消費者。
服務提供者與消費都註冊到中心,由中心統一管理分配,失敗重試,負載均衡。。。有服務治理
可以使用dubbo作爲調度的工具(RPC協議), Zookeeper作爲註冊中心
5:微服務架構(項目二 暢購 Springboot+Spring Cloud)
將系統服務層完全獨立出來,抽取爲一個一個的微服務。 以功能爲主(controller->service-dao->數據庫 獨立)
特點一:抽取的粒度更細,遵循單一原則,數據可以在服務之間完成數據傳輸(一般使用restful請求調用資源)。
特點二: 採用輕量級框架協議傳輸。(可以使用spring cloud)(http協議 restful json)
特點三: 每個服務都使用不同的數據庫,完全獨立和解耦 (分庫分表)。
2. RPC(遠程過程調用)
2.1 RPC介紹
Remote Procedure Call 遠程過程調用,是分佈式架構的核心,按響應方式分如下兩種:
同步調用:客戶端調用服務方方法,等待直到服務方返回結果或者超時,再繼續自己的操作。
異步調用:客戶端把消息發送給中間件,不再等待服務端返回,直接繼續自己的操作。
-
是一種進程間的通信方式
-
它允許應用程序調用網絡上的另一個應用程序中的方法
-
對於服務的消費者而言,無需瞭解遠程調用的底層細節,是透明的
需要注意的是RPC並不是一個具體的技術,而是指整個網絡遠程調用過程。
RPC是一個泛化的概念,嚴格來說一切遠程過程調用手段都屬於RPC範疇。各種開發語言都有自己的PRC框架。Java中的RPC框架比較多,廣泛使用的有RMI、Hessian、Dubbo、spring Cloud(restapi http)等。
一臺電腦調用另一臺電腦上的方法
2.2 RPC組件【重點】
簡單來說一個RPC架構裏包含如下4個組件
1、客戶端(Client):服務調用者
2、客戶端存根(Client Stub):存放服務端地址信息,將客戶端的請求參數打包成網絡信息,再通過網絡發送給服務方
3、服務端存根(Server Stub):接受客戶端發送過來的消息並解包,再調用本地服務
4、服務端(Server):服務提供者
2.3 RPC調用
1、服務調用方(client)調用以本地調用方式調用服務;
2、client stub 接收到調用後負責將方法、參數等組裝成能夠進行網絡傳輸的消息體。在Java裏就是序列化的過程;
3、client stub 找到服務地址,並將消息通過網絡發送到服務端;
4、server stub 接收到消息後進行解碼,在Java裏就是反序列化的過程;
5、server stub 根據解碼結果調用本地的服務;
6、本地服務執行處理邏輯;
7、本地服務將結果返回給server stub;
8、server stub 將返回結果打包拆成消息,Java裏的序列化;
9、server stub 將打包後的消息通過網絡併發送至消費方;
10、client stub 接收到消息,並進行解碼,Java裏反序列化;
11、服務調用方(client)得到最終結果。
【小結】
1:RPC 遠程過程調用 調用另一個應用的方法
2:RPC組件及調用過程
客戶端->客戶端存根->服務端存根->服務端->服務端存根->客戶端存根->客戶端
3:調用方式 接口調用
- Web Service 接口 http+soap
- Dubbo 接口