Nosql 理解篇+實戰篇 四 分散式模型
四 分散式模型
為什麼要引入分散式?分散式的優缺點?分散式的方法?常用分散式技術詳解
1 分散式要解決的問題。
隨著資料量指數級的爆發式增長。用來購買更大伺服器來執行資料庫的縱向擴充套件(scale up)方式會變得越發困難和昂貴。與之相比,將資料庫執行在伺服器叢集上的橫向擴充套件(scale out)方式,由於技術的愈發成熟,逐漸成為了眾多大型企業的首選。
以京東為例,京東資料庫主體發展,經歷了mysql—>sqlserver—>oracle—>mysql叢集。這種演變方式,也是大部分企業資料發展的演變過程。
2 使用分散式的優勢和缺陷。
優勢:使用不同的分散式模型,需要安裝企業需求來決定。有些模型能夠處理超大量資料。有些能夠處理超大量網路讀寫,還有的能應對網路速度慢或者網路故障。都是採用分散式所帶來的優勢。
缺陷:成本較高,在叢集上執行資料庫,較為複雜。所以除非剛剛所說優勢對企業很重要,否則不應該隨意使用。
3 常用的分散式途徑方法
較為巨集觀的分散式分類分為“複製(replication)” 與“分片(sharding)”。
複製:將同一分資料拷貝到多個節點
分片:將不同資料存放在不同節點。
這兩種技術既可以獨立使用,也可以同時使用。複製有兩種形式“主從式(master—slave)”和“對等式(peer—to—peer)”。下面有簡單到複雜來說說這些技術。
4 常用分散式技術詳解
1 單一伺服器
通常,在大多數情況下,都推薦使用最簡單的分佈形式:也就是根本不分佈。將資料放在同一臺電腦中,讓它處理對資料的儲存操作。儘管許多NoSQL都是為叢集執行環境而設計的,但是隻要某個NoSQL資料庫的資料模型符合應用程式需求,那麼完全可以按照單一伺服器分佈模型來使用它。例如圖資料庫。若使用資料庫基本上是為了處理聚合,那麼可以考慮在單一伺服器上部署“文件資料庫”或者“鍵值資料庫”,這樣也能簡化程式開發。總之,在不需要分散式資料就能應對時,總應該選用“單一伺服器方案”。
2分片
分片:一般來說,資料庫的繁忙體現在:不同使用者需要訪問資料集中不同部分。在這種情況下,我們把資料的各個部分存放在不同伺服器中。以此實現橫向擴充套件。該技術就叫“分片(sharding)”
解決分片的伺服器負載均衡難點:
1) 什麼樣的資料適合分片
使用面向聚合的資料庫,之所以設計聚合,就是把那些經常需要同時訪問的資料放在一起。因此,我們把聚合作為分佈資料的單元
2) 怎樣的資料分佈能提升負載均衡程度
把聚合資料均勻的分佈在各個節點中,讓它們需要處理的負載量相當。例如我們可以把有可能需要以此讀取的聚合放在一起。事實上大部分NoSQL都提供了“自動分片的功能”,讓資料庫自己負責把資料分佈到各個分片,並且將資料訪問請求引導至適當的分片上。
3 主從複製
主從式分佈:把資料複製到多個節點中,其中一個為“主節點”,其他為“從節點”。
優勢:1 在頻繁讀寫資料集情況下,提示資料訪問效能
2 提示讀取操作的故障恢復能力
4對等複製
對等複製:對等複製所有節點地位相同,都可以接受寫入請求,而且丟失其一,不影響整個資料庫訪問。
優勢:處理出錯的節點得心應手。
只需增加節點就能提升效能。
缺點:資料一致性問題。例如寫入衝突。