數據SCT定律:存儲,計算,時間

其實沒有SCT定律,這個是我根據分佈式CAP定律瞎造的。不過呢,從大數據這個行業來說,我們始終都是在存儲,計算和時間進行權衡,博弈以及突破。某種程度上來說,當擁有其中兩者,可能很難兼顧第三者。

我們日常做的很多事情,其實都是在突破這三者中的某一種,不過過程可能比較艱辛,可能爲了突破A,反過來又要求突破B。

比如爲了加快計算,我們會通過構建Cube,物化視圖或者中間表(數倉裏的分層)來完成,但這樣對存儲的要求會更高,要能支撐更大的存儲量,同時需要支持更新,而且在覆蓋寫的時候,讀不受影響。

再比如,做數據的家常便飯是增量/全量同步數據,這主要是爲了解決數據搬遷的問題。早期的數倉是要求數據都彙總到一個分佈式存儲上的,所以必然會遇到增量/全量同步的問題。這個過程中會觸發時間問題(也就是數據可見性的延時),也會觸發計算的額外消耗,這些計算來源於同步以及涉及到Kafka,MySQL等各個子系統的消耗。

還有一個問題是,計算上,雖然SQL現在越來越成爲主流,但是SQL依然有很多地方難以滿足需求,所以我們依然要用各種API進行計算,我們沒有一個統一的大數據應用,還是各種應用孤立的跑在硬件上(我們會把Yarn,K8s當做硬件),這個時候我們會嘗試使用Spark,Preso,Impala,Kylin等各種系統解決各自的問題。

我今天回顧了下最近做的工作,這些工作其實也都是爲了解決這三個層面的問題。

首先是存儲上,早先的數倉已經不能滿足更新,事務,版本等方面的要求了,同時對AI的支持也力有不逮,所以現在開始演化爲數據湖。所以我基於delta開發了delta-plus,主要是我覺得對方的開發進度太慢,所以事先添加了一些社區還沒開發的功能。有了delta-plus,我們完成了三個任務:

  1. 併發讀寫。比如寫不影響讀。
  2. 流批共享。流和批可以同時操作一張表。
  3. 更新和刪除。很多系統並不能支持更新。

有了存儲上的支持,很多其他的事情就會變得簡單。

其次是同步方面的問題,我們希望解決的是延時上的問題(時間),傳統的模式是利用canal等工具讀取binlog到kafka,然後kafka後面接一個計算系統,將數據寫入到一個可更新的存儲,比如hbase,系統需要對接hbase來進行查詢,或者將hbase定時導出到hive供批使用。環節越長,無論計算效率,維護成本就會越高。針對這個問題,我希望有一個工具,能夠一個環節搞定,這個工具直接對接mysql binlog,然後直接將數據同步到HDFS上,可以供流和批讀取。這個問題由spark-binlog解決,然後存儲由delta-plus完成。

第三個是計算的問題,大數據對外提供的一個很重要的功能就是海量數據的分析查詢,爲了應對各種需求,我們各種武器都上去,計算系統繁多而複雜,時間效率和不一定能達到訴求。這期間得益於阿里 Relational Cache的啓發,瞭解到物化視圖的概念,所以開發了sql-booster,他的出發點是實現物化視圖的Query改寫,但是現在的目標會更大一點。我們這裏簡單的介紹下物化視圖是什麼,假設你有A,B,C三張表,但是用戶經常會將這三張表進行Join關聯查詢,這個時候按數倉分層的方式,就是我再建中間表比如v1,v2。這個時候你需要告訴用戶,以後如果能用v1,v2儘可能用v1,v2,因爲他們會更快些。物化視圖就是,你不需要再告訴用戶去使用v1,v2,用戶依然還是使用A,B,C,但是系統通過改寫SQL,來自動使用v1,v2加速。所以sql-booster本質上可以讓你很方便的通過添加中間表的方式來透明加速用戶的查詢。不管你叫他物化視圖,還是關係緩存,都可以。

前面三個,我們通過三個組件delta-plus,spark-binlog,sql-booster 分別解決了存儲,同步,查詢加速三個問題。大家當然可以獨立使用,現在我們其實缺一個計算系統將三者融合起來,讓三者可以以一個方便方式組合起來。我們知道,在Linux系統,有非常多的工具,比如sed,grep,cat等等,但是粘合他們的是shell。MLSQL Stack是爲了完成這個任務的,他提供了MLSQL語言,相當於一個大數據的語言,脫胎於SQL。其次,MLSQL可以很好的把這些工具組織起來。

最後打個廣告(雖然前面已經有很多廣告),這些年我開源了很多項目,期待大家能一起用起來,然後讓他們變得越來越好:

  1. delta-plus
    delta with upsert/delete/compaction support, and can work with spark-binlog
    which make multi-table sync more easy.

  2. spark-binlog
    Spark binlog datasource

  3. simple-schema
    A new way to describe spark dataframe schema with text format.

  4. spark-adhoc-kafka
    A Kafka datasource supports consuming Kafka data by specifing
    a time interval / offset / parallelism

  5. spark-submitter-console
    Spark Submitter Console is a tinny but useful web console in which you can

    • Uploading jar
    • Submitting jar to Yarn cluster
    • Monitoring/Manager your applications:
  6. spark-hbase
    A HBase datasource implementation for Spark and MLSQL.
    This library requires Spark 2.3+/2.4+, HBase 1.2+/2.0+ (tested).

  7. sql-booster

This is a library for SQL optimizing/rewriting. Current version (0.1.0) we have already support Materialized View rewrite.

This project is under active development and *** NOT READY FOR PRODUCTION ***

  1. MLSQL Stack

A Platform unifies BigData and AI. A language unifies BigData and AI.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章