Apache Dubbo | 應用架構的演進過程、RPC(遠程過程調用)

學習目標

  • 瞭解應用架構演進過程
  • 瞭解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 接口
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章