【天極網伺服器頻道6月3日消息】HTTP://www.aliyun.com/zixun/aggregation/32730.html">資訊系統的背後用於保存和處理最終結果的地方就是資料庫。 因此資料庫系統就變得尤為重要,這意味著如果資料庫如果面臨問題,則意味著整個應用系統也會面臨挑戰,從而帶來嚴重的損失和後果。 目前在大資料趨勢下,資料庫面臨如下的挑戰:
當資料庫性能遇到問題時,是否能夠橫向擴展,通過添加伺服器的方式達到更高的輸送量,從而充分利用現有的硬體實現更好的投資回報率。
是否擁有即時同步的副本,當資料庫面臨災難時,可以短時間內通過容錯移轉的方式保證資料庫的可用性。 此外,當資料丟失或損壞時,能否通過所謂的即時副本(熱備)實現資料的零損失。
資料庫的橫向擴展是否對應用程式透明,如果資料庫的橫向擴展需要應用程式端進行大量修改,則所帶來的後果不僅僅是高昂的開發成本,同時也會帶來很多潛在和非潛在的風險。
面對上述挑戰一個顯而易見的辦法是將多個伺服器組成一組集群,這樣一來就可以充分利用每一台伺服器的資源並將用戶端負載分發到不同伺服器上,隨著應用程式負載的增加,只需要將新的伺服器添加到集群即可。
資料庫的集群和擴展不像應用程式擴展那樣容易,因為從資料庫端來說,一旦涉及到了集群,往往會涉及到資料庫層面的同步,因此從是否存在資料冗余這個角度來講,我們可以從大面上把資料庫集群分為以下兩種形式:
Share-Disk架構
Share-Disk架構是通過多個伺服器節點共用一個存儲來實現資料庫集群。 在此基礎之上,Share-Disk架構又分為單活和雙活,雙活即為集群中的每一個節點都可以同時對外提供服務,而單活為集群中只有一個節點可對外提供服務, 集群中的其他伺服器作為冗余在活的節點出現故障時接替該伺服器成為對外提供服務的節點。
這種方式的弊端也是顯而易見的,如下:
硬體資源的嚴重浪費,同一時間集群中只有一台伺服器活著,其他伺服器只能作為冗余伺服器。
集群無法提升性能,因為只有一台伺服器可用。
存儲方面存在單點故障,除非在存儲層級保證高可用,通常需要昂貴的SAN存儲。
因此該類方案僅僅可以做到伺服器層面的高可用,無法帶來性能的提升,也無法解決存儲單點故障的問題。 因此如果不搭配其他高可用或負載均衡的技術,存在的意義並不是很大。
另一類技術是Share-Disk中的雙活的技術,與單活技術不同的是,雙活的技術雖然也是共用磁片,但集群中的所有節點都可以對外提供服務,典型的產品就是Oracle的RAC。 RAC的技術性非常的高,因此需要水準比較高的人來運維繫統。 RAC設計的初衷並不是為了性能,而是為了高可用和可擴充性,如果應用程式不是針對RAC架構設計和開發的,則將應用程式遷移到RAC上會導致性能的急劇下降,並且節點越多性能下降越明顯。
Share-Nothing架構
Share-Nothing架構又分為兩種,首先是分散式架構。 將資料庫中的資料按照某一標準分佈到多台機器中,查詢或插入時按照條件查詢或插入對應的分區。 另一種是每一個節點完全獨立,節點之間通過網路連接,通常是通過光釺等私人網路絡。
在Share-Nothing架構中,每一個節點都擁有自己的記憶體和存儲,都保留資料的完整副本。 通常來說,又可以分為兩種,可以負載均衡和不可以負載均衡。
首先談談不可負載均衡的集群,在不可負載均衡的技術中,集群中的節點會被分為主節點和輔助節點,主節點向外提供服務,輔助節點作為熱備(二階段事務提交)或暖備(不需要保證事務同步),同時有可能使得輔助節點提供唯讀的服務。
這種架構帶來的好處包括:
輔助節點資料和主節點保持同步或准同步,當搭配協力廠商仲裁後,可以實現自動的容錯移轉,從而實現了高可用。
輔助節點由於和主節點完全獨立且資料同步或准同步,因此主節點出現資料損壞後,可以從輔助節點恢復資料(自動或手動)。
由於Share-Nothing架構使用了本機存放區(或SAN),相較于Share-Disk架構在慢速網路時有非常大的性能優勢。
當然,弊端也顯而易見,因為輔助節點無法對外提供服務或只能提供唯讀服務,因此該類集群的弊端包括:
擴展能力非常有限。
對性能沒有提升,因為涉及到各節點的資料同步,甚至帶來性能的下降。
輔助節點如果可讀,雖然提升性能,但需要修改前端應用程式,對應用程式不透明。
另一類Share-Nothing架構中,是允許負載均衡的。 所謂負載均衡就是將對資料庫的負載分佈到集群中的多個節點上,在集群中的每一個節點都可以對外提供服務,從而達到更高的輸送量,更好的資源利用率和更低的回應時間。 前端通過代理進行調度。 可負載均衡的Share-Nothing架構的好處是每台伺服器都能提供服務,能充分利用現有資源,達到更高的輸送量。 這類方案集群中的每個節點都會對外提供服務,因此有如下好處:
由於每一個節點都可以對外提供服務,因此可以提升性能。
擴充性得到提升,可以通過向集群添加節點直接進行Scale-Out擴充。
由於前端應用通過代理連接到集群,而集群中的每一個節點都保持完整的資料集,因此對應用程式端完全透明。
但該類方案的弊端也顯而易見,因為每一個節點都需要完整的資料集,因此需要佔用更多的存儲空間。
網上商城商品/規格/促銷價格(作者:李祥敬責任編輯:李祥敬)