設計數據密集型應用
這本書非常推薦看英語版,如果考過了CET-6就可以很輕松的閱讀這本書。
當前計算機軟件已經不是單體的時代了,分布式系統,微服務現在是服務端開發的主流,如果沒有讀過這本書,則強力建議讀這本書。
當前開發的系統主要分為兩種,一種是數據密集型,一種是就算密集型。
數據在分布式系統中有很多中存在方式,持久化數據,網絡協議,緩存都是。
這本書每章最后都有章節總結,可以根據這些總結進行學習。
1、數據系統基石
基本的類似于可靠性、可伸縮性、可維護性需要在系統中有得到體現,這不僅需要開發。也需要運維,測試等崗位的支持才能得到結果。
存儲結構與查詢語句,MySQL使用B+樹,mongoDB使用GSON,以及其他的一些數據使用的數據結構,并且,查詢語句不僅可以是SQL92協議中的查詢格式,也可以是API的方式,xml的方式等
存儲與檢索,查可以使用索引輔助檢索,SSTables和LSM-Tree,B樹等數據結構可以用來作為檢索工具,存儲引擎分為OLAP和OLTP,分別專注于數據檢索和事務,OLTP中又存在兩種方式日志結構學派:不會更新只會追加寫入,就地更新學派可以直接更新到原有數據中
數據庫同樣需要網絡傳輸,因此需要有可以維護可拓展的網絡協議,如RPC
2、分布式數據
分布式系統有可能有一主多從,多主多從等方式,這意味著需要對于一個結點的數據及時更新到其他節點中,方式分別是一主多從,多主多從,無主從,一主多從最常見,也可以通過使用一個節點作為proxy,經由該節點同步給其他節點,多主多從會有時鐘不一致導致的問題,事務上的問題等,主要目的是為了讓數據庫離用戶更近一些,如果沒有更多的好處的話則不需要這種方式,這種方式弊端較大;無主從方式可以被認為是kafka的broker方式類似,根據一些特定的可用性判斷方式,如“活躍節點+可以同步節點>全部節點代表集群可用”這種方式,來進行這種方式集群的使用,如果使用,其他的數據復制時的操作,如從庫恢復,故障切換與再選舉等。
以上只是復制的三種路徑, 如MySQL就有互為主從,redis集群也有多種方式。
分區有多種分布方式,可以使用鍵值對進行分區,但是不同的分區熱點不一樣,存在負載傾斜和熱點刪除;此外也有根據文檔的分區以及基于關鍵詞的分區
分布式集群會帶來分布式事務,這一張主要是講解ACID以及不同的層級下的事務級別會導致什么問題。
分布式系統的弊端,一般會有網絡問題,異步問題,時鐘不可靠,分布式算法等問題
一致性與共識,這一張主要講解Seata的一些信息以及分布式算法的信息,但是不深入,需要額外找資料進行學習。
3、衍生數據
批處理,流處理,這些都是大數據相關的一些原則,如果有興趣的話可以進行查看
推薦閱讀
- 《DDIA 逐章精讀》小冊
- DDIA精讀|分布式系統中的副本和分片、KV 分片、分片均衡,以及路由請求