主頁 >  其他 > 實時 OLAP, 從 0 到 1

實時 OLAP, 從 0 到 1

2021-04-13 10:26:12 其他

整理:趙宇彤、苗文婷

摘要:本文主要介紹 BTC.com 團隊在實時 OLAP 方面的技術演程序序及生產優化實踐,內容如下:

  1. 業務背景

  2. 機遇挑戰

  3. 架構演進

  4. 架構優化

  5. 未來展望

Tips:點擊文末「閱讀原文」即可回顧作者原版分享視頻~

一、業務背景

1.1 業務介紹 - ABCD

BTC.com 是一家區塊鏈技術方案提供者,我們的業務主要分為四個部分,總結來說就是 ABCD:A 是人工智能機器學習,B 是區塊鏈,C 代表云,D 是資料,這些模塊不僅相互獨立的,也可以互相結合,近幾年人工智能、區塊鏈的加速發展與大資料在背后提供的支持息息相關,

1.2 業務介紹 - 區塊鏈技術方案提供商

區塊鏈通俗來講可以理解為一個不可逆的分布式賬本,我們的作用是讓大家能更好的瀏覽賬本,挖掘賬本背后的資訊資料,目前位元幣的資料量級大概在幾十億到百億,資料量大概在數十T,當然我們也有其他的一些業務,如以太坊貨幣、智能合約分析服務等,

整體而言我們是一家區塊鏈技術方案的提供商,提供挖礦的服務,與金融行業的銀行一樣,我們也有很多的 OLAP 需求,比如當黑客攻擊交易所或供應鏈進行資產轉移或者洗錢時,需要經過鏈上的操作,我們可以在鏈上對其進行分析,以及交易上的跟蹤,統計資料等,為警方提供協助,

二、機遇挑戰

2.1 之前的架構

大概 2018 年的時候,競爭對手比較少,我們整體的架構如上,底層是區塊鏈的節點,通過 Parser 不斷的決議到 MySQL ,再從 MySQL 抽取到 Hive 或者 Presto,從 Spark 跑各種定時任務分析資料,再通過可視化的查詢,得到報表或者資料,架構的問題也是顯而易見的:

  • 不能做到實時處理資料

  • 存在單點問題,比方某一條鏈路突然掛掉,此時整個環節都會出現問題

2.2 遇到的需求與挑戰

  • 效率,效率問題是非常常見的,我們的表大概在幾十億量級,跑這種 SQL ,可能需要很長時間, SQL 查詢比較慢,嚴重影響統計效率,

  • 實時,資料不是實時的,需要等到一定的時間才會更新,如昨天的資料今天才能看到,

  • 監控,實時需求,如實時風控,每當區塊鏈出現一個區塊,我們就要對它進行分析,但是區塊出現的時間是隨機的,缺乏完整的監控,有時候作業突然壞了,或者是沒達到指標,我們不能及時知道,

2.3 技術選型我們需要考慮什么

在技術選型的時候我們需要考慮什么呢?首先是縮容,2020年行情不太好,大家都在盡力縮減成本,更好的活下去,在成本有限的情況下,我們如何能做更多的東西,必須提高自身的效率,同時也要保證質量,所以我們需要找到一種平衡,在成本效率還有質量這三者之間進行一定的平衡,

三、架構演進

3.1 技術選型

俗話說,工具選的好,下班下的早,關于是否引入 Flink,我們想了很久,它和 Spark 相比優勢在哪里?

我們實際調研以后,發現 Flink 還是有很多優勢,比方說靈活的視窗,精準的語意,低延遲,支持秒級的,實時的資料處理,因為團隊本身更熟練 Python ,所以我們當時就選擇了 PyFlink ,有專業的開發團隊支撐,近幾個版本變化比較大,實作了很多功能,在實時 OLAP 方面,資料庫我們采用了 ClickHouse ,

3.2 為什么使用 ClickHouse

為什么要使用 ClickHouse ?首先是快,查詢的效率高,位元組跳動,騰訊,快手等大公司都在用,同時我們也有 C++方面的技識訓累,使用起來比較容易,成本不是太高,

3.3 實時 OLAP 架構

基于以上的技術選型,我們就形成了上圖的架構,底層是資料源,包括區塊鏈的節點,通過 Parser 決議到 Kafka,Kafka 負責對接 Flink 和 Spark 任務,然后 Flink 把資料輸出到 MySQL 和 ClickHouse,支持報表匯出,資料統計,資料同步,OLAP 統計等,

資料治理方面,我們參考了業界的分層,分成了原始層、明細層、匯總層以及應用層,我們還有機器學習的任務,這些都部署在 K8s 平臺之上,

3.4 架構演進歷程

我們的架構演程序序如下圖,從 2018 年的 Spark 和 Hive ,到后來的 Tableau 可視化,今年接觸了 Flink ,下半年開始使用 ClickHouse ,后來 Flink 任務比較多了,我們開發了簡易的調度平臺,開發者只需要上傳任務,就會定時或者實時的跑任務,

3.5 架構演進思考

  • 為什么演進這么慢,因為區塊鏈的發展還沒有達到一定量級,無法像某些大公司有上億級別或者 PB 級別的資料量,我們的資料量沒有那么大,區塊鏈是一個新鮮的事物,沒有一定的歷史,另外的問題就是資源問題,由于人員不足,人員成本上也有所控制,

  • 剛才講的架構,我們總結了它適合怎樣的企業,首先是有一定的資料規模,比說某個企業 MySQL 只有幾千萬的資料,用 MySQL , Redis , MongoDB 都可以,就不適合這套架構,其次是需要一定的成本控制,這一整套成本算下來比 Spark 那一套會低很多,要有技術儲備,要開發了解相關的東西,

  • 區塊鏈資料的特點,資料量比較多,歷史資料基本上是不變的,實時資料相對來說是更有價值的,資料和時間存在一定的關聯,

