实时 OLAP, 从 0 到 1

简介: BTC.com 团队在实时 OLAP 方面的技术演进过程及生产优化实践。

作者|高正炎

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

  1. 业务背景
  2. 机遇挑战
  3. 架构演进
  4. 架构优化
  5. 未来展望

一、业务背景

1.1 业务介绍 - ABCD

image.png

BTC.com 是一家区块链技术方案提供者,我们的业务主要分为四个部分,总结来说就是 ABCD:A 是人工智能机器学习,B 是区块链,C 代表云,D 是数据。这些模块不仅相互独立的,也可以互相结合。近几年人工智能、区块链的加速发展与大数据在背后提供的支持息息相关。

1.2 业务介绍 - 区块链技术方案提供商

image.png

区块链通俗来讲可以理解为一个不可逆的分布式账本,我们的作用是让大家能更好的浏览账本,挖掘账本背后的信息数据。目前比特币的数据量级大概在几十亿到百亿,数据量大概在数十T,当然我们也有其他的一些业务,如以太坊货币、智能合约分析服务等。

整体而言我们是一家区块链技术方案的提供商,提供挖矿的服务。与金融行业的银行一样,我们也有很多的 OLAP 需求,比如当黑客攻击交易所或供应链进行资产转移或者洗钱时,需要经过链上的操作,我们可以在链上对其进行分析,以及交易上的跟踪,统计数据等,为警方提供协助。

二、机遇挑战

2.1 之前的架构

image.png

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

  • 不能做到实时处理数据
  • 存在单点问题,比方某一条链路突然挂掉,此时整个环节都会出现问题

2.2 遇到的需求与挑战

image.png

  • 效率,效率问题是非常常见的。我们的表大概在几十亿量级,跑这种 SQL ,可能需要很长时间, SQL 查询比较慢,严重影响统计效率。
  • 实时,数据不是实时的,需要等到一定的时间才会更新,如昨天的数据今天才能看到。
  • 监控,实时需求,如实时风控,每当区块链出现一个区块,我们就要对它进行分析,但是区块出现的时间是随机的。缺乏完整的监控,有时候作业突然坏了,或者是没达到指标,我们不能及时知道。

2.3 技术选型我们需要考虑什么

image.png

在技术选型的时候我们需要考虑什么呢?首先是缩容,2020年行情不太好,大家都在尽力缩减成本,更好的活下去。在成本有限的情况下,我们如何能做更多的东西,必须提高自身的效率,同时也要保证质量。所以我们需要找到一种平衡,在成本效率还有质量这三者之间进行一定的平衡。

三、架构演进

3.1 技术选型

image.png

俗话说,工具选的好,下班下的早,关于是否引入 Flink,我们想了很久,它和 Spark 相比优势在哪里?

我们实际调研以后,发现 Flink 还是有很多优势,比方说灵活的窗口,精准的语义,低延迟,支持秒级的,实时的数据处理。因为团队本身更熟练 Python ,所以我们当时就选择了 PyFlink ,有专业的开发团队支撑,近几个版本变化比较大,实现了很多功能。在实时 OLAP 方面,数据库我们采用了 ClickHouse 。

3.2 为什么使用 ClickHouse

image.png

为什么要使用 ClickHouse ?首先是快,查询的效率高。字节跳动,腾讯,快手等大公司都在用。同时我们也有 C++方面的技术积累,使用起来比较容易,成本不是太高。

3.3 实时 OLAP 架构

image.png

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

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

3.4 架构演进历程

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

image.png

3.5 架构演进思考

image.png

  • 为什么演进这么慢,因为区块链的发展还没有达到一定量级,无法像某些大公司有上亿级别或者 PB 级别的数据量。我们的数据量没有那么大,区块链是一个新鲜的事物,没有一定的历史。另外的问题就是资源问题,由于人员不足,人员成本上也有所控制。
  • 刚才讲的架构,我们总结了它适合怎样的企业。首先是有一定的数据规模,比说某个企业 MySQL 只有几千万的数据,用 MySQL , Redis , MongoDB 都可以,就不适合这套架构。其次是需要一定的成本控制,这一整套成本算下来比 Spark 那一套会低很多。要有技术储备,要开发了解相关的东西。
  • 区块链数据的特点。数据量比较多,历史数据基本上是不变的,实时数据相对来说是更有价值的,数据和时间存在一定的关联。

