12月4日,东方国信CirroData-TimeS时序数据库负责人王超在“2022 Apache IoTDB物联网生态大会”上做了关于Apache IoTDB在东方国信商业化落地的精彩演讲,从开源技术、商业化产品落地、以及社会公益三个方面分享了他在CirroData-TimeS时序数据库技术开发和商业化产品设计过程中的思考与感悟。以下为报告全文。
大家好,我是来自东方国信的王超。下面由我来给大家分享一下Apache IoTDB 在东方国信的商业化及应用。我的分享内容主要有五个部分。第一部分,简单介绍一下我们公司;第二部分是介绍一下我们基于Apache IoTDB 打造的时序数据库 CirroData-TimeS;第三部分介绍一下我们在社区的一些工作;第四部分介绍一下我们使用时序库的一些案例;第五部分享一下我们对开源、商业、还有公益的一些理解。
下面我先来简单介绍一下我们公司。我们公司全称是北京东方国信科技股份有限公司,它是成立于 1997 年,并于 2011 年成功上市,目前有18个全资子公司,业务范围覆盖了全球 46 个国家和地区,当前在全国31个省,都有分支机构,有近万人的研发和服务团队。东方国信是一个大数据服务提供商,以“大数据+”布局了多个行业。它涉及到通信、工业、城市、金融、公共安全、旅游、媒体、医疗、农业和保险等十余个行业。
再来介绍一下我自己。目前我是在东方国信的分布式数据库事业部担任时序数据库负责人,目前也是 Apache IoTDB社区的 PMC 成员。
好,接下来我来介绍一下我们基于 Apache IoTDB 打造的商业化时序数据库 CirroData-TimeS。在介绍我们时序数据库之前,我先来分享一下我们为什么会使用Apache IoTDB。这个是因为经过一些调研,对比分析市面上的一些开源数据库,我们发现Apache IoTDB 相对于其他的开源时序数据库具有典型的三个特征,第一,开放; 第二,高性能;第三,功能丰富;能满足我们绝大部分的场景。
开放主要体现在两个方面第一,社区开放,第二,license 开放。社区开放主要体现在它的社区非常活跃,而且社区对新人或者是新的开发者都比较友好,代码框架灵活性比较高,扩展性强,生态比较繁荣,能对接很多大数据平台。 license 开放是因为Apache IoTDB采用的是Apache license 2.0 的软件许可,对于商业化来说是非常友好的。
高性能主要体现在两个方面,第一块是它读写高性能,第二块是它的压缩低成本。读写高性能主要是体现在数据写入单节点能达到 2000 万点每秒,查询的延迟是毫秒级别的,并且支持分布式的性能扩展。高压缩在压缩具有比较高的压缩比,高达10 比 1 的压缩比,支持多种无损和有损的压缩算法。
功能丰富体验在两方面,第一方面是它的高级功能比较丰富,第二块是查询功能比较丰富。高级功能丰富体验在它支持用户自定义函数、触发器、查询写回、连续查询、云边同步等多种功能,能支持多种业务场景。查询丰富体现在它包含多种查询方式,包括时间范围、分段分组聚合、对齐、补齐等等。
再来介绍一下我们基于Apache IoTDB 做的商业化的一些思考。为什么我们会打造自己的商业化版本,主要的还是因为有一些客户需求在推动。客户的需求主要有四点:
第一点是有的公司,它会有自己定制化的这种需求,并不是特别通用的。而数据库,它作为一个通用型的软件,一般会考虑比较通用一些的需求。因此这些公司可能它需要一些商业化的、定制的一些需求支持;
第二,不同的公司,它的节奏是不一样的。比如它的业务可能发展的比较快,社区的节奏可能跟不上他业务的发展,这个时候他的公司可能需要有一些快速开发的需求;
第三是有一些公司,它需要一整套的解决方案,而不只是一款数据库,因此需要商业化集成的一些知识;
第四个是有一些公司,它对系统的运行状态要求比较高,但它又不是系统的开发者,因此需要比较专业的运维服务支持的能力。
基于上面四类需求,我们决定打造商业化的版本。基于商业化的版本,我们做了 7 点增强,主要是体现在:
第一、安装部署。这方面做到可视化的一键安装部署,对于运维来说是非常友好的;
第二、用户操作方面比较友好。用户不需要熟悉 SQL 语句就能做数据的查询分析;
第三、监控。能够看到系统的运行状态,还有系统的数据情况;
第四、数据同步和迁移工具。主要是从一些旧的系统里面把数据迁移到新版的时序库里面来;
第五、一整套解决方案。我们联合我们公司内部的一些产品,达到一整套解决方案,用来满足用户的业务需求;
第六、运维服务。我们可以提供相对专业的运维服务,我们公司在全国 31 个省都有分支机构,可以提供比较全面的运维支持;
第七、做一些定制化的增强服务。
下面我来介绍一下我们基于以上几点思考做的一些功能增强:
第一块是可视化的集群管理工具,这个主要是用来做集群的管理,比如包括集群或者单机的一键安装部署,还有配置的可视化的调整、扩缩容、节点状态检测、升级回滚、版本源管理等等。
下面是一个可视化的数据操作平台SQL-Developer 为什么我们会做这个东西呢?主要是因为有一些用户跟我们提一些需求,他们不想学习我们这种 SQL 语法,只想做一些更简单的分析。数据库其实基本上还是面向于开发人员的,对于业务人员来说还是有一些门槛,他们需要了解一下SQL语法。因此我们为了降低业务人员对数据分析的门槛,需要提供一套友好的数据操作页面,不用了解 SQL 语法就能分析查看数据。因此我们打造了一款可视化数据操作平台。它主要是有以下几个功能,包括连接管理、存储组设备时序的一些管理、模板的管理、权限的管理、数据导入导出、数据的可视化、还有数据的查询分析。
这个是我们的一个监控平台,其实它还是在可视化的管理平台上面做的,这是可以看到一些集群的概况,还有源数据节点的一些管理监控,包括监控报警指标的一些管理。
下面是我们的一个可视化的数据迁移工具CDTS,它可以跟可视化集群管理平台联动,从管理平台导入集群的一些信息。数据迁移主要是一些旧的数据文件和系统数据导入到时序库里面,做一些数据备份的功能。数据迁移支持并发的访问,并发的迁移能达到比较好的一个速度。
这个是我们的一个工业互联网平台,它是一整套解决方案。这是连续 4 年上榜国家双跨工业互联网平台前五的工业产品,覆盖数据采集、数据传输、数据存储、数据计算、数据建模、数据可视化、运营管理等多个方面的功能,提供一整套工业数据采集、存储、价值挖掘解决方案。
还有最后一个定制化的增强服务。这方面我们主要做了三块,第一块是对接我们的 AP 引擎 CirroData-OLAP。这个是因为时序数据库,它主要是承载数据的接入,还有一些实时处理,但是做一些历史分析之类的,他可能能力稍微有点弱。因此有一些用户他需要把时序数据导入到数仓里面,加上一些运营的数据,做一些联合分析。开发了这个功能,把时序库的一些数据能定期的同步到数仓里面做联合分析。
第二块是支持实时压缩订阅。它面向的是这样一个场景:数据需要实时同步厂侧和中心侧,厂侧和中心侧是具有单向网关,数据只能从一端单向传到另外一端,并且带宽比较有限。这个时候我们就做了一个压缩实时订阅的功能。这个是在厂侧时序库接过来的数据之后,我们进行这种压缩,实时发送到网络代理侧。发送到中心侧的网络代理接收到数据之后,然后按按指定的协议解析数据包,再插入到中心侧的时序库里面。我们做完之后大概是压缩了 8 倍左右,相对于原始的这种数据,有效的降低了它的网络成本。
最后一块是我们做了一个跟硬件合作的硬件加速的功能开发,这个是与一个硬件厂商进行合作,适配他们的硬件加速卡来提升系统的性能。与不使用该加速卡的进行对比,会有 11% 左右的性能提升,并且会降低 4% 左右的 CPU 使用率,后续也会贡献到社区。
接下来我再来介绍一下我们的团队在社区的一些工作。我们从 2020 年参与社区到现在将近三年了,累计提交了 230 个PR,共计有十万多行的代码修改,主要覆盖5 个方面:高可用的版本、权限管理、多租户、集群运维工具、监控向还有其他的一些东西。我们深度参与的 0.12 高可用的版本。这个版本是基于 Raft 协议,根据副本复制方案,具有高可用特性,能保障线上环境更加稳定可靠。
我们主要参与的工作有副本一致性算法的一些优化,分布式源数据的一些管理,查询的重定向控制和数据流的分离。权限管理这块我们参与了 1.0 版本的权限管理,实际上是基于角色的权限模型,目前是支持本地文件和open ID 两种鉴权模式。权限数据默认情况下是存放在控制节点上面的,客户端访问数据节点之后,数据节点会有缓存,控制节点的权限数据在本地进行权限控制,尽量降低对控制节点的一些负载。
这是我们做了多租户的一个功能,这个功能是我们遇到了一个面向于集团的场景,他们会有多个厂,使用总部的一套环境,每个厂只给分配一定的资源,防止对其他厂的一些影响。我们主要实现了两大类资源的一些限制功能,包括空间的一些配合,还有吞吐的一些配合。空间配额主要是面向数据库租户的支持,对磁盘空间、时间序列个数、设备个数的限制;吞吐配额主要是面向于用户的,支持对读写多维度的限制,例如请求大小、请求次数,请求使用的 CPU 和内存资源等,面向的对象是用户,作用范围可以是单机的,也可以是集群的。目前还没有提交到社区,后面我们也会提交到社区。
这个是我们做的一个集群监控运维运维工具,是 1.0 版本上面提供的,主要是用来查看数据的分布信息,还有节点的状态,方便于运维人员,还开发人员排查问题的时候能查看到数据的,还有节点的一些状态。
这个是我们做的关于监控项相关的工作,1.0 版本它有一些监控项,我们做了一些监控项的添加,还有一些优化。在之前其实我们还参与过Apache IoTDB Go-SDK 的一些开发,还有旋转门开发等等其他的一些开发。
下面我来给大家简单的分享一下我们使用Apache IoTDB的一些案例。
第一个案例是一个新能源设备故障及预警大数据平台,它原来的痛点是数据量比较大,之前是基于 Hadoop 的平台,接入比较慢,存储成本比较高,原有的数据只有存储,没有提供价值。后面采用我们 Cloudiip工业互联网平台之后,它实现了大数据高并发的实时接入,因为主要还是时序类的数据,这个数据存入到时序库里面,能降低 90% 的存储成本,企业整体投资成本显著降低。而用户可以对采集到的数据进行快速的查询、计算、挖掘数据价值,为业务赋能。
这个是一个智慧热网云平台,它原来是直接采用 SCADA存储数据,并没有进行历史数据积累,不具备大数据的运算能力,难以实现对系统和能源的智能监控和管理。原来的系统功能比较有限,难以实现数据质量控制和监测。后面也是采用了 Cloudiip 工业互联网平台,能够对全部采集到的数据进行实时写入和存储,支持历史数据和实时数据的查询分析,数据上云之后解决了数据备份和数据安全的一些问题。
最后一个案例是智慧矿山大数据平台,原来主要是因为他们的煤矿里面开采的效率无法提升,维护安全的成本比较高。后面采用我们 cloudiip 工业互联网平台,带来了以下几个收益:第一是采集的矿井现有的数据,构建大数据可视化的中心,能实时对数据进行查看。第二块是对设备的实际数据进行营业分析,构建人效效能分析模型,提升煤矿的开采效率。还能实时的监控设备运营,将状况及时的预警,保证人员的安全。
最后分享一下我们对开源、商业和公益的一些理解。我们认为做开源其实是在做公益,因为做开源它具有两个好处:第一个就是它提供一个学习交流的平台,能让技术比较先进的一些地方,能把这种技术传播到技术稍微薄弱一些的地方;开源还能提供比较低成本的一些开源产品,让这种非信息化的一些行业,它能享受到信息化带来的一些好处,所以做开源是在做公益。但是做开源其实也是有一些技术价值的,比如它具有开放式协作的能力,用户和开发者能共同的推动产品的发展,产品迭代的速度比较快,成熟度更高。第二,灵活性比较强。任何人都可以定制化适合自己的场景的代码来修改,来满足自己的需求。商业也是因为基于开源的产品,总会衍生出一些定制化的需求,还有更高要求的服务。因此参与者可以对外提供这些软件服务来获得商业回报。商业也可以进行反哺开源的产品,让开源产品成熟度更高,能适用更广更深的场景,进而更广、更深的场景也能为商业的带来更多的商业回报。
以上就是我的一些分享,也欢迎大家关注我们的公众号,我们也会在公众号上面不定期的分享一些案例,还有一些新的功能供大家参考,谢谢!