關於分散式資料庫,你需要知道的一些事(上)

引言

隨著互聯網的飛速發展,人類社會的數據量迅速激增,據統計目前人類一年產生的數據就相當於人類進入現代化以前所有歷史的總和,而且互聯網業務的發展通常具有爆發性,業務量很可能在短短的一個月內突然爆髮式地增長几千倍,對應的數據也很可能快速地從原來的幾百GB飛速上漲到了幾百個TB。如果在這爆發的關鍵時刻,系統不穩定或無法訪問,那麼對於業務將會是毀滅性的打擊。

這時,傳統的單機資料庫提供的服務,在系統可擴展性、性價比方面已不再適用。伴隨著對於系統性能、成本以及擴展性的新需求,分散式資料庫系統應運而生,力求突破單機MySQL容量和性能瓶頸,徹底消除單機資料庫無法支撐企業業務高速發展的後顧之憂。

在《關於分散式資料庫,你需要知道的一些事》系列裡,大U將以UCloud分散式資料庫產品——UDDB為例,用三篇的篇幅為大家詳細解析分散式資料庫的一些重要特性和技術實踐細節。

本篇是該系列的第一篇,將概括性地闡述分散式資料庫的優勢和應用場景,難度偏入門級。那麼,我們開始吧:)

傳統單機資料庫面臨的挑戰

以電商網站為例,在網站創建之初,日均訪問量可能只有幾百到幾千人,這時整個業務後台可能就一個資料庫,所有業務表都放在這個資料庫中,一台普通的伺服器就可以支撐,而且這種架構對業務開發人員也非常友好,因為所有的表都在一個庫中,這樣查詢語句就可以靈活關聯了,使用起來很便捷。

圖1 所有業務表都在一個資料庫中

但是隨著業務的不斷發展,每天訪問網站的人越來越多,資料庫的壓力也越來越大。通過分析發現,所有的訪問流量中,80%以上都是讀流量,只有20%左右的寫流量,這時可以通過讀寫分離來緩解資料庫的訪問壓力。

圖2 讀寫分離

由於網站的訪問量越來越大,儘管採取了讀寫分離的方式,但隨著資料庫的壓力繼續增加,資料庫的瓶頸越來越突出。這時我們發現,我們的網站演進到現在,交易、商品、用戶的數據都還在同一個資料庫中。然而在這個巨大而且臃腫的資料庫中,表和表之間的數據很多是沒有關係的,也不需要JOIN操作,理論上就應該把它們分別放到不同的伺服器,即垂直分庫。

圖3 垂直分庫

隨著業務的不斷增長,我們發現交易、商品、用戶這些庫都變得巨大無比,單機資料庫已經無法滿足業務的繼續增長,這時可以考慮對這些表進行水平拆分,即同一個表中的數據拆分到兩個甚至多個資料庫中。以用戶表為例,數據可以根據userid的奇偶來確定數據的劃分。把id為奇數的放到DB1,為偶數的放DB2。

圖4 水平分表

開源中間件解決方案及其存在的問題

讀寫分離、垂直拆庫、水平分表作為大型網站後台的剛需,市面上有很多中間件可以滿足,比較有代表性的有:阿里巴巴的Cobar、MyCAT。然而這些開源中間件都存在以下缺點:

配置複雜

  1. 基於開源中間件對一張大表進行水平拆分需要以下六步操作:

  2. 部署資料庫節點

  3. 安裝和部署中間件軟體(多個)

  4. 登錄到各資料庫節點,創建子表

  5. 把子表的信息,配置到每個中間件的配置文件,然後啟動

  6. 用HAProxy等負載均衡收斂中間件IP,對外提供一個IP

  7. 業務正式訪問

運維極其不便

基於開源中間件對系統進行擴容需要進行以下幾步:

圖5 開源中間件系統擴容

開源中間件使用和運維的複雜性給業務發展造成了非常大的壓力,無形中為企業發展帶來了很大的負擔。

分散式雲資料庫UDDB

UCloud分散式資料庫(UCloud Distributed Database,簡稱UDDB)是一種穩定、可靠、容量和服務能力可彈性伸縮的分散式關係型資料庫服務。UDDB高度兼容MYSQL協議和語法,支持垂直建表、自動化水平拆分,在線平滑擴縮容,服務能力線性擴展,透明讀寫分離,具備資料庫全生命周期運維管控能力。UDDB的架構設計如下圖所示:

圖6 UDDB系統架構

UDDB主要包括三大模塊

  • 中間件

    用來做SQL路由和查詢結果的聚合、讀寫分離、以及對存儲節點的管理

  • 存儲節點

    即高可用UDB實例,用來存儲分表的數據

  • 只讀實例

    存儲節點的從庫,普通的UDB實例,只能對其進行讀操作

