SpringCloud學習筆記之微服務基礎知識
- 1 系統架構的演變
-
- 1.1 單體應用架構
- 1.2 垂直應用架構
- 1.3 分布式SOA架構
-
- 1.3.1 什麼是SOA
- 1.3.2 SOA架構
- 1.4 微服務架構
- 1.5 SOA與微服務的關系
- 2 分布式核心知識
-
- 2.1 分布式中的遠端調用
-
- (1)RESTful接口
- (2)RPC協定
- (3)差別與聯系
- 2.2 分布式中的CAP原理
- 3 常見微服務架構
-
- 3.1 SpringCloud
- 3.2 ServiceComb
- 3.3 ZeroC ICE
1 系統架構的演變
随着網際網路的發展,網站應用的規模不斷擴大,正常的應用架構已無法應對,分布式服務架構以及微服務架構勢在必行,亟需一個治理系統確定架構有條不紊的演進。
1.1 單體應用架構
Web應用程式發展的早期,大部分web工程(包含前端頁面,web層代碼,service層代碼,dao層代碼)是将所有的功能子產品,打包到一起并放在一個web容器中運作。

比如搭建一個電商系統:客戶下訂單,商品展示,使用者管理。這種将所有功能都部署在一個web容器中運作的系統就叫做單體架構。
優點:
- 所有的功能內建在一個項目工程中
- 項目架構簡單,前期開發成本低,周期短,小型項目的首選。
缺點
- 全部功能內建在一個工程中,對于大型項目不易開發、擴充及維護。
- 系統性能擴充隻能通過擴充叢集結點,成本高、有瓶頸。
- 技術棧受限。
1.2 垂直應用架構
當通路量逐漸增大,單一應用增加機器帶來的加速度越來越小,将應用拆成互不相幹的幾個應用,以提升效率
優點:
- 項目架構簡單,前期開發成本低,周期短,小型項目的首選。
- 通過垂直拆分,原來的單體項目不至于無限擴大不同的項目可采用不同的技術
- 不同的項目可采用不同的技術。
缺點
- 全部功能內建在一個工程中,對于大型項目不易開發、擴充及維護。
- 系統性能擴充隻能通過擴充叢集結點,成本高、有瓶頸。
1.3 分布式SOA架構
1.3.1 什麼是SOA
SOA 全稱為 Service-Oriented Architecture,即面向服務的架構。它可以根據需求通過網絡對松散耦合的粗粒度應用元件(服務)進行分布式部署、組合和使用。一個服務通常以獨立的形式存在于作業系統程序中。
站在功能的角度,把業務邏輯抽象成可複用、可組裝的服務,通過服務的編排實作業務的快速再生,目的:把原先固有的業務功能轉變為通用的業務服務,實作業務邏輯的快速複用。
通過上面的描述可以發現 SOA 有如下幾個特點:分布式、可重用、擴充靈活、松耦合
1.3.2 SOA架構
當垂直應用越來越多,應用之間互動不可避免,将核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心,使前端應用能更快速的響應多變的市場需求
優點:
- 抽取公共的功能為服務,提高開發效率
- 對不同的服務進行叢集化部署解決系統壓力
- 基于ESB/DUBBO減少系統耦合
缺點:
- 抽取服務的粒度較大
- 服務提供方與調用方接口耦合度較高
1.4 微服務架構
優點:
- 通過服務的原子化拆分,以及微服務的獨立打包、部署和更新,小團隊的傳遞周期将縮短,運維成本也将大幅度下降
- 微服務遵循單一原則。微服務之間采用Restful等輕量協定傳輸。
缺點:
- 微服務過多,服務治理成本高,不利于系統維護。
- 分布式系統開發的技術成本高(容錯、分布式事務等)。
1.5 SOA與微服務的關系
SOA( Service Oriented Architecture )“面向服務的架構”:他是一種設計方法,其中包含多個服務, 服務之間通過互相依賴最終提供一系列的功能。一個服務 通常以獨立的形式存在與作業系統程序中。各個服務之間 通過網絡調用。
微服務架構:其實和 SOA 架構類似,微服務是在 SOA 上做的升華,微服務架構強調的一個重點是“業務需要徹底的元件化和服務化”,原有的單個業務系統會拆分為多個可以獨立開發、設計、運作的小應用。這些小應用之間通過服務完成互動和內建。
2 分布式核心知識
2.1 分布式中的遠端調用
在微服務架構中,通常存在多個服務之間的遠端調用的需求。遠端調用通常包含兩個部分:序列化和通信協定。常見的序列化協定包括json、xml、hession、protobuf、thrift、text、bytes等,目前主流的遠端調用技術有基于HTTP的RESTful接口以及基于TCP的RPC協定。
(1)RESTful接口
REST,即Representational State Transfer的縮寫,如果一個架構符合REST原則,就稱它為RESTful架構。
資源(Resources)
所謂"資源",就是網絡上的一個實體,或者說是網絡上的一個具體資訊。它可以是一段文本、一張圖檔、一首歌曲、一種服務,總之就是一個具體的實在。你可以用一個URI(統一資源定位符)指向它,每種資源對應一個特定的URI。要擷取這個資源,通路它的URI就可以,是以URI就成了每一個資源的位址或獨一無二的識别符。REST的名稱"表現層狀态轉化"中,省略了主語。“表現層"其實指的是"資 源”(Resources)的"表現層"。
表現層(Representation)
“資源"是一種資訊實體,它可以有多種外在表現形式。我們把"資源"具體呈現出來的形式,叫做它的"表現層”(Representation)。比如,文本可以用txt格式表現,也可以用HTML格式、XML格式、JSON格式表現,甚至可以采用二進制格式;圖檔可以用JPG格式表現,也可以用PNG格式表現。URI隻代表資源的實體,不代表它的形式。嚴格地說,有些網址最後的".html"字尾名是不必要的,因為這個字尾名表示格式,屬于"表現層"範疇,而URI應該隻代表"資源"的位置。
狀态轉化(State Transfer)
通路一個網站,就代表了用戶端和伺服器的一個互動過程。在這個過程中,勢必涉及到資料和狀态的變化。網際網路通信協定HTTP協定,是一個無狀态協定。這意味着,所有的狀态都儲存在伺服器端。是以,如果用戶端想要操作伺服器,必須通過某種手段,讓伺服器端發生"狀态轉化"(State Transfer)。用戶端用到的手段,隻能是HTTP協定。具體來說,就是HTTP協定裡面,四個表示操作方式的動詞:GET、POST、PUT、DELETE。它們分别對應四種基本操作:GET用來擷取資源,POST用來建立資源(也可以用于更新資源),PUT用來更新資源,DELETE用來删除資源。
綜合上面的解釋,我們總結一下什麼是RESTful架構:
- 每一個URI代表一種資源;
- 用戶端和伺服器之間,傳遞這種資源的某種表現層;
- 用戶端通過四個HTTP動詞,對伺服器端資源進行操作,實作"表現層狀态轉化"。
(2)RPC協定
RPC(Remote Procedure Call ) 一種程序間通信方式。允許像調用本地服務一樣調用遠端服務。RPC架構的主要目标就是讓遠端服務調用更簡單、透明。RPC架構負責屏蔽底層的傳輸方式(TCP或者UDP)、序列化方式(XML/JSON/二進制)和通信細節。開發人員在使用的時候隻需要了解誰在什麼位置提供了什麼樣的遠端服務接口即可,并不需要關心底層通信細節和調用過程。
(3)差別與聯系
1、HTTP相對更規範,更标準,更通用,無論哪種語言都支援http協定。如果你是對外開放API,例如開放平台,外部的程式設計語言多種多樣,你無法拒絕對每種語言的支援,現在開源中間件,基本最先支援的幾個協定都包含RESTful。
2、 RPC 架構作為架構微服務化的基礎元件,它能大大降低架構微服務化的成本,提高調用方與服務提供方的研發效率,屏蔽跨程序調用函數(服務)的各類複雜細節。讓調用方感覺就像調用本地函數一樣調用遠端函數、讓服務提供方感覺就像實作一個本地函數一樣來實作服務。
2.2 分布式中的CAP原理
現如今,對于多數大型網際網路應用,分布式系統(distributed system)正變得越來越重要。分布式系統的最大難點,就是各個節點的狀态如何同步。CAP 定理是這方面的基本定理,也是了解分布式系統的起點。
CAP理論由 Eric Brewer 在ACM研讨會上提出,而後CAP被奉為分布式領域的重要理論。分布式系統的CAP理論,首先把分布式系統中的三個特性進行了如下歸納:
Consistency(一緻性):資料一緻更新,所有資料的變化都是同步的
Availability(可用性):在叢集中一部分節點故障後,叢集整體是否還能響應用戶端的讀寫請求
Partition tolerance(分區容忍性):某個節點的故障,并不影響整個系統的運作
通過學習CAP理論,我們得知任何分布式系統隻可同時滿足二點,沒法三者兼顧,既然一個分布式系統無法同時滿足一緻性、可用性、分區容錯性三個特點,是以我們就需要抛棄一樣:
需要明确一點的是,在一個分布式系統當中,分區容忍性和可用性是最基本的需求,是以在分布式系統中,我們的系統最當關注的就是A(可用性)P(容忍性),通過補償的機制尋求資料的一緻性
3 常見微服務架構
3.1 SpringCloud
Spring Cloud 是一系列架構的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分布式系統基礎設施的開發,如服務發現注冊、配置中心、消息總線、負載均衡、斷路器、資料監控等,都可以用Spring Boot的開發風格做到一鍵啟動和部署。Spring Cloud并沒有重複制造輪子,它隻是将目前各家公司開發的比較成熟、經得起實際考驗的服務架構組合起來,通過Spring Boot風格進行再封裝屏蔽掉了複雜的配置和實作原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分布式系統開發工具包。
3.2 ServiceComb
Apache ServiceComb 是業界第一個Apache微服務頂級項目, 是一個開源微服務解決方案,緻力于幫助企業、使用者和開發者将企業應用輕松微服務化上雲,并實作對微服務應用的高效運維管理。其提供一站式開源微服務解決方案,融合SDK架構級、0侵入ServiceMesh場景并支援多語言。
3.3 ZeroC ICE
ZeroC IceGrid 是ZeroC公司的傑作,繼承了CORBA的血統,是新一代的面向對象的分布式系統中間
件。作為一種微服務架構,它基于RPC架構發展而來,具有良好的性能與分布式能力。