数十年来,时间序列数据库(TSDB)的使用在各个行业中都很普遍,特别是在金融和工业控制系统中。然而,物联网 (IoT) 的出现导致时间序列数据(简称时序数据)量激增,对数据库的性能和存储成本提出了更高的要求,从而促进了对专用时序数据库的需求。
面对遗留时序解决方案的架构过时、扩展性有限等问题,新一代时序数据库应运而生,它们采用了现代架构,可实现分布式处理和水平扩展,以及云或本地的灵活部署。
2022 年底,又一重磅产品加入了开源时序数据库这一赛道,并在短短一年内在 60 余家企业测试和生产落地,吸引了 70 + 来自国内外重点高校和企业的贡献者 ——openGemini,华为开源的分布式时序数据库,主要聚焦于海量时序数据的存储和分析,通过技术创新,简化业务系统架构,降低海量时序数据的存储成本,提升时序数据的存储和分析效率。
今天,我们邀请到了 openGemini 社区负责人向宇,一起来聊聊,他们的开源故事~

01 源自内部需求,逐步走向自研

openGemini 的研发,最开始也是源于华为自身的需求。
2019 年,随着华为云的成立,广州、上海、北京、贵州和香港等地的数据中心纷纷拔地而起,并陆续上线了 260 + 云服务,平均每天采集的监控指标数据达数 TB,原有大数据解决方案逐渐不堪重负。数据量越大,查询效率越低,数据存储成本持续上升,急需一款高性能、高扩展性的专用时序数据库。
在当时,并没有什么好用的、能跟得上需求发展的时序数据库产品。InfluxDB 还是单机版,国内 Apache IoTDB 和 TDengine 还远不能达到生产要求。因此,华为决心做自己的数据库,优化数据处理工作,解决眼下十分要紧的业务问题。在这样的背景下,openGemini 应运而生。
据向宇介绍,在技术选型上,他们一开始在开源 InfluxDB 的基础上进行集群化改造。但随着指标数量的增加和采集频率的提高,日增数据量已达数十 TB。这时,InfluxDB 自身架构的缺陷开始凸显,影响到系统的性能和稳定性。于是,他们选择了对架构进行重构,开始了 openGemini 内核的自研之路。

02 个性独特,性能抢跑

openGemini 自诞生起就跟华为自家业务的需求联系紧密,所以每一个设计都充满了实用的考量。具体来说,openGemini 区别于别的时序数据库,主要有 9 大 “个性”:
性能优势:在 openGemini 差异化竞争力中,高性能是最重要的一项。在海量数据场景下,openGemini 相比开源 InfluxDB,简单查询场景提升 2 倍多,中等查询场景提升 5 倍多,复杂查询场景提升 10 倍以上。相比其他同类开源产品,openGemini 同样具有明显性能优势。
官方公布的单机写性能如下(测试工具为 TSBS,相关测试细节请参考 openGemini 官网文档):
官方公布的 DevOps 场景下单机查询性能对比(平均时延,ms):
官方公布的 IoT 场景下单机查询性能对比(平均时延,ms):
除此之外,openGemini 在数据存储和数据分析方面推出一系列实用功能,以此构建更多差异化竞争力:
独特的分布式架构:openGemini 提供了单机和分布式集群两种版本,其中分布式集群采用的是 MPP 大规模并行处理分层架构,将计算引擎,存储引擎和元数据管理划分为独立的组件,分别是 ts-sql、ts-store、ts-meta 。不同组件支持独立横向扩展,使得面对复杂的应用场景也能灵活应对。
高基数引擎:高基数问题(也称之为维度灾难)会带来倒排索引膨胀,从而引起内存资源消耗过高、读写性能降低的问题,长期以来一直困扰着时序数据库的发展。openGemini 高基数引擎通过构建时序专用的稀疏索引,进而彻底解决了这一难题,非常适合在网络监控、金融风控、物联网、交通等领域使用。
文本检索:文本数据是一种常见的数据类型,openGemini 支持在文本数据之上创建索引,采用动态的学习型分词方法,支持精确、短语和模糊匹配,且具有内存资源占用少,检索效率高的优点。
流式聚合:流式聚合是一种前置聚合方式,一边写数据、一边对数据进行降采样,其目的是解决传统降采样方法从磁盘读取大量历史数据进行计算,造成 I/O 放大严重的问题。
多级降采样:对于存量的历史数据,传统降采样方式会保留历史数据明细。在某些场景下,历史数据明细并不重要,只需保留数据特征即可,多级降采样功能可以实现对历史数据明细的特征提取,并原地替换历史数据明细,可进一步降低 50% 的存储成本。
异常检测和预测:异常检测和预测是目前时序数据分析最成熟的应用之一,被广泛应用于量化交易、网络安全检测和数据中心、工业设备和 IT 基础设施的日常维护等场景中。openGemini 提供了一个异常检测库 ——openGemini-castor,封装了常见的 13 种异常场景的检测算法,具有检测速度快、准确性高、流批一体的优点,帮助应用提高数据分析效率。
数据冷热分层存储:支持将历史数据转存到对象存储上,可实现低成本方式本永久保留历史数据,还能支持大数据离线分析。【该功能计划 H2 对外发布】
数据可靠性:支持多计算副本,进一步提升数据可靠性。【该功能计划 H2 对外发布】

