分布式架構的基本介紹
1、分布式系統中的相關概念
1.1、衡量網站的性能指標
- 響應時間:指執行一個請求從開始到最后收到響應數據所花費的總體時間。
- 并發數:指系統同時能處理的請求數量。
- 并發連接數:指的是客戶端向服務器發起請求,并建立了TCP連接。每秒鐘服務器連接的總TCP數量
- 請求數:也稱為QPS(Query Per Second) 指每秒多少請求
- 并發用戶數:單位時間內有多少用戶
- 吞吐量:指單位時間內系統能處理的請求數量。
- QPS:Query Per Second 每秒查詢數。
- TPS:Transactions Per Second 每秒事務數。
- 一個事務是指一個客戶機向服務器發送請求然后服務器做出反應的過程??蛻魴C在發送請求時開始計時,收到服務器響應后結束計時,以此來計算使用的時間和完成的事務個數。
- 一個頁面的一次訪問,只會形成一個TPS;但一次頁面請求,可能產生多次對服務器的請求,就會有多個QPS
1.2、集群和分布式
- 集群:可以簡單理解為多節點、同模塊。
- 分布式(Distributed):分布式是指將任務、數據、服務等分散到多臺計算機上進行處理,而不是單純依賴于一臺計算機。它的目標是提高系統的性能、可靠性、可擴展性和容錯性。可以簡單理解為,分布式就是通過多個節點(計算機)共同協作來完成一個整體任務。(簡單理解就是多節點、多模塊)
2、架構演進
隨著互聯網的發展,互聯網企業的業務也在不斷的飛速發展,進而導致系統的架構也在不斷的發生著變化??傮w來說,系統的架構大致經歷了:單體應用架構—>垂直應用架構—>分布式架構—>SOA架構—>微服務架構的演變。

2.1、單體應用架構(單機單體架構、集群單體架構)
在企業發展的初期,一般公司的網站流量都比較小,只需要一個應用,將所有的功能代碼打包成一個服務,部署到服務器上就能支撐公司的業務。這樣也能夠減少開發、部署和維護的成本。比如,大家都很熟悉的電商系統,里面涉及的業務主要有:用戶管理、商品管理、訂單管理、支付管理、庫存管理、物流管理等等模塊,初期我們會將所有模塊寫到一個Web項目中,然后統一部署到一個Web服務器中。
優點: 簡單:開發部署都很方便,小型項目首選
缺點: 項目啟動慢 可靠性差 可伸縮性差 擴展性和可維護性差 性能低

2.2、垂直架構(拆分成多個單體架構)
垂直架構是指將單體架構中的多個模塊拆分為多個獨立的項目,形成多個獨立的單體架構。
垂直架構根據業務屬性將一個大的單體應用拆分成多個模塊或子系統,子系統之間沒有直接關聯。 垂直架構相較于單體架構而言,進行了部分解耦,但是不夠徹底,在各個子系統相互依賴的代碼和模塊中,存在模塊功能重復開發和重復代碼拷貝的情況。

垂直架構存在的問題: 重復功能太多。
2.3、分布式架構(重復模塊抽取為公共服務)
將系統演變為垂直應用架構之后,當垂直應用越來越多時,重復編寫的業務代碼就會越來越多。此時,我們需要將重復的代碼抽象出來,形成統一的服務,供其他系統或者業務模塊調用,這就是分布式架構。
分布式架構是指在垂直架構的基礎上,將公共業務模塊抽取出來,作為獨立的服務,供其他調用者消費,以實現服務的共享和重用。
這種架構的優點如下:
- 將重復的業務代碼抽象出來,形成公共的訪問服務,提高了代碼的復用性。
- 可以有針對性地對系統和服務進行性能優化,以提升整體的訪問性能。
這種架構的缺點如下:
- 服務之間直接調用,服務提供方地址等信息一旦產生變更,所有消費方都需要變更。
- 系統之間的調用關系變得復雜,系統之間的依賴關系變得復雜,系統維護成本高。
在分布式架構中,我們會將系統整體拆分為服務層和表現層。服務層封裝了具體的業務邏輯供表現層調用,表現層則負責處理與頁面的交互操作。分布式系統架構如下圖示例:

RPC:Remote Procedure Call 遠程過程調用。有非常多的協議和技術來都實現了RPC的過程。比如:HTTP REST風格,Java RMI規范、WebService SOAP協議、Hession等等。
2.4、SOA架構(調度中心)
在分布式架構下,當部署的服務越來越多時,重復的代碼就會變得越來越多,不利于代碼的復用和系統維護。為此,我們需要增加一個統一的調度中心對集群進行實時管理,這就是SOA(Service-Oriented Architecture,面向服務的架構)架構。

