鳳凰架構總結

Doyourself!發表於2024-10-17

重溫了一遍周志明老師的《鳳凰架構》,一方面是加深記憶一下里面的知識點,另外就是做個記錄總結,方便後面忘記了在看。

全書一共有十六個章節,每個章節都相對獨立又和後文有些關係。個人總結主要是圍繞著微服務、架構演進以及容器編排等技術的發展來講述的。很詳細也很透徹,第一遍讀的時候因為很多概念不是很清楚,比較耗時。讀了後再回過頭來看時候,發現順利了不少。

第一章服務架構演進,從原始分散式時代到單體架構歷史,SOA時代以及微服務時代,以及當前的雲生無服務時代這些概念。主要是需要清楚裡面的幾個概念:

SOA:最早在1994年提出,當時不具備發展提交。直到2006年OSOA聯盟的倡議與支援下,成立了Open CSA 組織。裡面提出了很多的概念、思想都在今天的微服務中找到對應的身影,譬如服務之前的鬆散耦合、註冊、發現、治理、隔離、編排等。

微服務時代:微服務最早2005年提出,指的是專注於單一職責的、和語音無關的細粒度web服務。但是一直到2014年,和SOA劃清界限之後,才真正的崛起了。 現代的概念是:微服務是一種透過多個小型服務組合來構建單個應用的架構風格,這些服務圍繞業務能力而非特定的技術標準來構建,各個服務可以採用不同的程式語言、不同的資料儲存技術,執行在不同的程序之後。

後微服務時代:主要是以docker為代表的容器化技術的崛起,以及kubernetes成為容器編排解決的首要選擇,標誌著後微服務時代的開啟。以kuberneters在叢集中對外提供服務,以虛擬化容器技術對外提供方案的容器編排技術的完善和發展,以及服務網格(Service mesh)等技術的引入,微服務的概念也逐漸越加成熟。

無服務時代:主要是以雲原生為主的元計算方面。也是作者預測以後雲端計算使用的一種主要的形式。

另外需要說下Sidecar Proxy的邊車代理模式,這個是服務網格(Service mesh)裡面用到的一種模式,下面很多章節都有介紹。

Sidecar Proxy(邊車代理):在虛擬化場景中,邊車指的是通訊代理伺服器,以類似網路安全裡面中間人共計的方式進行流量劫持,在應用毫無感知的情況下,悄然接管應用所有對外通訊。這個代理除了實現正常的服務間通訊為(稱為資料平面通訊),還接收來自控制器的指令(稱為控制平面通訊),實現熔斷、認證、度量、監控以及負載均衡等各種附加功能。 我理解就是不需要像傳統方式那樣,比如說一個java語音的程式,但是需要再Python或者go平臺執行,傳統方式需要一個jar包或者http之類的方式去呼叫後執行,但是這個功能交由系統級別來實現了。

第二章主要是介紹了遠端服務呼叫(RPC)以及REST風格的設計。這個章節介紹了RPC的歷史,概念有很多,畢竟RPC的歷史也有幾十年了。這個我理解需要了解的主要是知道現在一些主流的RPC吧,比如RMI(SUN/Oracle)、gRPC(Google)、Motan1/2(新浪)、Finagle(Twitter)、brpc(百度/Apache)、NetRemoting(微軟)、Arvo(Hadoop)、JSON-RPC2.0)(JSON-RPC)等一些常見的協議和框架。

RESTFUL概念:restful和RPC的概念不盡相同,只是有些相似。本質上不是一類東西。 RPC是一種遠端服務呼叫協議,而restful沒有協議。雖然都是遠端呼叫,REST是面向資源的思想,REST只是一種風格,不是一種規範,沒有像RPC一樣的協議

以作者舉例來說明:

去醫院預約

 如果只是透過RPC呼叫,屬於0級
  如果定義了資源,比如能獲取指定日期的預約結果,即拿到所有醫生的資訊 是一級
  如果除了預約,還能取消、更換時間、以及結果能夠根據統一code碼進行判斷的,並且考慮授權之類的,比如vip才能預約的,則稱為二級
  如果請求了一個,能返回所有的,則稱為三級

restful 按照服務介面 rest的程式 從高到低,分為3級:

0級: 完全不REST

1級: 引入資源的概念

2級:統一引入介面,對映到http協議的方法上

3級: 超媒體控制,主要體現在返回資訊裡面包含所有的需要的資訊,能做到服務端和客戶端的api解耦。

另外就是restful的不足: rest和http 完全繫結,不適合高效能傳輸的常見、不利於事務、缺乏對資源批次處理等

第三章 主要是事務處理,這個章節是一些網際網路公司經常面試的東西。

ACID(原子性、隔離性、永續性、一致性):事務的基本概念

原子性和永續性:預設是透過commit log來保證,但是commit log 有一個先天缺陷: 對資料的修改都必須發生在事務提交後,如果磁碟i/o足夠空間,都不允許事務提交前修改磁碟資料,導致對提升資料庫效能不利。 一種解決方案是: 增加Undo log的日誌型別,記錄修改資料位置以及修改的值,以便在事務回滾或者崩潰crash恢復時候根據undo log 對寫入資料進行擦除。還有就是是 steal 和 force的一些概念

隔離性:透過資料庫的讀鎖、寫鎖、範圍鎖 來解決,針對隔離級別裡面序列化、可重複讀、讀已提交和讀未提交。另外在可重複讀和讀已提交 還有MVCC機制來進行最佳化的場景,透過增加版本號的概念來進行。

全域性事務: 為了解決分散式事務一致性問題,引入XA的處理事務架構。引入了全域性的事務管理器,俗稱2階段提交和3階段提交。

分散式事務:當前業界主流的。首先是CAP理論:即在分割槽容忍性下面,一致性(Consistency)和 可用性(Availability)只能保證一個。 針對分散式事務,有幾種常用的方案:

佇列:透過佇列的方式,達到最終一致性

TCC: tyr-confirm-console,一般用的比較多的場景就是解決秒殺保證庫位不會出現小於0的問題,超售的問題。缺點是 程式碼侵入強

SAGA事務:可以參考阿里開源的seata

第四章主要是快取、域名解析、路由以及CDN分發、負載均衡的一些知識

主要是記一下CDN以及負載均衡的一些知識:

CDN 作用: 加速靜態資源分發、安全防禦、 協議升級(使用SSL證書)、狀態快取、修改資源、訪問控制、諸如功能

負載均衡可以在資料鏈路做負載均衡、也可以在網路層和應用層做負載均衡,負載均衡演算法可以使用加權、輪訓、隨機、一致性hash、最少連線數等方式

快取的一些知識點:

吞吐量:使用OPS(每秒運算元)來衡量,反應了對快取進行併發度、寫操作的效率。

命中率: 成功從快取返回結果次數與總請求次數的比值。

介紹了 Caffeine環形快取(Ring buffer)的實現原理:以及快取的淘汰策略:FIFO(優先淘汰)、LRU(優先淘汰最久未被訪問的資料)、

相關文章