(InterviewBit) System Design - Storage Scalability
清單
- 前言
- 預備知識
- CAP理論
前言
在做任何系統設計前,一定要自我先釐清整個系統會使用到的儲存空間會多大,可以透過不同的Use Case去思考,可能的使用量,當整個Storage都出來後再開始設計,系統會更加穩固,整個系統設計也會更貼切使用者的需求。
預備知識
- 關聯式資料庫
- 正規化
- 實踐方法
- 基本NoSQL概念
- Concurrency知識
- 多執行序開發
- 死結
- 鎖
- Neworking
- TCP/IP
- UDP
- File Systmes
- OS基礎
- File System 如何運作
- Database 如何運作
- OS如何控制Cache
常用詞彙
- Replication
- 複製品
- 其實也就是冗於,冗於通常用於災害發生時當作備案
- Consistency
- 一致性
- 當分佈式系統時,你要怎樣確保使用者用到的檔案/資料是一致的
- Eventual consistency
- 最終一致性
- 資料可以暫時的不同,但在使用者可以接受的時間內會達到一致
- 也代表說在當下可以暫時的不一致,但長時間內需正確
- 例如(座位餘額/即時時刻表)
- Availability
- 可使用性
- 服務是不是可以7*24提供服務
- Partition Tolerance
- 部分容忍
- 多節點有災難時(通訊失敗/Crash)但是還是可以正常運行
- Vertical scaling and Horizontal scaling
- Vertical scaling
- 垂直擴增
- 替機器增加資源(記憶體/硬碟/CPU)
- Horizontal scaling
- 增加Server的數量
- Vertical scaling
- Sharding
- 分片管理
- 將龐大的資訊切分成小部分,讓他可以更有效率
CAP理論
- Consistency
- Availability
- Partition Tolerance
詳細的CAP範例可以參考我的另一篇翻譯文章
系統設計 - 基礎概念 CAP (Consistency, Availability, Partition Tolerance)
系統設計的五個步驟
- 釐清需求
- 估算資料量大小,該如何處理
- 如何Sharding
- 如何Caching
- 找出關鍵瓶頸點
- 找到此系統使用者最在乎的地方
- 分析瓶頸點造成的影響
- 範例
- facebook最常使用的功能可能就是讚
- 如何處理這樣大量的讚回饋
- 粗略設計框架
- 仔細分析框架細節
額外資源
Master & Slave
Database讀寫分離
- Master提供資料的寫入
- Slave提供資料的讀取
- Master的資料會以幾乎即時的時間寫入到Slave中
為何要讀寫分離?
- 當使用流量上升時寫和讀都會消耗CPU的運算速度,而大部分系統讀取的需求都會大於寫入,這時如果將資料庫分為讀取的資料庫和寫入的資料庫,那寫入再也不需要和讀取爭取資源。
- 方便擴增 - 若是流量像是沒有天際的上升,那切分為讀取的資料庫就可以很簡單的擴增,只要將Master(寫入資料庫一起同步到新的擴增Slave(讀取資料庫))就好
為何讀寫分離會讓搜尋資料更快?
-
因為將讀操作和寫操作分離,CPU可以將資源全力作其中一項事情
-
記憶體
- 讀資料庫可以不須在將讀操作時需要的index載入到記憶體中,進而讓讀操作可以全盤使用記憶體
-
硬碟
- 資料庫寫入硬碟時,必須將硬碟的head重新拉到可寫的目標中,在找尋可寫入的目標地址時需要耗號head移動的時間(物理移動)
- 而寫入則只需要移到資料位子並且讀取就好
- 若是資料庫讀寫分離的話,讀資料庫(Slave)則可以避免要寫入時,硬碟的磁頭移動需要消耗的時間,(因為磁頭不須再高頻的處理寫入時head的移動,只有在批量同步時才需要)。
-
去除龐大
- 資料庫讀寫分離後,你的資料庫不需要像以前依樣那麼龐大,讀寫分離可以帶出新的技術與概念(分庫分表),常使用的資料可以使用高等一點的Sever。而當機和Crash時,在也不需要等待龐大的資料庫重啟,甚至可以因為分庫分表,想出系統的分布可容錯措施。
留言
張貼留言