雲計算背後的秘密之YunTable的故事

來源:互聯網
上載者:User
在本系列之前的一篇文章,和大家提到過,其實業界已經出現很多NoSQL產品,那麼筆者為什麼在這些產品的基礎上,研發新的NoSQL資料庫呢? 因為在研發YunEngine的時候,筆者發現在業界還缺乏一款在架構上非常簡潔,並同時可以適應各種雲計算場景的NoSQL資料庫,所以在那時本人就開始進行YunTable的開發工作。 YunTable的目標並不是做一個像BigTable那樣大而全的資料庫,而是主要做一個精簡版的分散式Key-Value資料庫,上層的雲計算應用將會根據其自身的需求去利用YunTable或者做修改, 從而使YunTable能適應雲計算各種場景,並且非常易用。 YunTable已經在10月初正式開源,併發布其0.8版,官方位址是HTTP://code.google.com/p/yuntable/。 下面將對YunTable進行分析和介紹,包括它的設計、架構和如何適應不同的雲計算環境。

YunTable的設計

談到一個NoSQL資料庫的設計時,肯定離不開資料模型、分散式架構和資料存儲這三方面。

在資料模型上,YunTable是Key-Value的,雖然Key-value這種資料模型在結構方面和傳統的關聯式相比較簡單,有點類似常見的HashTable,一個Key對應一個Value,但是其能提供非常快的查詢速度、 大的資料存放量和高併發地操作,並非常適合通過主鍵(Key)來對資料進行查詢和修改等操作,雖然不支援複雜的操作,但是可以通過上層的開發來彌補這個缺陷。

在分散式架構方面,YunTable選擇了Single Master模式來管理整個集群,雖然這個模式存在單點失敗的隱患,但是不論是在實現,還是在語義方面都非常簡單,而且為了避免Master出現單點失敗的情況, YunTable將會在今後版本中引入Shadow-Master這種機制。

在資料存儲方面,YunTable選擇了SSTable這種檔案格式。 簡單而言,SSTable是一個用於存儲已排序Key-Value對的檔案格式,並且是不可變動的(Immutable),也就是寫了之後,只能將其更新附加在其之後,而不能直接進行修改, 這樣是為了讓系統能執行Disk所擅長的循序存取,而不是隨機訪問。 在內部格式方面,SSTable檔主要有Index和Data Block這兩部分組成。 在實際運行時,系統常會把Index載入記憶體,以確保查詢的效率。

YunTable的架構

在架構方面,主要可分為Region、Master和Client這三個模組,而且這三個模組都是獨立的,並負責各自的業務邏輯。


▲圖1. YunTable的架構

首先,介紹一下Master節點,Master節點在功能上面屬於比較「輕」調,主要負責維護Table和Region節點之間的對應關係,實際資料的查詢和輸入則都通過Region節點和Client端之間的交互完成, 和Master節點無關,這樣能有效地減輕Master節點的負擔,使得其能支撐百台伺服器以上的集群。 舉個例子,比如,當一個Client端需要處理某個Table的時候,它只需在第一次處理時候,向Master請求和這個Table相關的Region節點的位址,當之後再次處理到這個Table的時候, Client端無需再和Master節點進行溝通,而是直接和相關的Region節點進行交互即可。

其次,談談Region節點,其作用是負責處理來自Client端的請求,並存儲和管理大量的資料,Region節點非常類似BigTable論文中所提到的Tablet伺服器。 每個Region伺服器管理多個Tablet,每個Tablet對應一個Table,並負責存儲屬於這個Table的資料。 除了管理多個Tablet之外,Region伺服器還自帶WAL日誌,全稱為「Write-Ahead Log」,主要用於暫存那些最新的資料更新要求,以避免當Tablet中的Memstore被意外關閉時所造成的資料丟失, 而當Memstore完成對資料的寫入之後,WAL也會清空那些對應的資料。 用於存儲資料的Tablet主要有兩大部分組成:其一是Memstore:其是緩存在記憶體中的資料檔案,主要存儲最新添加的資料,當Memstore存儲的資料接近限定值時,在Memstore上緩存的資料都將會被沖刷(Flush) 到YFile中;其二是YFile,它是主要用於存儲資料的持久化檔,它是基於上面提到的SSTable格式,YFile只會在當Memstore被觸發沖刷時創建,平時常被順序讀,這樣能有效地利用硬碟順序讀性能好的特性, 檔的位置在其所屬Tablet的目錄中。

現在Client端主要以名為「YunCli」的命令列為主,主要用於讓使用者輸入與資料處理相關的命令,並與後端的Master節點和Region節點進行交互,但隨著時間的發展,在形式上, Client端有可能是類似JDBC的驅動等。

如何適應不同的雲計算環境

雲計算主要常見的有兩類場景:需要低延遲和高併發的讀寫能力,資料量雖大,但稱不上海量,估計最多在TB級別,大部分現在使用RDBMS的Web應用基本上都屬於這一類,有點類似傳統的OLTP(線上交易處理);海量資料的存儲和操作 ,比如PB級別的,這方面的例子有傳統的資料倉儲、Google海量的Web頁面和圖片存儲等,有點類似傳統的OLAP(線上分析處理)。

那麼YunTable是如何適應這兩種環境?首先,堅持Key-Value、Single-Master和SSTable這樣經典和通用的設計。 其次,在資料存儲方面,加入Hotness這個機制,主要是通過設置Hotness值來決定之前為了完成查詢而讀取到記憶體中的Data Block的存留時間,假設如果是低延遲的情況,那麼將Hotness值設置長一點,如果是海量資料 ,則相反。

最後,YunTable作為新一代的PaaS平臺YunEngine的後端資料庫已經投入實際運行中,而且即將發佈其0.9版,在這個版本中,YunTable的單點性能和穩定性將會走上一個新的臺階。 還有,下一篇將繼續給大家關注NoSQL。

作者簡介

吳朱華,之前在IBM中國研究院參與過多個雲計算產品的開發工作,現在專注于YunTable(HTTP://code.google.com/p/yuntable/)和YunEngine(HTTP:// yunengine.com/)的研發,並即將發表《剖析雲計算》一書,敬請期待。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.