這漫長辛苦的 30 天總於結束囉 ~ 接下來依慣例第 30 天都是總結篇。
這 30 天的過程咱們都在追求『 一個好的系統 』中的其中一個重點 :
性能
性能越高的系統,可以帶給『 公司 』與『 用戶 』雙方都達到愉悅的情況。
咱們先看看第一階段最基本系統的樣子。
單機的優化方向
應用層方面性能優化重點知識
這下面 7 篇文章,應該涵蓋住了應用層性能方面所需要注意的重點,雖然有分 cpu 與 i/o 優化,但是我是覺得也不用分到那麼清楚,只要記得,你是要儘可能的以最少資源來做事情就對囉。
運算與 i/o 是重點,但總結來說就是『 儘可能的以最少資源來做最多的事情 』
- 30-03 之應用層的運算加速 - 演算法
- 30-04 之應用層的運算加速 - 並行運算
- 30-05 之應用層的 I / O 加速 - 零拷貝 ( Zero Copy )
- 30-06 之應用層的 I / O 優化 - Stream ( 與一些 IPC 知識 )
- 30-07 之應用層的 I/O 優化 - 非阻塞 I/O 模型 Reactor
- 30-08 之應用層的 I/O 優化 ( 維護性 ) - 協程 Coroutine
- 30-09之應用層的兩個池 - 進 ( 線 ) 程池與連線池
資料庫層優化重點知識
接下來到一個系統的命脈『 資料庫層 』的性能優化知識。這裡的最大重點在於 :
索引
- 30-10 之資料庫層架構與優化方向
- 30-11 之資料庫層的核心 - 索引結構演化論 B+樹
- 30-12 之資料庫層的核心 - MySQL 的索引實現
- 30-13 之資料庫層的優化 - 索引設計與雷區
- 30-14 之資料庫層的優化 - 表的設計
但在追求性能的路上一定會碰到的大敵『 一致性難題 』,要追求高性能,就要理解它的敵人,才能在兩者間抓取『 平衡 』。
性能大敵,一致性問題
- 30-15 之資料庫層的難題 - 單機『 故障 』一致性難題
- 30-16 之資料庫層的難題 - 單機『 並行 』一致性難題 ( 1 )
- 30-17 之資料庫層的難題 - 單機『 並行 』一致性難題 ( 2 )
資料庫層的應用一定會碰到貧頸因此接下來,第一個建議不是開多個資料庫,而是建立緩存服務。
資料庫的好夥伴,緩存服務
網路傳輸優化知識點
咱們每台機器裡面的東西能優化完的都優化完以後,我覺得可以往『 網路傳輸 』方面儘可能的優化。其中咱們這裡以『 http 』為主,因為這個傳輸協議基本上是這世界上最多人使用的應用層協議,就算不是寫網頁的系統,也都是會使用 http 來打 api 之類的,所以理解它是非常重要的。
分散式優化方向
這裡要記好,單機沒搞好前,不要有事沒事為了『 性能 』而建立分散式系統,會有非常多的坑等這你。
這裡簡單說一下,事實上這 30 天,我的分散式篇說的不多,因為我認為高性能的基礎在於單機,單機處理的好,我覺得才有資格往分散式前進。
應用層分散式擴展
應用層擴展基本上沒什麼毛病,只要記得每個應用都是無狀態的就好,如果是有狀態就難處理囉。
資料庫層分散式擴展
最大的坑是在這,這裡又會出現性能大敵 :
一致性難題
首先資料庫層的擴展第一個建議的架構為『 讀寫分離 』,這個坑會比較小一點。
接下來的模式,除非上述架構真的已經到了貧頸,否則不建議實作,坑很多。
然後就是咱們的大敵。
最後這裡簡單的介紹一下資料庫的中間件。
最後心得與結論
總於要結束囉,這裡總結一下心得,這 30 天寫完,我覺得要建立一個好的系統的有重點在於 :
平衡
在這 30 天雖然副主題是高性能,但是在這條路上,常常會需要損失一些性能來增加『 維護性 』與『 可用性 』,為啥 ?
因為咱們是追求『 好的系統 』
如果要完全的追求高性能的系統,那就會損失不少東西,可能會導致用戶不愉悅或老闆不愉悅。
但要如何儘可能的做到平衡呢 ?
儘可能做好每個地方
這應該不用多說,每一個地方都做好,基本上我就覺得這個系統有達到『 一個好的系統重點 』。但是要做到這件事情,就需要每個地方都深入的理解,這樣才能達到『 平衡 』,不然你想想你專精於高性能,但是對一致性難題一知半解,你覺得做出來的東西如何呢 ? 我會怕啊……
最後也因為上述理由,這也是為什麼這三十天的主題為 :
30天之從 0 至 1 盡可能的建立一個好的系統 ( 性能基礎篇 )
別忘了咱們追求的是『 好的系統 』,『 性能 』只是其中一部份,好系統才是根本。
最後希望這個攻略本,可以讓各位友人可以在探索一個好的系統中,找到性能方面一些根本方向 ~ 有了根你就能理解散發出去的不同系統囉 ~
希望明年可以寫性能進階篇,應該是有可能,寫完這 30 篇我的小腦袋又冒出好多條進階支線可寫。
完賽囉 ~
參考書籍與網站
- 軟件架構設計:大型網站技術架構與業務架構融合之道 ( 首推 )
- 大型網站技術架構-核心原理與案例分析 大型网站技术架构:核心原理与案例分析
- 大型網站性能優化實戰:從前端、網絡、CDN到後端、大促的全鏈路性能優化詳解
- 從零開始學架構:照著做,你也能成為架構師 从零开始学架构:照着做,你也能成为架构师
- 分佈式實時處理系統:原理、架構與實現 分布式实时处理系统:原理、架构与实现
- 並發模式與應用實踐 (Concurrent Patterns and Best Practices: Build scalable apps with patterns in multithreading, synchronization, and functional programming)
- MySQL 技術內幕-InnoDB 存儲引擎, 2/e 数据库技术丛书·MySQL技术内幕:InnoDB存储引擎(第2版)
- 高可用MySQL(第2版) 高可用MySQL(第2版)
- 高性能 MySQL (第3版) (High Performance MySQL: Optimization, Backups, and Replication, 3/e) 高性能MySQL(第3版)
- 高性能SQL調優精要與案例解析 高性能SQL调优精要与案例解析
- 高性能服務系統構建與實戰 高性能服务系统构建与实战
- 實戰 Java 高並發程序設計, 2/e 实战Java高并发程序设计(第2版)