這種架構的優點是通過注冊中心解決了各個服務之間服務依賴和調用關系的自動注冊與發現。
這種架構的缺點:服務之間的依賴與調用關系復雜,增加了測試和運維的成本。
2.5、微服務架構
微服務架構是在SOA架構的基礎上進行進一步的擴展和拆分。在微服務架構下,一個大的項目拆分為一個個小的可獨立部署的微服務,每個微服務都有自己的數據庫。微服務架構強調的一個重點是“業務需要徹底的組件化和服務化”,原有的單個業務系統會拆分為多個可以獨立開發、設計、運行的小應用,這些小應用之間通過服務完成交互和集成。
微服務架構特征:
- 單一職責:微服務拆分粒度更小,每一個服務都對應唯一的業務能力,做到單一職責,避免重復業務開發
- 面向服務:微服務對外暴露業務接口
- 自治:團隊獨立、技術獨立、數據獨立、部署獨立
- 隔離性強:服務調用做好隔離、容錯、降級,避免出現級聯問題
優點:服務徹底拆分,各服務獨立打包、獨立部署和獨立升級。每個微服務負責的業務比較清晰,利于后期擴展和維護。微服務之間可以采用REST和RPC協議進行通信。
缺點:架構非常復雜,運維、監控、部署難度提高。開發的成本比較高。涉及到各服務的容錯性問題。涉及到數據的一致性問題。涉及到分布式事務問題
3、分布式和微服務架構的區別
總的來說,分布式主要是有多個服務器,而微服務主要注重服務的拆分,微服務并不一定是部署在多個服務器上,也可能只是在一個服務器上(基本很少見)。即分布式是多節點多模塊,而微服務有可能是單節點多模塊,但通常也是多節點多模塊的。
分布式服務顧名思義服務是分散部署在不同的機器上的,一個服務可能負責幾個功能,是一種面向SOA架構的,服務之間也是通過rpc來交互或者是webservice來交互的。
微服務與分布式的細微差別是,微服務的應用不一定是分散在多個服務器上也可以是同一個服務器。
分布式服務架構強調的是服務化以及服務的分散化,而微服務則更強調服務拆分的專業化和精細分工。分布式也可以理解為屬于微服務,但可能服務拆分沒那么細致,而微服務架構通常也是分布式的架構。
4、框架
Dubbo 是 SOA 時代的產物,SpringCloud 是微服務時代的產物。
4.1、Dubbo
Dubbo框架是由阿里巴巴開發的開源式的分布式服務化治理框架,它會通過RPC請求方式訪問。Dubbo是在阿里巴巴的電商平臺中逐漸探索演進所形成的,經歷過復雜業務的高并發挑戰。
4.2、Spring Cloud
Spring Cloud不是一個單獨框架,它是一整個系列的框架合計,它是基于HTTP(s)的RETS服務構建服務體系的。Spring Cloud能夠幫助架構師構建一整套完整的微服務架構技術生態鏈。
SpringCloud是目前國內使用最廣泛的微服務框架。官網地址:https://spring.io/projects/spring-cloud。 SpringCloud集成了各種微服務功能組件,并基于SpringBoot實現了這些組件的自動裝配,從而提供了良好的開箱即用體驗:

springcloud 與 springboot的版本兼容關系:

4.3、微服務框架對比

5、RPC協議
RPC(Remote Procedure Call)是一種進程間通信方式,簡單地說就是能使應用像調用本地方法一樣的調用遠程的過程或服務,可以應用在分布式服務、分布式計算、遠程服務調用等許多場景。
5.1、常見的RPC協議
5.2、RPC協議和Dubbo、HTTP協議的關系
- HTTP 協議可作為 RPC 的傳輸層協議:RPC 需要一種方式在網絡中傳輸請求和響應數據,HTTP 協議可以充當這個傳輸層協議?;?HTTP 協議的 RPC 實現具有良好的跨平臺和跨語言特性,因為 HTTP 協議是一種通用的網絡協議,幾乎所有的編程語言和平臺都支持。例如 JSON - RPC 就是一種基于 HTTP 協議的輕量級 RPC 協議,它使用 JSON 格式來編碼請求和響應數據,簡單易用,適合快速開發和集成。
- RPC 對 HTTP 協議的擴展:雖然 HTTP 協議提供了基本的請求 - 響應機制,但在一些復雜的分布式系統中,可能需要更多的功能,如服務發現、負載均衡、容錯等。RPC 協議在使用 HTTP 作為傳輸層的基礎上,會對這些功能進行擴展。例如,一些基于 HTTP 的 RPC 框架會在 HTTP 請求頭中添加額外的元數據來實現服務發現和負載均衡等功能。
- Dubbo 框架支持 HTTP 協議:Dubbo 框架除了默認的 Dubbo 協議外,還支持 HTTP 協議。當使用 HTTP 協議時,Dubbo 服務可以更好地與其他遵循 HTTP 協議的系統進行交互,或者部署在一些需要通過防火墻的環境中。例如,當 Dubbo 服務需要與前端的 Web 應用進行交互時,使用 HTTP 協議可以方便地實現數據傳輸。
- 應用場景和性能特點不同:Dubbo 協議基于 TCP 協議,采用單一長連接和 NIO 異步通訊,在高并發、小數據量的服務調用場景中性能表現較好;而 HTTP 協議是一種無狀態的協議,基于請求 - 響應模型,更適合于對跨平臺、跨語言和兼容性要求較高的場景。在實際應用中,可以根據具體的業務需求選擇使用 Dubbo 協議還是 HTTP 協議。
5.3、RESTful API和 RPC 協議
RESTful API 和 RPC(遠程過程調用)協議都是用于實現不同軟件系統之間通信的技術手段,但它們在多個方面存在差異。兩者有明顯區別,沒太大關系。
6、序列化和反序列化
- 什么是序列化?序列化就是將數據結構或對象轉換成二進制串的過程,也就是編碼的過程
- 什么是反序列化?將在序列化過程中所生成的二進制串轉換成數據結構或對象的過程
- 為什么需要序列化?轉換為二進制串才好進行網絡傳輸嘛
- 為什么需要反序列化?將二進制串轉換成對象才好進行后續處理嘛

浙公網安備 33010602011771號