03 注重使用体验,入门更方便

openGemini 不仅性能够强,它独特的设计,在实际的应用中,还能带来很多舒适的体验:
在入门方面,openGemini 与 InfluxDB v1.x 的生态完全兼容,接口、生态工具等直接通用,InfluxDB 用户可以无障碍迁移。同时,openGemini 采用了跟 InfluxDB 一样的 Line Protocol,数据建模简单,且容易理解,对关系型数据库的开发者也很友好。最后,openGemini 使用类 SQL 查询语言,无需额外学习,上手容易。集群部署上,社区还提供了一键部署工具 Gemix,省去了大量的配置工作。
在操作系统方面,openGemini 目前已支持主流 Linux 系统(含 openEuler)、Windows 和 MacOS,应用开发调试更加方便。处理器支持 X86 和 ARM64 两种架构。
在云原生方面,openGemini 提供了 Dockerfile 和 Docker 镜像,支持 Docker、K8s、KubeEdge 等平台的部署。由于容器重新拉起后,IP 地址随之变化,openGemini 新增域名功能,确保集群节点在容器重启后依然可以保持连通。社区还创建了 openGemini-operator 项目,方便用户一键式容器化部署。openGemini 支持普罗米修斯远程读写,可以作为普罗米修斯的一个后端存储,解决它存储能力不足的问题。【btw:openGemini 还将直接支持 PromQL,目前正在开发中】
在可观测性方面,社区开发了 ts-monitor 组件,专门采集节点和内核指标,分为 19 个子类,260 余项,可搭配 Grafana 实现对 openGemini 运行状态的全面监控。例如 CPU 和内存利用率、写入带宽、写时延、写并发、QPS 等指标可以通过可视化界面一目了然,方便随时查看运行状况、数据库性能调优和精准定位问题。

04 经过内部实战考验,回馈开源

openGemini 作为时序数据库,目前最常见的使用场景就是物联网和运维监控,在处理海量数据这方面,有着普通数据库无法比拟的优势。同时,openGemini 作为华为内部的项目,已经经过了 “自家人” 的考验:
华为云 SRE 使用 openGemini 作为监控数据存储底座,全网共部署 25 套集群,最大集群规模 70 个节点,成功经受住了每秒 4 千万条数据写入和 5 万次的并发查询的实战考验。相比原有解决方案,在承载相同业务的情况下,较原系统端到端时延降低 50%,CPU 资源上可以节省 68%,内存资源可以节省 50%,硬盘资源可以节省 90% 以上。
华为云的工业物联平台,之前一直用的 InfluxDB 的单机版,自从切换到 openGemini 上来后,再也不用被吞吐量困扰了,端到端和查询性能提升了 3 倍,设备接入量提升到了百万级。
向宇介绍,openGemini 源自开源,从 InfluxDB 开源项目中受益良多,因此秉承开源的精神,将 openGemini 的全部代码开源,希望全球更多的企业和开发者从中获益,也希望通过开放的社区平台,和广大开发者一起,共同推动技术创新,共享开源成果。
目前,openGemini 只有开源版和云服务,并不打算涉足线下商业版本,且有意愿向基金会捐献。当下,社区尚有诸多未完善之处,接下来,社区将会进一步丰富 openGemini 的生态工具(诸如数据迁移工具、SDK、大数据生态集成等)、可视化管理界面、以及文档等等。
“目前,社区的技术规划总体上会围绕物联网、运维监控和可观测性这三个重要应用场景,加强相关技术生态兼容和内核能力建设,我们正在着手论证 openGemini 下一代的软件架构。” 向宇说。
“短时间内,openGemini 不会考虑工业相关场景,因为工业领域的业务场景非常复杂,实时性要求极高,工业软件厂商的护城河很深,时序数据库能做的事情有限。此外,社区缺乏行业背景,对这方面的场景还不够了解。之后,我们会考虑寻找一些工业领域的伙伴,比方说工业软件供应商、解决方案提供商等,一起去合作、完善。” 向宇说。
openGemini 官网主页: 

https://www.openGemini.org/
openGemini 开源地址: 

https://github.com/openGemini
继续阅读
阅读原文