1. 程式人生 > >Nosql 理解篇+實戰篇 四 分散式模型

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對等複製

對等複製:對等複製所有節點地位相同,都可以接受寫入請求,而且丟失其一,不影響整個資料庫訪問。

                            優勢:處理出錯的節點得心應手。

                                       只需增加節點就能提升效能。

                            缺點:資料一致性問題。例如寫入衝突。