從傳統架構、RPC、SOA、到微服務,一張圖搞定

一、傳統架構

傳統的架構MVC分層,單體應用的缺點:

  • 複雜的應用開發維護成本變高,部署效率逐漸降低,一個功能出現問題,整個系統就得重新打包
  • 團隊協作效率變差,公共功能重複開發,代碼重複率太高
  • 系統可靠性變差、流量、負載均衡、數據庫壓力變大,因為在一個進程中,如果出現內存溢出等故障,將導致整個節點崩潰,然後集群中的其他節點也會如此
  • 維護和定製困難,無法隨時拆分,修改一處,牽一髮動全身
  • 新功能上線週期變長,因為公共功能的變更導致測試工作量激增,因為重複代碼多,一個地方修改需要同時修改多個地方,然後修改後繼續測試
  • 新功能無法獨立打包測試,需要和整個系統進行一起打包,出現bug會導致整個系統重新部署,強耦合導致效率低下

二、RPC架構

遠程過程調用協議

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

1、RPC架構分為三個部分

  • 服務提供者,運行在服務器端,提供服務接口定義與服務實現類
  • 服務中心,運行在服務器端,負責將本地服務發佈成遠程服務,管理遠程服務,提供給服務消費者使用
  • 服務消費者,運行在客戶端,通過遠程代理對象調用遠程服務

2、RPC框架的核心技術點

  • 遠程服務提供者需要以某種形式提供服務的調用相關信息,包括但是不限於服務接口定義,數據結構,或者中間態的服務定義文件,服務調用者需要通過一定的途徑獲取遠程服務的調用相關信息,例如接口的定義jar包等
  • 遠程代理對象:服務調用者調用的服務實際是遠程服務的本地代理,對於java而言,他的實現就是jdk動態代理,通過動態代理攔截機制,將本地調用封裝成遠程服務調用
  • 通信:RPC框架與具體的協議無關只要雙方遵從約定好的即可,比如可以使http、invoke,可以是rmiinvoke,也可以是其他任意的二進制壓縮協議
  • 序列化:遠程通信,需要將對象轉成二進制數據進行網絡傳輸,不同的是需要將數據序列化,不同的序列化框架支持的數據類型,數據包大小,異常類型或者性能都不同
  • 不同的RPC框架針對的場景不同,因此技術選擇也各不相同,一些框架支持多種序列化框架,甚至支持用戶自定義序列化框架

3、RPC框架的問題

  • 在大規模服務化之前,應用肯值通過RPC框架,簡單的暴露和引用遠程服務,通過配置的url地址進行遠程調用,路由通過硬件進行簡單的負載均衡
  • 在服務越來越多,服務的url越來越多,管理越來越困難,負載均衡單點壓力變大,此時需要一個服務的註冊中心,動態的註冊和發現服務,是服務位置透明,消費者在本地緩存服務提供者列表,實現軟負載均衡,可以降低硬件負載的依賴,降低硬件成本
  • 隨著業務的發展,服務間的依賴關係變得錯綜複雜,甚至分不清哪個應用需要在哪個應用之前啟動,需要一個分佈式消息跟蹤系統可視化服務調用鏈,用於分析,業務調用路徑梳理,防止服務架構腐化
  • 服務的調用量越來越大,服務的容量問題就出現了,某個服務需要多少個機器支撐,什麼時候該加機器,服務上線容易下線難,上線的審批,下線的通知,需要統一的服務生命週期管理流程進行管控,不同的服務安全權限不同,如何保證敏感數據服務不被誤用,服務的訪問安全策略如何定製
  • 服務化後隨之而來的就是服務治理問題,純粹的RPC框架服務治理能力都不強悍,需要通過服務框架+服務治理來完成

三、SOA服務化架構

在原來的RPC基礎上加上了服務治理中心

微服務MSA

  • 原子服務,細粒度
  • 獨立部署,只要是容器

MSA與SOA的對比:

  • 服務拆分粒度:soa首要解決的是異構系統的服務化,微服務專注服務的拆分
  • 服務依賴soa只要處理已有系統,重用已有的資產,存在大量服務間依賴微服務強調服務自治,原子性,避免依賴耦合的產生
  • 服務規模soa服務粒度大,大多數將多個服務合併打包,因此服務實例數有限微服務強調自治,服務獨立部署,導致規模膨脹,服務治理有挑戰
  • 架構差異微服務通常是去中心化的,soa通常是基於ESB的
  • 服務治理微服務的動態治理,實施管控soa通常是靜態配置治理
  • 交付微服務的小團隊作戰,再有了docker後,微服務這個概念突然火了起來,總結就是微服務+容器+DevOps

架構演進歷史:


從傳統架構、RPC、SOA、到微服務,一張圖搞定


分享到:


相關文章: