《架構師的36項修煉》學習筆記

開篇詞

 

優秀的架構師都具備哪些特點?

強烈的好奇心、敏銳的業務嗅覺、紮實的技術基礎、出色的編程能力、對主流技術產品和模式的深刻領悟。

 

想學好架構要從哪幾方面入手?

基礎:包括數據結構、操作系統、算法應用、設計模式等一切擁有優秀編程能力所應該熟知的軟件基礎知識。

技術:主要包括緩存、異步、分佈式存儲、微服務等。

架構設計:高可用、高性能、安全性

 

 

第01講:大型架構的演進之路

 

大型互聯網系統的特點:

高併發和大流量、高可用、海量的數據存儲、用戶分佈廣泛,網絡情況複雜、安全環境惡劣、需求變化快,發佈頻繁。

 

系統處理能力提升的兩種途徑:

垂直伸縮:提升單臺服務器的處理能力,比如說用更快頻率、更多核的 CPU,用更大的內存,用更快的網卡,用更多的磁盤組成一臺服務器,使單臺服務器的處理能力得到提升,通過這種手段提升系統的處理能力。

水平伸縮:使用更多的服務器,將這些服務器構成一個分佈式集羣。這個集羣統一對外提供服務,來提高系統整體的處理能力。

 

大型互聯網架構演化進程:

 

單機系統--應用服務器與數據庫分離(萬級)--分佈式緩存和服務器集羣(十萬級)--反向代理,CDN 加速,還需要數據庫讀寫分離(百萬級)--分佈式文件系統和分佈式數據庫系統(千萬級)--搜索引擎、NoSQL、消息隊列、分佈式服務(億級)

 

第02講:架構核心技術之分佈式緩存(上)

 

緩存的類型主要有代理緩存、反向代理緩存、 CDN 緩存和對象緩存幾種。

使用緩存需要注意幾個關鍵指標:緩存鍵集合大小、緩存空間的大小以及緩存的使用壽命。

 

緩存的主要特點:技術簡單、性能提升顯著、應用場景多

 

第02講:架構核心技術之分佈式緩存(下)

 

通讀緩存:上面講到的代理緩存、反向代理緩存、CDN 緩存,都是通讀緩存。它代理了用戶的請求,也就是說用戶在訪問數據的時候,總是要通過通讀緩存。

 

旁路緩存:旁路緩存是客戶端先訪問旁路緩存中是否有自己想要的數據,如果旁路緩存中沒有需要的數據,那麼由客戶端自己去訪問真正的數據服務提供者,獲取數據。客戶端獲得數據以後,會自己把這個數據寫入到旁路緩存中,這樣下一次或者其他客戶端去讀取旁路緩存的時候就可以獲得想要的數據了。

 

合理使用緩存對象:

 

注意頻繁修改的數據、注意沒有熱點的訪問數據、注意數據不一致和髒讀、注意緩存雪崩。

 

一致性哈希算法:通過一致性哈希算法可以實現緩存服務器的順利伸縮擴容。

 

第03講:架構核心技術之分佈式消息隊列

 

同步調用:所謂的同步調用,就是說從請求的發起一直到最終的處理完成期間,請求的調用方一直在同步阻塞,等待調用的處理完成。

異步調用:與同步調用相反的是異步調用。

 

消息隊列優點:異步處理、易伸縮、使峯值變平緩、失敗隔離及自我修復、解耦。

 

布式消息隊列遇到的挑戰:消息無序、消息重新入隊列、競態條件、複雜度風險。

消息無序:將消息處理的順序設計到異步流程中。

消息重新入隊列:將消息處理設計成冪等性,也就是說消費者可以對同一條消息進行多次處理計算,而不會影響最終的結果。

競態條件:併發執行就可能會導致對資源的爭用,需要對共享資源的併發訪問進行控制,以避免競態條件的出現。

 

消息隊列的反模式:

阻塞式調用、耦合生產者和消費者、缺少壞消息處理

 

常用消息隊列產品:RabbitMQ 、ActiveMQ(Java開發)、RocketMQ(Java開發) 、Kafka。

 

使用異步調用的架構方法,就是使用消息隊列,將生產者和消費者進行隔離。主要的架構模型有兩種,一種是點對點模型,一種是發佈訂閱模型。其中點對點模型,一個消息只會被一個消費者消費;而發佈訂閱模型,一個消息可以被多個消費者訂閱。

 

第04講:架構核心技術之分佈式數據存儲

 

MySQL 數據庫複製:

 

主從複製:將 MySQL 主數據庫中的數據複製到從數據庫中去。主要目的是實現數據庫讀寫分離——寫操作訪問主數據庫,讀操作訪問從數據庫。

 

一主多從複製:

優點:分攤負載、專機專用、便於冷備、高可用。

 

主主複製:兩臺服務器都當作主服務器,任何一臺服務器上收到的寫操作都會複製到另一臺服務器上。

 

數據分片

數據分片的目標:將一張數據表切分成較小的片,不同的片存儲到不同的服務器上面去,通過分片的方式使用多臺服務器存儲一張數據表,避免一臺服務器記錄存儲處理整張數據錶帶來的存儲及訪問壓力。

分佈式數據庫中間件:Mycat

 

當數據在寫的過程中多個數據備份有衝突的時候,如何解決呢?

一種方法是根據時間戳進行判斷。最後寫入的,也就是時間戳在後面的,覆蓋時間戳在前面的

另一種解決衝突的機制是通過客戶端進行衝突解決。

還有一種衝突的解決方案是通過投票進行解決。

 

第05講:架構核心技術之微服務

 

單體系統的困難:編譯、部署困難、代碼分支管理困難、數據庫連接耗盡、新增業務困難、發佈困難

 

目前一些典型的微服務框架本身的架構是如何設計的?

Dubbo:最核心的模塊有 3 個部分,一個是服務的提供者,一個是服務的消費者,還有一個是服務的註冊中心。

 

幾種微服務的使用模式:

事件溯源:可以精確地復現用戶的狀態變化,可以有效監控用戶的狀態變化,並在此基礎上實現分佈式的事務。

命令與查詢職責隔離(CQRS)

斷路器:使用斷路器對故障服務進行隔離,斷路器有三種狀態:關閉、打開、半開。

超時:在設置超時的時候,要設置上游調用者的超時時間大於下游調用者的超時時間之和。

 

第06講:高性能系統架構設計

 

性能測試:性能測試是性能優化的前提和基礎,也是性能優化結果的檢查和度量標準。

 

響應時間:是指應用系統從發出請求開始到收到最後響應數據所需要的時間。

併發數:併發數是指系統同時處理的請求數。

吞吐量:是指單位時間內系統處理請求的數量。

性能計數器:指的是服務器或者操作系統性能的一些指標數據,包括系統負載 System Load、對象和線程數、內存使用、CPU 使用、磁盤和網絡 I/O 使用等指標。

 

通常我們說性能測試的時候指的是一個總稱,是廣義上的性能測試,具體可以分爲狹義上的性能測試、負載測試、壓力測試和穩定性測試。

 

分層優化系統性能:第一層是機房與骨幹網絡的性能優化、第二層是對服務器內的硬件進行優化、操作系統的性能優化、虛擬機的性能優化、基礎組件的性能優化、軟件架構性能優化、軟件代碼的性能優化。

 

軟件架構性能優化:緩存、異步和集羣。

 

第07講:高可用系統架構設計

 

系統的可用性指標:年度可用性指標= 1 −(不可用時間/年度總時間)×100%

 

大型系統高可用的一般策略:負載均衡、數據庫複製與失效轉移、消息隊列隔離、限流和降級、異地多活機房架構

 

負載均衡實現方法:HTTP 重定向負載均衡、DNS 負載均衡、反向代理負載均衡、IP 層負載均衡(四層負載均衡)、數據鏈路層負載均衡。

 

高可用運維:自動化測試、自動化監控、預發佈、灰度發佈

 

第08講:系統的安全架構設計

 

Web 攻擊與防護:

XSS 攻擊:就是通過構造一個非法的瀏覽器腳本,讓用戶跨站點去執行,從而達到攻擊的目的。

直接攻擊。

XSS 攻擊防禦:消毒、HttpOnly

 

SQL 注入攻擊

SQL 攻擊防禦:消毒、參數綁定、

 

CSRF 攻擊

CSRF 攻擊防禦:表單 Token、驗證碼

 

Web 應用防火牆

 

信息加解密技術:主要分爲三類,單向散列加密、對稱加密和非對稱加密。

 

信息過濾和反垃圾:貝葉斯分類算法、布隆過濾器算法。

 

第09講:架構實戰案例分析

 

互聯網應用系統架構

分佈式數據庫的架構設計案例

編程框架的架構設計

 

第10講:致未來的架構師

 

架構師閱讀清單:

《Effective Java中文版》、《設計模式》、《敏捷軟件開發——原則模式與實踐》、《企業應用架構模式》、《卓有成效的管理者》

 

如何去超越同階層的人,持續不斷地獲得進步,有幾點實踐中要注意的事情:

第一是要勇於承擔責任。

第二持續的訓練,每一次訓練都要在上一次訓練難度的基礎上再提高一點。

在解決問題的過程中要關注問題的場景。

 

總結:以上內容摘自拉鉤教育李智慧老師的《架構師的36項修煉》課程,爲通往架構師成長的道路提供了一些理論基礎與實踐方法,學完之後受益匪淺。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章