UDDB的主要功能

  • 水平分表

    UDDB通過水平分表來解決容量瓶頸問題,根據一列數據的值把數據行拆分到多個獨立的表裡。對於開發人員來說,不再需要關心如何切分數據、如何路由請求等待,只需初始化分片欄位(shardkey),直接面向邏輯庫表進行編程、專註業務邏輯的實現即可,大大降低了程序的複雜度。

  • 讀寫分離

    UDDB的讀寫分離功能是一種對應用透明的讀寫分離實現,應用在不需要修改任何代碼的情況下,只需要在UDDB控制台中調整讀權重,即可將讀流量按照需要的比例在存儲節點與只讀實例之間調整。寫流量則統一走存儲節點,不分流。

  • 垂直建表

    可以在創建水平分區表的同時創建普通表,普通表可以指定創建到某個存儲節點。

  • 在線平滑擴容

    UDDB可以通過增加存儲節點的方式線性增加系統的容量,系統擴容期間業務可以正常訪問,讀寫請求均可以正常進行,僅在修改中間件路由信息的時候會有0.2秒左右的閃斷。

相對開源中間件,分散式雲資料庫的優勢

  • 簡單易用

    提供 Web 控制台,資料庫操作簡單,基於UDDB對一張大表進行水平拆分只需要以下幾步:

  1. 在控制台上創建一個UDDB實例(一鍵創建)
  2. 通過MySQL客戶端登錄UDDB實例,執行一條create table語句
  3. 業務訪問

  • 快速部署

    可在線快速部署實例,節省採購、部署、配置等自建資料庫工作,縮短項目周期,幫助業務快速上線。

  • 彈性擴展

    多種規格實例配置;自主升降級,按需擴展;平滑擴展,業務不中斷。

  • 低成本

    穩定的產品,完善的運維和技術支持,相比開源產品總體性價比更高;多種實例規格配置覆蓋不同業務規模場景,按需購買;自主控制實例升降配,根據業務量調整資源使用。

  • 高可用

    UDDB底層數據存儲復用了高可用UDB,可用性有保障。

  • 在線數據遷移

    用戶可以通過幾行命令將UDB中的數據熱遷移到UDDB,業務不受影響。

分散式雲資料庫的應用場景

  • 大型應用

解決百萬用戶以上的大型應用,如電商、O2O、社交應用,產生海量的數據,普通MySQL架構無法支撐業務增長的問題。

  • 物聯網數據

在工業監控和遠程控制、智慧城市的延展、智能家居、車聯網等物聯網場景下,感測監控設備多,採樣率高,數據存儲要求高,超大數據規模存儲的問題。

  • 文件索引

平台的圖片、小文件、視頻的數據極大,文件索引為億級,該類數據通常只有新增、修改、讀取、刪除操作,分散式資料庫可以有效提高提高索引檢索的效率。

  • 大數據存儲

關係型數據是最有價值的數據之一,因大數據分析的需要,需要存儲大量歷史數據,並解決數據讀、寫、分析的需求。

總結

此篇僅是入門級的概括性描述,沒啥好總結的(′?`*)///

關於分散式資料庫構建過程的技術實踐解析,敬請期待下一篇~

(PS:就這麼水了一篇,很是愧疚,給大家吟詩一首以表歉意:

汴水流,泗水流,流到瓜州古渡頭。吳山點點愁。

思悠悠,恨悠悠,恨到歸時方始休。暴富解千憂。

好濕!好濕!)

(PPS:原詩來自 白居易的《長相思·汴水流》,改編by @辣筆小新 )

相關閱讀推薦:

關於直播,所有的技術細節都在這裡了(四)

關於直播,所有的技術細節都在這裡了(三)

關於直播,所有的技術細節都在這裡了(二)

關於直播,所有的技術細節都在這裡了(一)

本文由『UCloud關係型存儲研發團隊』提供。

「UCloud機構號」將獨家分享雲計算領域的技術洞見、行業資訊以及一切你想知道的相關訊息。

歡迎提問&求關注 o(*////▽////*)q~

以上。


推薦閱讀:

Hadoop 的實常式序有哪些推薦?
雲計算如果真的成熟了,還會有獨立的操作系統么?或者說,還會有人賣獨立的操作系統么?
手把手帶你搭建第一個個人網站(上)
彈幕系統更新的血與淚
《球狀閃電》里提到的在電腦上裝一個插件就能分擔大型計算的一小部分在現實中有實例嗎?這是雲計算嗎?

TAG:云计算 | 互联网技术 | 数据库 |