3.6 实时 OLAP 产生的价值

image.png

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

  • 适合的是最好的,不要盲目追求新技术,比如数据湖,虽然好,但是我们的数据量级实际上用不到。
  • 我们不考虑建设技术中台,我们的公司规模是中小型,部门沟通起来比较容易,没有太多的隔阂,没有发展到一定的组织规模,所以我们没有打算发展技术中台,数据中台,不盲目跟风上中台。
  • 我们达到的效果是缩短了开发的时长,减少作业的运行时间。

四、架构优化

4.1 Flink 和 ClickHouse

image.png

Flink 和 ClickHouse 之间有一些联动,我们自定义了三个工作。

  • 自定义 sink 。
  • ClickHouse 要一次性插入很多数据,需要控制好写入的频次,优先写入本地表,耗时比较多。
  • 我们主要用在智能合约的交易分析,新增的数据比较多,比较频繁,每几秒就有很多数据。数据上关联比较多。

4.2 ClickHouse 遇到的问题

image.png

  • 批量导入时失败和容错。
  • Upsert 的优化。
  • 开发了常用 UDF ,大家知道 ClickHouse 官方是不支持 UDF 的吗?只能通过打补丁,保证 ClickHouse 不会挂。

我们也在做一些开源方面的跟进,做一些补丁方面的尝试,把我们业务上,技术上常用的 UDF ,集合在一起。

4.3 批量导入策略

image.png

  • 历史数据,可以认为是一种冷数据,相对来说不会经常改变。导入的时候按照大小切分,按照主键排序,类似于 bitcoind ,底层的 Checker 和 Fixer 工作,导入过程中及时进行报警和修复。比如导入某一数据失败了,如何更好的及时发现,之前就只能人肉监控。
  • 实时数据,我们需要不断解析实时数据,大家可能对重组,51%的概念不太熟悉,这里简单讲一下,上图最长的链也是最重要的链,它上面的一条链是一个重组并且分叉的一条链,当有一个攻击者或者矿工去挖了上面的链,最终的结果会导致这条链被废弃掉,拿不到任何奖励。

如果超过51%的算力,就会达到这样的效果,成为最长的链,这个是累计难度比较高的,此时我们会认为数据导入失败,同时我们会利用回撤的功能,不断将其回滚和重组,直到满足最完整的链。当然我们也会设置一些记录和 CheckPoint ,这里的 CheckPoint 和 Flink 的 CheckPoint 的概念也有所区别。

它是区块链方面的 CheckPoint ,区块链有一个币种叫 bch ,会定义 CheckPoint,当满足一定的长度时,它就无法再进行回滚,避免了攻击者的攻击。我们主要是利用 CheckPoint 记录信息,防止回滚,同时还会按照级别/表记录批量插入的失败或者成功,如果失败则会进行重试,以及报警回滚等操作。

4.4 Upsert 的优化

image.png

ClickHouse 不支持 Upsert ,主要在 SDK 方面做兼容,之前是直接往 MySQL 写数据,目标是通过 SQL 语句修改对应的 SDK 增加临时小表的 join ,通过 join 临时小表,进行 Upsert 的操作。

举个例子,区块链地址账户余额,就像银行的账户余额,必须非常精确。

4.5 Kubernetes 方面优化

image.png

Kubernetes 方面的优化。Kubernetes 是一个很完整的平台。

  • 高可用的存储,在早期的时候,我们就尽可能的将服务部署在 Kubernetes,包括 Flink 集群,基础业务组件,币种节点,ClickHouse 节点,在这方面 ClickHouse 做的比较好,方便兼容,支持高可用操作。
  • 支持横向扩展。
  • 服务发现方面,我们做了一些定制。

4.6 如何保证一致性?

image.png

  • 采用 Final 进行查询,等待数据合并完成。
  • 在数据方面的话,实现幂等性,保证唯一性,通过主键排序,整理出来一组数据,再写入。
  • 写入异常时就及时修复和回填,保证最终一致性。

