<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          實(shí)時(shí) OLAP, 從 0 到 1

          共 4215字,需瀏覽 9分鐘

           ·

          2021-05-11 11:06

          整理:趙宇彤、苗文婷
          摘要:本文主要介紹 BTC.com 團(tuán)隊(duì)在實(shí)時(shí) OLAP 方面的技術(shù)演進(jìn)過(guò)程及生產(chǎn)優(yōu)化實(shí)踐,內(nèi)容如下:

          1. 業(yè)務(wù)背景

          2. 機(jī)遇挑戰(zhàn)

          3. 架構(gòu)演進(jìn)

          4. 架構(gòu)優(yōu)化

          5. 未來(lái)展望


          Tips:點(diǎn)擊文末閱讀原文即可回顧作者原版分享視頻~
           

          一、業(yè)務(wù)背景


          1.1 業(yè)務(wù)介紹 - ABCD



          BTC.com 是一家區(qū)塊鏈技術(shù)方案提供者,我們的業(yè)務(wù)主要分為四個(gè)部分,總結(jié)來(lái)說(shuō)就是 ABCD:A 是人工智能機(jī)器學(xué)習(xí),B 是區(qū)塊鏈,C 代表云,D 是數(shù)據(jù)。這些模塊不僅相互獨(dú)立的,也可以互相結(jié)合。近幾年人工智能、區(qū)塊鏈的加速發(fā)展與大數(shù)據(jù)在背后提供的支持息息相關(guān)。

          1.2 業(yè)務(wù)介紹 - 區(qū)塊鏈技術(shù)方案提供商



          區(qū)塊鏈通俗來(lái)講可以理解為一個(gè)不可逆的分布式賬本,我們的作用是讓大家能更好的瀏覽賬本,挖掘賬本背后的信息數(shù)據(jù)。目前比特幣的數(shù)據(jù)量級(jí)大概在幾十億到百億,數(shù)據(jù)量大概在數(shù)十T,當(dāng)然我們也有其他的一些業(yè)務(wù),如以太坊貨幣、智能合約分析服務(wù)等。

          整體而言我們是一家區(qū)塊鏈技術(shù)方案的提供商,提供挖礦的服務(wù)。與金融行業(yè)的銀行一樣,我們也有很多的 OLAP 需求,比如當(dāng)黑客攻擊交易所或供應(yīng)鏈進(jìn)行資產(chǎn)轉(zhuǎn)移或者洗錢時(shí),需要經(jīng)過(guò)鏈上的操作,我們可以在鏈上對(duì)其進(jìn)行分析,以及交易上的跟蹤,統(tǒng)計(jì)數(shù)據(jù)等,為警方提供協(xié)助。

          二、機(jī)遇挑戰(zhàn)


          2.1 之前的架構(gòu)



          大概 2018 年的時(shí)候,競(jìng)爭(zhēng)對(duì)手比較少,我們整體的架構(gòu)如上。底層是區(qū)塊鏈的節(jié)點(diǎn),通過(guò) Parser 不斷的解析到 MySQL ,再?gòu)?MySQL 抽取到 Hive 或者 Presto,從 Spark 跑各種定時(shí)任務(wù)分析數(shù)據(jù),再通過(guò)可視化的查詢,得到報(bào)表或者數(shù)據(jù)。架構(gòu)的問(wèn)題也是顯而易見(jiàn)的:

          • 不能做到實(shí)時(shí)處理數(shù)據(jù)

          • 存在單點(diǎn)問(wèn)題,比方某一條鏈路突然掛掉,此時(shí)整個(gè)環(huán)節(jié)都會(huì)出現(xiàn)問(wèn)題


          2.2 遇到的需求與挑戰(zhàn)



          • 效率,效率問(wèn)題是非常常見(jiàn)的。我們的表大概在幾十億量級(jí),跑這種 SQL ,可能需要很長(zhǎng)時(shí)間, SQL 查詢比較慢,嚴(yán)重影響統(tǒng)計(jì)效率。

          • 實(shí)時(shí),數(shù)據(jù)不是實(shí)時(shí)的,需要等到一定的時(shí)間才會(huì)更新,如昨天的數(shù)據(jù)今天才能看到。

          • 監(jiān)控,實(shí)時(shí)需求,如實(shí)時(shí)風(fēng)控,每當(dāng)區(qū)塊鏈出現(xiàn)一個(gè)區(qū)塊,我們就要對(duì)它進(jìn)行分析,但是區(qū)塊出現(xiàn)的時(shí)間是隨機(jī)的。缺乏完整的監(jiān)控,有時(shí)候作業(yè)突然壞了,或者是沒(méi)達(dá)到指標(biāo),我們不能及時(shí)知道。


          2.3 技術(shù)選型我們需要考慮什么



          在技術(shù)選型的時(shí)候我們需要考慮什么呢?首先是縮容,2020年行情不太好,大家都在盡力縮減成本,更好的活下去。在成本有限的情況下,我們?nèi)绾文茏龈嗟臇|西,必須提高自身的效率,同時(shí)也要保證質(zhì)量。所以我們需要找到一種平衡,在成本效率還有質(zhì)量這三者之間進(jìn)行一定的平衡。

          三、架構(gòu)演進(jìn)


          3.1 技術(shù)選型



          俗話說(shuō),工具選的好,下班下的早,關(guān)于是否引入 Flink,我們想了很久,它和 Spark 相比優(yōu)勢(shì)在哪里?

          我們實(shí)際調(diào)研以后,發(fā)現(xiàn) Flink 還是有很多優(yōu)勢(shì),比方說(shuō)靈活的窗口,精準(zhǔn)的語(yǔ)義,低延遲,支持秒級(jí)的,實(shí)時(shí)的數(shù)據(jù)處理。因?yàn)閳F(tuán)隊(duì)本身更熟練 Python ,所以我們當(dāng)時(shí)就選擇了 PyFlink ,有專業(yè)的開(kāi)發(fā)團(tuán)隊(duì)支撐,近幾個(gè)版本變化比較大,實(shí)現(xiàn)了很多功能。在實(shí)時(shí) OLAP 方面,數(shù)據(jù)庫(kù)我們采用了 ClickHouse 。

          3.2 為什么使用 ClickHouse



          為什么要使用 ClickHouse ?首先是快,查詢的效率高。字節(jié)跳動(dòng),騰訊,快手等大公司都在用。同時(shí)我們也有 C++方面的技術(shù)積累,使用起來(lái)比較容易,成本不是太高。

          3.3 實(shí)時(shí) OLAP 架構(gòu)



          基于以上的技術(shù)選型,我們就形成了上圖的架構(gòu),底層是數(shù)據(jù)源,包括區(qū)塊鏈的節(jié)點(diǎn),通過(guò) Parser 解析到 Kafka,Kafka 負(fù)責(zé)對(duì)接 Flink 和 Spark 任務(wù),然后 Flink 把數(shù)據(jù)輸出到 MySQL 和 ClickHouse,支持報(bào)表導(dǎo)出,數(shù)據(jù)統(tǒng)計(jì),數(shù)據(jù)同步,OLAP 統(tǒng)計(jì)等。

          數(shù)據(jù)治理方面,我們參考了業(yè)界的分層,分成了原始層、明細(xì)層、匯總層以及應(yīng)用層。我們還有機(jī)器學(xué)習(xí)的任務(wù),這些都部署在 K8s 平臺(tái)之上。

          3.4 架構(gòu)演進(jìn)歷程


          我們的架構(gòu)演進(jìn)過(guò)程如下圖,從 2018 年的 Spark 和 Hive ,到后來(lái)的 Tableau 可視化,今年接觸了 Flink ,下半年開(kāi)始使用 ClickHouse ,后來(lái) Flink 任務(wù)比較多了,我們開(kāi)發(fā)了簡(jiǎn)易的調(diào)度平臺(tái),開(kāi)發(fā)者只需要上傳任務(wù),就會(huì)定時(shí)或者實(shí)時(shí)的跑任務(wù)。


          3.5 架構(gòu)演進(jìn)思考


          • 為什么演進(jìn)這么慢,因?yàn)閰^(qū)塊鏈的發(fā)展還沒(méi)有達(dá)到一定量級(jí),無(wú)法像某些大公司有上億級(jí)別或者 PB 級(jí)別的數(shù)據(jù)量。我們的數(shù)據(jù)量沒(méi)有那么大,區(qū)塊鏈?zhǔn)且粋€(gè)新鮮的事物,沒(méi)有一定的歷史。另外的問(wèn)題就是資源問(wèn)題,由于人員不足,人員成本上也有所控制。

          • 剛才講的架構(gòu),我們總結(jié)了它適合怎樣的企業(yè)。首先是有一定的數(shù)據(jù)規(guī)模,比說(shuō)某個(gè)企業(yè) MySQL 只有幾千萬(wàn)的數(shù)據(jù),用 MySQL , Redis , MongoDB 都可以,就不適合這套架構(gòu)。其次是需要一定的成本控制,這一整套成本算下來(lái)比 Spark 那一套會(huì)低很多。要有技術(shù)儲(chǔ)備,要開(kāi)發(fā)了解相關(guān)的東西。

          • 區(qū)塊鏈數(shù)據(jù)的特點(diǎn)。數(shù)據(jù)量比較多,歷史數(shù)據(jù)基本上是不變的,實(shí)時(shí)數(shù)據(jù)相對(duì)來(lái)說(shuō)是更有價(jià)值的,數(shù)據(jù)和時(shí)間存在一定的關(guān)聯(lián)。


          3.6 實(shí)時(shí) OLAP 產(chǎn)生的價(jià)值



          在實(shí)時(shí) OLAP 上線后,基本滿足了業(yè)務(wù)需求,同時(shí)成本也在可控的范圍內(nèi)。

          • 適合的是最好的,不要盲目追求新技術(shù),比如數(shù)據(jù)湖,雖然好,但是我們的數(shù)據(jù)量級(jí)實(shí)際上用不到。
          • 我們不考慮建設(shè)技術(shù)中臺(tái),我們的公司規(guī)模是中小型,部門溝通起來(lái)比較容易,沒(méi)有太多的隔閡,沒(méi)有發(fā)展到一定的組織規(guī)模,所以我們沒(méi)有打算發(fā)展技術(shù)中臺(tái),數(shù)據(jù)中臺(tái),不盲目跟風(fēng)上中臺(tái)。
          • 我們達(dá)到的效果是縮短了開(kāi)發(fā)的時(shí)長(zhǎng),減少作業(yè)的運(yùn)行時(shí)間。

          四、架構(gòu)優(yōu)化


          4.1 Flink 和 ClickHouse



          Flink 和 ClickHouse 之間有一些聯(lián)動(dòng),我們自定義了三個(gè)工作。

          • 自定義 sink 。

          • ClickHouse 要一次性插入很多數(shù)據(jù),需要控制好寫(xiě)入的頻次,優(yōu)先寫(xiě)入本地表,耗時(shí)比較多。

          • 我們主要用在智能合約的交易分析,新增的數(shù)據(jù)比較多,比較頻繁,每幾秒就有很多數(shù)據(jù)。數(shù)據(jù)上關(guān)聯(lián)比較多。


          4.2 ClickHouse 遇到的問(wèn)題



          • 批量導(dǎo)入時(shí)失敗和容錯(cuò)。

          • Upsert 的優(yōu)化。

          • 開(kāi)發(fā)了常用 UDF ,大家知道 ClickHouse 官方是不支持 UDF 的嗎?只能通過(guò)打補(bǔ)丁,保證 ClickHouse 不會(huì)掛。


          我們也在做一些開(kāi)源方面的跟進(jìn),做一些補(bǔ)丁方面的嘗試,把我們業(yè)務(wù)上,技術(shù)上常用的 UDF ,集合在一起。


          4.3 批量導(dǎo)入策略



          • 歷史數(shù)據(jù),可以認(rèn)為是一種冷數(shù)據(jù),相對(duì)來(lái)說(shuō)不會(huì)經(jīng)常改變。導(dǎo)入的時(shí)候按照大小切分,按照主鍵排序,類似于 bitcoind ,底層的 Checker 和 Fixer 工作,導(dǎo)入過(guò)程中及時(shí)進(jìn)行報(bào)警和修復(fù)。比如導(dǎo)入某一數(shù)據(jù)失敗了,如何更好的及時(shí)發(fā)現(xiàn),之前就只能人肉監(jiān)控。


          • 實(shí)時(shí)數(shù)據(jù),我們需要不斷解析實(shí)時(shí)數(shù)據(jù),大家可能對(duì)重組,51%的概念不太熟悉,這里簡(jiǎn)單講一下,上圖最長(zhǎng)的鏈也是最重要的鏈,它上面的一條鏈?zhǔn)且粋€(gè)重組并且分叉的一條鏈,當(dāng)有一個(gè)攻擊者或者礦工去挖了上面的鏈,最終的結(jié)果會(huì)導(dǎo)致這條鏈被廢棄掉,拿不到任何獎(jiǎng)勵(lì)。


          如果超過(guò)51%的算力,就會(huì)達(dá)到這樣的效果,成為最長(zhǎng)的鏈,這個(gè)是累計(jì)難度比較高的,此時(shí)我們會(huì)認(rèn)為數(shù)據(jù)導(dǎo)入失敗,同時(shí)我們會(huì)利用回撤的功能,不斷將其回滾和重組,直到滿足最完整的鏈。當(dāng)然我們也會(huì)設(shè)置一些記錄和 CheckPoint ,這里的 CheckPoint 和 Flink 的 CheckPoint 的概念也有所區(qū)別。

          它是區(qū)塊鏈方面的 CheckPoint ,區(qū)塊鏈有一個(gè)幣種叫 bch ,會(huì)定義 CheckPoint,當(dāng)滿足一定的長(zhǎng)度時(shí),它就無(wú)法再進(jìn)行回滾,避免了攻擊者的攻擊。我們主要是利用 CheckPoint 記錄信息,防止回滾,同時(shí)還會(huì)按照級(jí)別/表記錄批量插入的失敗或者成功,如果失敗則會(huì)進(jìn)行重試,以及報(bào)警回滾等操作。

          4.4 Upsert 的優(yōu)化


          ClickHouse 不支持 Upsert ,主要在 SDK 方面做兼容,之前是直接往 MySQL 寫(xiě)數(shù)據(jù),目標(biāo)是通過(guò) SQL 語(yǔ)句修改對(duì)應(yīng)的 SDK 增加臨時(shí)小表的 join ,通過(guò) join 臨時(shí)小表,進(jìn)行 Upsert 的操作。

          舉個(gè)例子,區(qū)塊鏈地址賬戶余額,就像銀行的賬戶余額,必須非常精確。

          4.5 Kubernetes 方面優(yōu)化



          Kubernetes 方面的優(yōu)化。Kubernetes 是一個(gè)很完整的平臺(tái)。

          • 高可用的存儲(chǔ),在早期的時(shí)候,我們就盡可能的將服務(wù)部署在 Kubernetes,包括 Flink 集群,基礎(chǔ)業(yè)務(wù)組件,幣種節(jié)點(diǎn),ClickHouse 節(jié)點(diǎn),在這方面 ClickHouse 做的比較好,方便兼容,支持高可用操作。

          • 支持橫向擴(kuò)展。

          • 服務(wù)發(fā)現(xiàn)方面,我們做了一些定制。

           

          4.6 如何保證一致性?



          • 采用 Final 進(jìn)行查詢,等待數(shù)據(jù)合并完成。

          • 在數(shù)據(jù)方面的話,實(shí)現(xiàn)冪等性,保證唯一性,通過(guò)主鍵排序,整理出來(lái)一組數(shù)據(jù),再寫(xiě)入。

          • 寫(xiě)入異常時(shí)就及時(shí)修復(fù)和回填,保證最終一致性。


          4.7 監(jiān)控



          使用 Prometheus 作為監(jiān)控工具。使用方便,成本較低。

          五、未來(lái)展望


          5.1 從 1 到 2



          • 擴(kuò)展更多的業(yè)務(wù)和數(shù)據(jù)。之前我們的業(yè)務(wù)模式比較單一,只有數(shù)據(jù)方面的統(tǒng)計(jì),之后會(huì)挖掘更多信息,包括鏈上追蹤,金融方面的審計(jì)。

          • 賺更多的錢,盡可能的活下去,我們才能去做更多的事情,去探索更多的盈利模式。

          • 跟進(jìn) Flink 和 PyFlink 的生態(tài),積極參與開(kāi)源的工作,優(yōu)化相關(guān)作業(yè)。探索多 sink 方面的工作,原生 Kubernetes 的實(shí)踐。


          5.2 從 2 到 3



          • 數(shù)據(jù)建模的規(guī)范,規(guī)定手段,操作。

          • Flink 和機(jī)器學(xué)習(xí)相結(jié)合。

          • 爭(zhēng)取拿到實(shí)時(shí)在線訓(xùn)練的業(yè)務(wù),F(xiàn)link 做實(shí)時(shí)監(jiān)控,是非常不錯(cuò)的選擇。大公司都已經(jīng)有相關(guān)的實(shí)踐。包括報(bào)警等操作。



          猜你喜歡
          Flink狀態(tài)管理與狀態(tài)一致性(長(zhǎng)文)
          Flink實(shí)時(shí)計(jì)算topN熱榜
          Hbase集群掛掉的一次驚險(xiǎn)經(jīng)歷
          數(shù)倉(cāng)建模分層理論
          數(shù)倉(cāng)架構(gòu)發(fā)展史
          數(shù)倉(cāng)建模方法論
          瀏覽 43
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本少妇高潮喷水XXXXXXX | 免费观看无码视频 | 丁香色婷婷五月天 | 国产精品内射婷婷一级二 | 国产黄色网啪啪啪精品视频a |