本文內容來源於彭暘在OSC源創會上海站上的主題演講,IT大咖說為與開源中國合作的視訊知識分享平臺。
編輯:IT大咖說
閱讀字數: 2739 用時:10分鐘
內容摘要
對於真正企業級應用,需要分散式NoSQL/NewSQL資料庫具備什麼樣的能力?相比MongoDB等分散式資料庫,他們的企業級應用場景挑戰在哪裡?SequoiaDB的技術特點又緣何適合金融、政府等使用者的應用場景?本次分享,巨杉就將帶來有關SequoiaDB技術解密透視具體技術點,同時我們將介紹SequoiaDB在企業級應用上的最佳實踐。
嘉賓演講視訊地址:t.cn/RKB6jB9
企業級功能技術解密
資料庫應用範疇
我們把整個資料的本身分為三個型別。第一個型別是大家比較熟悉的交易型,傳統的OLTP業務。第二個是分析型。還有一種是不太常見的連機型,或者是線上資料庫。它是基於OLTP的延伸。
交易型資料庫效能核心指標
傳統的交易型資料庫,它的核心指標是什麼?
評測方式是TPC-C,就是結果測試。
它主要強調幾個效能。隨機的讀寫效能很重要。第二個是事物相關。還有資料相關的一致性和可靠性。傳統的資料庫要考慮的東西非常多,所以它必定會受到影響,優勢變成劣勢,沒有一個資料庫是完美的。
分析型資料庫效能核心指標
分析型資料庫需要考慮的點就很少,它不用考慮事物,只需要考慮讀寫效能和大量的吞吐量。
它的評測方式就是TPC-H或者TPC-DS,它變得很簡單,考慮的細節上的東西變得比較少。但它的簡單變成了其它效能上的壓力。
分析型資料庫主要強調的一個是高併發,一個是可靠性,還有一個是讀寫效能。它其實是損失了一些強事物的東西,但是強調滿足了高效能高併發的要求。
SequoiaDB分散式資料庫架構
今天我想主要講的是做一個MPP對於分散式資料庫需要考慮哪些。
第一個是分散式架構。分散式裡包含了協調節點、編目節點、還有資料節點。
最簡單的是資料節點,只要把資料全部放在這個節點就好了。編目節點是後設資料。協調節點是處理請求的,所有的API請求、命令請求都是通過協調節點來的。但是協調節點還有一個工作,它是根據編目節點的後設資料來判斷指令的資料到底在什麼地方,來決定把它的執行力下到那個點去做,這樣才能把它的效能增強。
SequoiaDB物理架構
對於一個分散式資料庫來說,最重要的不是CPU,而是IO。IO對所有磁碟資料的處理是極其重要的。
分散式資料庫是一個X86小叢集。X86最大的缺點是它的效能很容易當機。它的優點是價格便宜,很容易處理和管理。
什麼叫分散式的概念呢?我們把它分成兩部分的話,會有一個主節點和兩個從節點。主節點所有的寫入會自動地分佈到從節點去做同步。當你一主兩從的時候,每一塊磁碟它是百分之百相同的。它是靠一主兩從多備份的方法來滿足一致性和資料的完整性,也就是我們說的用空間來換取它的一致性。
分散式架構優化:資料多維分割槽
水平分割槽是對一個關鍵詞做資料均衡的切分。因為把資料拆小了以後,當所有的層次很多的時候,它的效能會急劇增加,所以資料切片是很重要的。
水平切分的主要目的是它為了線性增長,把所有資料切分在不同的磁碟裡面,並要保持資料的均勻和平衡性。
但是有的時候只是一個月的資料也有很多,還有什麼辦法能把資料切分得更加好一點?我們就稱為叫垂直分割槽。垂直分割槽儘可能選擇時間或區域相關性較高的欄位。我們把這兩種的分割槽方法結合在一起就稱之為多維分割槽,它是整個分散式資料物理和邏輯切分的核心。
引擎內部優化:B樹多維度索引
對於一個資料庫來說,如果是做查詢類的話,索引是它的核心。很重要的一點就是對資料的切分要確保索引層不能太高。我們還支援反向排序的一個全能索引。
分散式架構優化:讀寫分離機制
分散式架構有一個主節點,兩個從節點。一般來說主節點是為了寫的。如果一個系統中已經有了三個副本,可以讓其中的一個副本變成專門做高併發的查詢,甚至可以讓另一個節點做批量的資料。這樣就會變成讀寫分離的狀態。一套體系可以用在三種模式上來做,這是它的強項。
分散式架構優化:資料域邏輯與物理隔離
傳統上來說,為了在不同的業務中,會建不同的表進行處理,為了保障業務之間是隔離的。但是現在的企業或者網際網路,很多的業務需要跨不同的業務去產生。
我們在實施業務中還有很多是需要跨業務群的。
在巨杉分散式裡可以做資料融合,不同的業務既能隔離又能融合在一起進行操作。
分散式架構優化:SQL與儲存引擎隔離
傳統的資料庫SQL和儲存是放在一起的,但是我們認為SQL和儲存是可以隔離的。因為SQL完全沒有狀態,只是做了SQL的引擎分析,然後把它變成指令下壓到每一個節點上做計算。如果為了讓SQL的效能提高,可以額外增加很多SQL的節點來提升它的效能。
分散式架構優化:一致性雜湊機制
如果資料量已經很大了,那資料遷移該怎麼做,是不是會很麻煩?我們在在這個部分做了一些優化。我們是把hash落在一個範圍內,這樣的話就容易在這個範圍內再進行小切分,它的遷移速度和效率會更高,它會在後面比較透明地遷移,不會引起很大的阻塞。
引擎內部優化:快儲存支援大小檔案
我們的塊儲存是有兩個引擎,一個是資料的引擎,還有一個是塊結構化的引擎。這個引擎跟HDFS有點差異,HDFS是64兆的大塊,我們是最大到256K的小塊。這是為了處理到行級別的資料。
比如我要查一張圖片,如果是大塊的話,吞吐量是很大但不適合做實時交易。我們把一個資料塊拆成很多碎片扔到分散式資料庫裡,這樣它同時讀取的效能會非常快。
高效壓縮機制
對於資料庫來說,IO是核心中的核心。一般來講我們會把資料進行壓縮。我們有兩種壓縮,一種是Snappy的行壓縮,還有一種是基於LZW的表壓縮。Snappy壓縮基本上能做到資料的50%行壓縮,但表壓縮可以做到快80%,效率非常高的。
對一個聯機型高併發的業務場景來說,CPU一般不會有壓力,但是IO換取的效能增長那是巨大的,所以從這個角度來說,損失1%到5%的CPU壓力卻換取50%到80%IO儲存的效能是值得。
企業級應用最佳實踐
證券行業高併發查詢
例如某證券類交易資訊管理系統,通過搭建基於SequoiaDB的資料庫儲存,該機構將所有歷史資料實現線上化,同時保證每天增量的及時寫入。它在峰值超過兩億條記錄寫入,併發量超過10000。高峰時段同時有超過百億級別的資料需要被檢索、呼叫,查詢返回時間小於100ms,實際測試效能10倍於原有MySQL。在PD的資料做到毫秒級的精準查詢和資料返回,這是巨杉最大的一個優勢。
銀行歷史資料平臺
在歷史平臺上,比如像銀行要的資料量特別大,以巨杉的方式就是把所有的資料全量儲存,它的好處一是可以隨時查詢,第二個好處是為了做大資料的準備。
交通/安防 監控視訊影像管理
在實時處理中,巨杉非常適合做監控型的方法,但它不是合作怎麼說機器學習和深度分析,因為它的吞吐量和磁碟儲存的碎片化不適合做深度分析或者做AI這部分。每一個企業它都有它的強項,巨杉的資料庫就非常適合於網際網路、政府大企業的大資料處理。
今天就介紹到這裡,謝謝!
贈票福利
在此連結t.cn/RKBaHhM末評論區留言,獲贊數前5的童鞋們,將獲得2017 OpenStack Days China免費門票(價值600元)! 7月22日20:00截止哦~