二 大資料背景下事務型處理系統相關技術
在google、facebook、taobao等大網際網路公司出現之後,這些公司注冊和線上使用者數量都非長大,是以該公司交易系統需要解決“海量資料+高并發+資料一緻性+高可用性”的問題。
為了解決該問題,從目前資料來看,其實沒有一個通用的解決方案,各大公司都會根據自己業務特點定制開發相應的系統,但是常用的思路主要包括以下幾點:
(1)資料庫分片,結合業務和資料特點将資料分布在多台機器上。
(2)利用緩存等機制,盡量利用記憶體,解決高并發時遇到的随機IO效率問題。
(3)結合資料複制等技術實作讀寫分離,以及提高系統可用性。
(4)大量采用異步處理機制,對應高并發沖擊。
(5)根據實際業務需求,盡量避免分布式事務。
1相關系統介紹
1) 阿裡CORBAR系統
阿裡COBAR系統是一個基于MYSQL資料庫的分布式資料庫系統,屬于基于分布式資料庫中間件的分布式資料庫系統。該系統是前身是陳思儒開發的“變形蟲”系統(以前調研過),由于陳思儒離開阿裡去了盛大,阿裡當心“變形蟲”穩定性等問題,重新開發該項目。
該系統主要采用資料庫分片思路,實作了:資料拆分、讀寫分離、複制等功能。由于此系統由于隻需要滿足事務型操作即可,是以相對真正并行資料庫叢集(例如TeraData等),此類系統提供操作沒有也不需要提供一些複雜跨庫處理,是以該系統存在以下限制:
(1)不支援跨庫的join、分頁、排序、子查詢。
(2)insert等變更語句必須包括拆分字段等。
(3)應該不支援跨機事務(以前變形蟲不支援)。
說白了此類系統不具備并行計算能力,基本上相當于資料庫路由器!
另外此類系統的在實際應用的關鍵問題是,根據什麼對資料進行切分,因為切分不好會導緻分布式的事務問題。
2) 阿裡OceanBase系統
該系統也是淘寶為了解決高并發、大資料環境下事務型處理而定制開發的一個系統。該系統主要思路和特點如下:
(1)他們發現在實際生成環境中,每天更新的資料隻占總體資料的1%不到,是以他們把資料分為:基線資料和增量更新資料。
(2)基線資料是靜态資料,采用分布式存儲方式進行存儲。
(3)隻在一台伺服器上存儲和處理增量更新資料,并且是在記憶體中存儲和處理更新資料。
(4)在系統負載輕的時候,把增量更新批量合并到基線資料中。
(5)資料通路時同時通路基線資料和增量更新資料并合并。
是以這樣好處是:
(1)讀事務和寫事務分離
(2)通過犧牲一點擴充性(寫是一個單點),來避免分布式事務處理。
說明:該系統雖然能處理高并發的事務型處理,号稱很牛逼,但其實也隻是根據電商的事務處理來定制開發的專用系統,個人認為其技術難度小于oracle等通用型的資料庫。該系統無法應用到銀行或者12306等,因為其事務處理的邏輯遠遠比電商商品買賣處理邏輯複雜。
在目前的大資料時代,一定是基于應用定制才能找到好的解決方案!
3) 基于Hbase的交易系統
在hadoop平台下,HBASE資料庫是一個分布式KV資料庫,屬于實時資料庫範疇。支付寶目前支付記錄就是存儲在HBASE資料庫中。
HBASE資料庫接口是非SQL接口,而是KV操作接口(基于Key的通路和基于key範圍的scan操作),是以HBASE資料庫雖然可擴充性非常好,但是由于其接口限制導緻該資料庫能支援上層應用很窄。基于HBASE應用的設計中,關鍵點是key的設計,要根據需要支援的應用來設計key的組成。
可以認為HBASE資料庫隻支援作為KEY的這一列的索引。雖然目前HBASE有支援二級索引的方案,二級索引維護将會比較麻煩。
2并發和并行差別
并發是指同時執行通常不相關的各種任務,例如交易型系統典型屬于高并發系統。
并行是通過将一個很大的計算任務,劃分為多個小的計算任務,然後多個小計算任務的并行執行,來縮短該計算任務計算時間。
兩者主要差別在于:
(1)通訊與協調方面:在并行計算中,由于多個小任務同屬一個大的計算任務,是以小任務之間存在依賴關系,小任務之間需要大量通訊和協調;相反,并發中的多個任務之間基本互相獨立,任務與任務之間相關性很小。
(2)容錯處理方面:由于并發任務之間互相獨立,某個任務執行失敗并不會影響其它的任務。但是并行計算中的多個任務屬于一個大任務,是以某個子任務的失敗,如果不能恢複(粗粒度容錯與細粒度容錯),則整個任務都會失敗。
并發
并行
3本章總結
資料量大不一定需要并行計算,雖然資料量大,資料是分布存儲,但是如果每次操作基本上還是針對少量資料,是以每次操作基本上都是在一台伺服器上完成,不涉及并行計算。隻是需要通過資料複制、資料緩存、異步處理等方式來支撐高并發通路量。