3.6 實時 OLAP 產生的價值

在實時 OLAP 上線后,基本滿足了業務需求,同時成本也在可控的范圍內,

  • 適合的是最好的,不要盲目追求新技術,比如資料湖,雖然好,但是我們的資料量級實際上用不到,

  • 我們不考慮建設技術中臺,我們的公司規模是中小型,部門溝通起來比較容易,沒有太多的隔閡,沒有發展到一定的組織規模,所以我們沒有打算發展技術中臺,資料中臺,不盲目跟風上中臺,

  • 我們達到的效果是縮短了開發的時長,減少作業的運行時間,

四、架構優化

4.1 Flink 和 ClickHouse

Flink 和 ClickHouse 之間有一些聯動,我們自定義了三個作業,

  • 自定義 sink ,

  • ClickHouse 要一次性插入很多資料,需要控制好寫入的頻次,優先寫入本地表,耗時比較多,

  • 我們主要用在智能合約的交易分析,新增的資料比較多,比較頻繁,每幾秒就有很多資料,資料上關聯比較多,

4.2 ClickHouse 遇到的問題

  • 批量匯入時失敗和容錯,

  • Upsert 的優化,

  • 開發了常用 UDF ,大家知道 ClickHouse 官方是不支持 UDF 的嗎?只能通過打補丁,保證 ClickHouse 不會掛,

我們也在做一些開源方面的跟進,做一些補丁方面的嘗試,把我們業務上,技術上常用的 UDF ,集合在一起,

4.3 批量匯入策略

  • 歷史資料,可以認為是一種冷資料,相對來說不會經常改變,匯入的時候按照大小切分,按照主鍵排序,類似于 bitcoind ,底層的 Checker 和 Fixer 作業,匯入程序中及時進行報警和修復,比如匯入某一資料失敗了,如何更好的及時發現,之前就只能人肉監控,

  • 實時資料,我們需要不斷決議實時資料,大家可能對重組,51%的概念不太熟悉,這里簡單講一下,上圖最長的鏈也是最重要的鏈,它上面的一條鏈是一個重組并且分叉的一條鏈,當有一個攻擊者或者礦工去挖了上面的鏈,最終的結果會導致這條鏈被廢棄掉,拿不到任何獎勵,

如果超過51%的算力,就會達到這樣的效果,成為最長的鏈,這個是累計難度比較高的,此時我們會認為資料匯入失敗,同時我們會利用回撤的功能,不斷將其回滾和重組,直到滿足最完整的鏈,當然我們也會設定一些記錄和 CheckPoint ,這里的 CheckPoint 和 Flink 的 CheckPoint 的概念也有所區別,

它是區塊鏈方面的 CheckPoint ,區塊鏈有一個幣種叫 bch ,會定義 CheckPoint,當滿足一定的長度時,它就無法再進行回滾,避免了攻擊者的攻擊,我們主要是利用 CheckPoint 記錄資訊,防止回滾,同時還會按照級別/表記錄批量插入的失敗或者成功,如果失敗則會進行重試,以及報警回滾等操作,

4.4 Upsert 的優化

ClickHouse 不支持 Upsert ,主要在 SDK 方面做兼容,之前是直接往 MySQL 寫資料,目標是通過 SQL 陳述句修改對應的 SDK 增加臨時小表的 join ,通過 join 臨時小表,進行 Upsert 的操作,

舉個例子,區塊鏈地址賬戶余額,就像銀行的賬戶余額,必須非常精確,

4.5 Kubernetes 方面優化

Kubernetes 方面的優化,Kubernetes 是一個很完整的平臺,

  • 高可用的存盤,在早期的時候,我們就盡可能的將服務部署在 Kubernetes,包括 Flink 集群,基礎業務組件,幣種節點,ClickHouse 節點,在這方面 ClickHouse 做的比較好,方便兼容,支持高可用操作,

  • 支持橫向擴展,

  • 服務發現方面,我們做了一些定制,

4.6 如何保證一致性?

  • 采用 Final 進行查詢,等待資料合并完成,

  • 在資料方面的話,實作冪等性,保證唯一性,通過主鍵排序,整理出來一組資料,再寫入,

  • 寫入例外時就及時修復和回填,保證最終一致性,

4.7 監控

使用 Prometheus 作為監控工具,使用方便,成本較低,

五、未來展望

5.1 從 1 到 2

  • 擴展更多的業務和資料,之前我們的業務模式比較單一,只有資料方面的統計,之后會挖掘更多資訊,包括鏈上追蹤,金融方面的審計,

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

  • 跟進 Flink 和 PyFlink 的生態,積極參與開源的作業,優化相關作業,探索多 sink 方面的作業,原生 Kubernetes 的實踐,

5.2 從 2 到 3

  • 資料建模的規范,規定手段,操作,

  • Flink 和機器學習相結合,

  • 爭取拿到實時在線訓練的業務,Flink 做實時監控,是非常不錯的選擇,大公司都已經有相關的實踐,包括報警等操作,

總的來說的話,路漫漫其修遠兮,使用 Flink 真不錯,更多 Flink 相關技術交流,可掃碼加入社區釘釘大群~


▼ 關注「Flink 中文社區」,獲取更多技術干貨 ▼

戳我,回顧作者分享視頻!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/275398.html

標籤:AI

上一篇:Elasticsearch:一些有趣的資料型別

下一篇:Go語言“十誡”[譯]

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more