主页 > imtoken多签钱包 > 从0到1,构建实时OLAP

从0到1,构建实时OLAP

imtoken多签钱包 2023-02-27 07:31:25

组织者:赵雨桐、苗文婷

摘要:本文主要介绍BTC.com团队在实时OLAP方面的技术演进过程和生产优化实践。 内容如下:

商业背景

机遇与挑战

架构演变

架构优化

未来展望

01

商业背景

1.业务介绍-ABCD

sitebihu.com 以太坊账户体系_批量查询以太坊账户余额_sitehtzkw.com 以太坊账户创建

BTC.com是一家区块链技术解决方案提供商。 我们的业务主要分为四个部分。 总结起来就是ABCD:A是人工智能机器学习,B是区块链,C是云,D是数据。 这些模块既相互独立,又可以相互组合。 近年来,人工智能和区块链的加速发展与大数据提供的支持密切相关。

2. 业务介绍——区块链技术解决方案提供商

sitehtzkw.com 以太坊账户创建_批量查询以太坊账户余额_sitebihu.com 以太坊账户体系

sitehtzkw.com 以太坊账户创建_批量查询以太坊账户余额_sitebihu.com 以太坊账户体系

一般来说,区块链可以理解为一种不可逆的分布式账本。 我们的作用是让大家更好的浏览账本,挖掘账本背后的信息和数据。 目前,比特币的数据量约为数十亿至数百亿,数据量约为数十TB。 当然,我们还有一些其他的业务,比如以太币和智能合约分析服务。

总体而言,我们是区块链技术解决方案提供商,提供挖矿服务。 和金融行业的银行一样,我们也有很多OLAP的需求。 例如批量查询以太坊账户余额,当黑客攻击交易所或供应链进行资产转移或洗钱时,我们需要通过链上操作。 跟踪、统计等,为警方提供帮助。 02 机遇与挑战

1. 以前的架构

批量查询以太坊账户余额_sitehtzkw.com 以太坊账户创建_sitebihu.com 以太坊账户体系

2018年前后,竞争对手比较少,我们整体架构如上。 底层是区块链的节点,通过Parser不断解析到MySQL,再从MySQL抽取到Hive或Presto,从Spark运行各种定时任务分析数据,再通过可视化查询获取报表或数据。 架构的问题也很明显:

2. 遇到的需求和挑战

sitehtzkw.com 以太坊账户创建_sitebihu.com 以太坊账户体系_批量查询以太坊账户余额

三、技术选型需要考虑什么

sitebihu.com 以太坊账户体系_批量查询以太坊账户余额_sitehtzkw.com 以太坊账户创建

我们在选择技术时需要考虑什么? 首先是去产能。 2020年的市场不太好。 每个人都在想方设法降低成本,让生活过得更好。 在成本有限的情况下,如何才能做更多的事情呢? 我们必须提高自己的效率,同时保证质量。 所以我们需要在成本效率和质量之间找到平衡点。 03 架构演进

批量查询以太坊账户余额_sitehtzkw.com 以太坊账户创建_sitebihu.com 以太坊账户体系

1、技术选型

sitebihu.com 以太坊账户体系_sitehtzkw.com 以太坊账户创建_批量查询以太坊账户余额

俗话说,选好工具,下班早。 我们想了很久要不要引入Flink。 与Spark相比有什么优势?

经过我们的实际研究,我们发现 Flink 还是有很多优势的,比如灵活的窗口、精确的语义、低延迟、支持秒级、实时的数据处理。 因为团队本身比较精通Python,所以当时我们选择了PyFlink。 在专业开发团队的支持下,最近的版本改动比较大,实现了很多功能。 在实时OLAP方面,我们的数据库使用ClickHouse。

2、为什么要用ClickHouse

sitebihu.com 以太坊账户体系_批量查询以太坊账户余额_sitehtzkw.com 以太坊账户创建

为什么要使用 ClickHouse? 一是速度快,查询效率高。 字节跳动、腾讯、快手等大公司都在用。 同时我们在C++方面也有技术积累,比较好用,成本也不会太高。

3、实时OLAP架构

sitebihu.com 以太坊账户体系_批量查询以太坊账户余额_sitehtzkw.com 以太坊账户创建