4.7 监控

image.png

使用 Prometheus 作为监控工具。使用方便,成本较低。

五、未来展望

5.1 从 1 到 2

image.png

  • 扩展更多的业务和数据。之前我们的业务模式比较单一,只有数据方面的统计,之后会挖掘更多信息,包括链上追踪,金融方面的审计。
  • 赚更多的钱,尽可能的活下去,我们才能去做更多的事情,去探索更多的盈利模式。
  • 跟进 Flink 和 PyFlink 的生态,积极参与开源的工作,优化相关作业。探索多 sink 方面的工作,原生 Kubernetes 的实践。

5.2 从 2 到 3

image.png

  • 数据建模的规范,规定手段,操作。
  • Flink 和机器学习相结合。
  • 争取拿到实时在线训练的业务,Flink 做实时监控,是非常不错的选择。大公司都已经有相关的实践。包括报警等操作。

总的来说的话,路漫漫其修远兮,使用 Flink 真不错。

原文链接

本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/513827.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gartner发布2021年数字商务技术成熟度曲线,重点关注四项技术

应用领导人应密切关注可视化配置、数字钱包、客户身份和访问管理以及虚拟客户助理这四项将在未来两年对数字商务产生重大影响的技术。 编辑 | 宋慧 供稿 | Gartner 根据Gartner 2021年数字商务技术成熟度曲线(Hype Cycle for Digital Commerce)&#x…

鸿蒙手机系统还没有开发,华为鸿蒙手机太难了!引发开发者大吐槽:为何没有自己独特风格?-互联网/电商-文章-小虾米...

【华为鸿蒙手机太难了!引发开发者大吐槽:为何没有自己独特风格?】互联网/电商-文章-小虾米2020-12-27 11:32:02 小虾米帐号:军事科技(tabc) 关注我 举报 来源:qq新闻 浏览量(129)【12月28日讯】导语&#xff0c…

Fluid给数据弹性一双隐形的翅膀 (1) -- 自定义弹性伸缩

简介: 弹性伸缩作为Kubernetes的核心能力之一,但它一直是围绕这无状态的应用负载展开。而Fluid提供了分布式缓存的弹性伸缩能力,可以灵活扩充和收缩数据缓存。 它基于Runtime提供了缓存空间、现有缓存比例等性能指标, 结合自身对于Runtime资源…

利用 Python 实现多任务进程

来源:杰哥的IT之旅作者:阿拉斯加一、进程介绍 进程:正在执行的程序,由程序、数据和进程控制块组成,是正在执行的程序,程序的一次执行过程,是资源调度的基本单位。程序:没有执行的代码…

小白也能懂的 Nacos 服务模型介绍

简介: 理解了 Nacos 的服务模型,也有利于我们了解 Nacos 背后的工作原理,从而确保我们正确地使用 Nacos。 作者:岛风 前言 按照目前市场上的主流使用场景,Nacos 被分成了两块功能:服务注册发现&#xff0…

那些与 IE 相伴的日子

来源:零一作者:前端印象大家好,IE 大家都不陌生,毕竟出现在大家的视野中已经很久很久,久到有20多年,当然也因前端技术的快速更新,给需要兼容IE浏览器的前端程序员带来了不少的困扰。慢慢地&…

html代码style图片width,HTML Style columnWidth用法及代码示例

DOM中的columnWidth属性用于指定列的宽度。用法:返回columnWidth属性:object.style.columnWidth设置columnWidth属性:object.style.columnWidth "auto | length | initial | inherit"属性值:auto:缺省值。列宽将由浏览器确定lengt…

KubeVela 1.0 :开启可编程式应用平台的未来

简介: 如果你对云原生领域不太关注,可能对 KubeVela 还没有做过太深入的了解。别着急,本文就借着 v1.0 发布之际,为你详细的梳理一次 KubeVela 项目的发展脉络,解读它的核心思想和愿景,领悟这个正冉冉升起的…

android-x86 镜像iso下载_2019年微软MSDN原版镜像系统下载地址 Win10/7原版系统iso镜像文件...

