分佈式系統-----單機存儲系統

隨着互聯網用戶量的增多,大用戶數據,大數據流量已經遠遠超過單機服務器的處理能力,雖然摩爾定律給出在價格不變的情況下,硬件性能每隔18個月,性能都會提高提升1倍,即便如此,橫向擴展比縱向擴展成本要低得多,分佈式系統由此而產生。

最近一直在研究分佈式系統,其中涉及很多知識點,結合自己的工作經驗,寫幾篇博客,一來記錄一下,二來和衆多位網友一起分享一下,如果哪位有緣人讀到這篇文章,但凡發現不對的地方,儘可指正,大家一起學習討論。ok,廢話不多說,下面開始。


硬件性能指標

內存訪問:100ns

SATA磁盤尋道:10ms

SATA盤順序讀:100MB以上

服務器軟件與硬件的交涉,無外乎cpu、內存、硬盤、網卡,這其中,cpu、內存、網卡相對性能都還好,最讓人擔心的就是磁盤讀寫,磁盤尋道是一個很大的開銷10ms,所以當需要順序讀時,可以考慮用sata盤,對於隨機讀,並且性能要求高時,如db等,可以考慮用ssd盤或sas。


單機存儲引擎

存儲引擎相當於數據庫的發動機

哈希存儲引擎:key-value存儲系統,如Bitcask,Bitcask是key value模型,append only,磁盤上記錄的具體key value值,而在內存上進記錄hash值,key value值位置(file id、pos、size),具體介紹可以參見:http://blog.nosqlfan.com/html/955.html

B-Tree存儲引擎:關係型數據庫,如mysql innoDB

LSM樹存儲引擎:如google bigtable、level DB,LSM(Log Structured Merge Tree),修改增量放到內存,達到一定大小限制後批量寫入磁盤,讀取時需要合併磁盤中歷史數據和內存中最近修改操作。LSM優勢在於規避磁盤隨機寫入問題,但讀取時可能需要訪問較多的磁盤文件,即寫入效率高,讀取效率一般。level db是google基於lsm算法實現的非常高效的k v數據庫。


數據模型

數據模型相當於數據庫的外殼

文件模型:類似於linux的文件系統

關係模型:這個是目前最成熟的模型,mysql oracle等等,但是隨着應用在可擴展性、高併發以及性能上提出了愈來愈高的要求,大而全的關係型數據庫有點力不從心,許多nosql數據庫應運而生,鍵值模型,關係弱化的表格模型。關係型數據庫有2個重要特性,索引和事務,索引減少掃描時的數據量提高讀取性能,事務保證併發執行時的ACID特性(原子、一致、隔離、持久)

鍵值模型:大量的nosql數據庫採用鍵值模型。


常用的nosql數據庫

PostgreSQL(關係型)、Riak(鍵值型)、HBase(列型)、MongoDB(文檔型)、CouchDB(文檔型)、Noeo4j(圖型)、Redis(鍵值型)。


CAP理論

Consistency(一致性):即數據一致性,簡單的說,就是數據複製到了N臺機器,如果有更新,要N機器的數據是一起更新的。
Availability(可用性):好的響應性能,此項意思主要就是速度。
Partition tolerance(分區容錯性):這裏是說好的分區方法,體現具體一點,簡單地可理解爲是節點的可擴展性。

定理:任何分佈式系統只可同時滿足二點,沒法三者兼顧。
忠告:架構師不要將精力浪費在如何設計能滿足三者的完美分佈式系統,而是應該進行取捨。




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