基于以上技术选型,我们形成了上图的架构。 最底层是数据源,包括区块链的节点,通过Parser解析到Kafka。 Kafka负责连接Flink和Spark任务,然后Flink将数据输出到MySQL,ClickHouse支持报表导出、数据统计、数据同步、OLAP统计等。

在数据治理方面,我们参考了行业的分层,分为原始层、明细层、汇总层、应用层。 我们还有机器学习任务,部署在K8s平台上。

批量查询以太坊账户余额_sitebihu.com 以太坊账户体系_sitehtzkw.com 以太坊账户创建

4.架构演进过程

我们架构的演进过程如下图所示。 从2018年的Spark和Hive,到后来的Tableau可视化,今年开始接触Flink,下半年开始使用ClickHouse。 后来,Flink 任务多了。 我们开发了一个简单的调度平台。 开发者只需上传任务,任务就会定时或实时运行。

批量查询以太坊账户余额_sitehtzkw.com 以太坊账户创建_sitebihu.com 以太坊账户体系

5.架构演化思路

sitehtzkw.com 以太坊账户创建_批量查询以太坊账户余额_sitebihu.com 以太坊账户体系

6.实时OLAP产生的价值

sitehtzkw.com 以太坊账户创建_批量查询以太坊账户余额_sitebihu.com 以太坊账户体系

实时OLAP上线后,基本满足业务需求,成本也在可控范围内。

04 架构优化

1. Flink 与 ClickHouse

批量查询以太坊账户余额_sitehtzkw.com 以太坊账户创建_sitebihu.com 以太坊账户体系

sitebihu.com 以太坊账户体系_批量查询以太坊账户余额_sitehtzkw.com 以太坊账户创建

Flink和ClickHouse有一些联动,我们定制了三个作业。

2、ClickHouse遇到的问题

sitehtzkw.com 以太坊账户创建_sitebihu.com 以太坊账户体系_批量查询以太坊账户余额

我们也在做一些开源的跟进,做一些补丁的尝试,把我们业务和技术中常用的UDF汇集起来。

3.批量导入策略

sitebihu.com 以太坊账户体系_sitehtzkw.com 以太坊账户创建_批量查询以太坊账户余额

如果超过51%的算力,就会达到这样的效果,成为最长的链。 这是一个比较高的累积难度。 这个时候我们就会认为数据导入失败了。 回滚重组,直到满足最完整的链条。 当然,我们也会设置一些记录和CheckPoints。 这里CheckPoint的概念也和Flink的CheckPoint不同。

它是区块链的CheckPoint。 区块链有一种叫做 bch 的货币,它定义了 CheckPoint。 当达到一定长度后,就不能回滚,避免了攻击者的攻击。 我们主要使用CheckPoint来记录信息,防止回滚。 同时我们也根据level/table记录批量插入失败或者成功。 如果失败,我们将重试并报警回滚。

4.Upsert优化

批量查询以太坊账户余额_sitehtzkw.com 以太坊账户创建_sitebihu.com 以太坊账户体系

ClickHouse 不支持更新插入。 主要是兼容SDK。 它用于直接将数据写入MySQL。 目标是通过SQL语句修改对应的SDK增加临时小表的join,通过join临时小表进行Upsert操作。

sitehtzkw.com 以太坊账户创建_批量查询以太坊账户余额_sitebihu.com 以太坊账户体系

例如,区块链地址账户余额批量查询以太坊账户余额,就像银行账户余额一样,必须非常精确。

5. Kubernetes优化

sitebihu.com 以太坊账户体系_sitehtzkw.com 以太坊账户创建_批量查询以太坊账户余额

Kubernetes 中的优化。 Kubernetes 是一个非常完整的平台。

6、如何保证一致性?

sitehtzkw.com 以太坊账户创建_批量查询以太坊账户余额_sitebihu.com 以太坊账户体系

7.监控

批量查询以太坊账户余额_sitebihu.com 以太坊账户体系_sitehtzkw.com 以太坊账户创建

使用 Prometheus 作为监控工具。 使用方便,成本低。 05 五个未来展望

1.从1到2

sitebihu.com 以太坊账户体系_sitehtzkw.com 以太坊账户创建_批量查询以太坊账户余额

2.从2到3

sitehtzkw.com 以太坊账户创建_sitebihu.com 以太坊账户体系_批量查询以太坊账户余额

总的来说,任重而道远,用Flink确实不错。