如今,不少用户开始讨厌以GHOST形式来安装操作系统,虽然步骤十分简单,但是从网上下载的GHOST系统,已经形成了一个黑色产业链,为了盈利,捆绑了软件全家桶、恶意强制主页,甚至捆绑木马,…

大流量场景下如何云淡风轻地进行线上发布?

简介: 本文介绍了微服务治理下金丝雀发布的能力,解决了发布期间少量流量验证新功能的问题。 前言 本文,我们继续聊聊《揭秘大流量场景下发布如丝般顺滑背后的原因》中的另外一环,灰度发布,也叫金丝雀发布。 ​ 很多互…

匿名提问:rm -rf了怎么办?

整理 | 易璜珵出品 | 《新程序员》IT界流传着一个神秘的代码,老程序员听了总是意味深长地一笑,而新手程序员则总是手痒地想试试,那就是删库指令rm -rf。这一行代码下去,海量数据可能就荡然无存。近几年发生的“删库跑路”事件让这…

ubuntu matlab_有没有人和我一起整理Python的matlab代替

想找人一起整理Python中matlab代替的包,最好是能够将常用功能用tkinter封装起来,积少成多,逐步逼近完整。比如将scipy中的最小二乘法拟合功能,找个图形界面封装一下,就变成了曲线拟合工具,可以代替matlab的…

逸仙电商Seata企业级落地实践

简介: 本文将会以逸仙电商的业务作为背景, 先介绍一下seata的原理, 并给大家进行线上演示, 由浅入深去介绍这款中间件, 以便读者更加容易去理解 Seata 这个中间件。 作者 | 张嘉伟(GitHub ID:l…

“类云”的存储服务什么样?Pure Storage发布Pure Fusion等系列新品

一键部署自动化存储平台与云原生数据库即服务,无缝连接基础设施运营与应用程序。 编辑 | 宋慧 出品 | CSDN 云计算 近日,专为多云环境提供存储即服务的Pure Storage发布一系列现代化基础设施、运营及应用程序,这是Pure Storage迈向创新现代…

mac mongodb可视化工具_MongoDB从立地到成佛(介绍、安装、增删改查)

文章作者公众号bigsai,已收录在回车课堂,如有帮助还请不吝啬点个赞赞支持一下!课程导学大家好我是bigsai,我们都学过数据库,但你可能更熟悉关系(型)数据库例如MySQL,SQL SERVER,ORACLE等,对于非…

阿里巴巴云原生 etcd 服务集群管控优化实践

简介: 这些年,阿里云原生 etcd 服务发生了翻天覆地的变化,这篇文章主要分享一下 etcd 服务在面对业务量大规模增长下遇到的问题以及我们是如何解决的,希望对读者了解 etcd 的使用和管控运维提供经验分享。 作者 | 陈星宇&#xff…

计算机组装与维护思考问题,计算机组装与维护中的常见问题及解决方法

郜庆国摘要:在如今的社会下,各个领域的很多行业在工作的时候都需要用到计算机来帮助工作的进行,因为计算机在很多情况下都能够很好地进行计算与帮助,所以我们在进行工作时,不仅提高了工作的效率,还解决了很…

淘票票首次公开小程序开发秘籍,踩过坑才知道怎么走!

简介: 在2019年,阿里巴巴文娱的淘票票几乎涉足了当时市面上所有的小程序。在不少平台上,淘票票是阿里“第一批吃螃蟹”的技术团队。回顾过往,阿里文娱做过很多尝试,也踩过很多坑。《小程序 大世界》总结了淘票票过去 2…

stm32f407 6个串口dma_stm32之DMA

一. 对于大容量的STM32芯片有2个DMA控制器,控制器1有7个通道,控制器2有5个通道每个通道都可以配置一些外设的地址。二. 通道的配置过程:1. 首先设置CPARx寄存器和CMARx寄存器。通过DMA控制器把一个地址的值复制到另外一个地址,通过…

立足当下,塑造未来

今天,以“5G与世界同行”为主题的2021全球移动宽带论坛(Global MBB Forum)在迪拜举行。期间,华为轮值董事长胡厚崑发表了题为“立足当下,塑造未来”的主题演讲。胡厚崑指出:“5G预商用五年以来,…