关于数据库:实时数仓构建新思路NineData数据复制技术详解

42次阅读

共计 8376 个字符,预计需要花费 21 分钟才能阅读完成。

8 月 30 日,由 NineData 和 SelectDB 独特举办的主题为“实时数据驱动,引领企业智能化数据管理”的线上联结发布会,圆满成功举办!单方聚焦于实时数据仓库技术和数据开发能力,展现如何通过弱小的生态开发兼容性,对接丰盛的大数据生态产品,助力企业疾速发展数据分析业务,独特摸索实时数据驱动的将来企业智能化数据管理解决方案。

本文依据玖章算术技术副总裁陈长城(天羽)在 NineData X SelectDB 联结发布会的主题演讲内容整顿。

<p align=center> 陈长城(天羽)玖章算术技术副总裁 </p>

▶︎ 嘉宾简介

陈长城,曾任阿里云数据库中台负责人和阿里云数据库生态工具部总经理,前阿里云资深技术专家。率领阿里云数据库基础设施实现三次架构改革,从去 IOE 到分布式、异地多活、容器化和存储计算拆散,是历年双 11 大促的数据库外围负责人和容量、架构规划者。主导云原生工具体系架构降级并打造一站式治理能力。发表过多篇技术专利和 VLDB、ICDE 数据库顶会论文。

01 NineData 产品介绍

在数据和云的时代企业数字化面临诸多挑战,从 Gartner 和 Percona 的报告中,咱们晓得 80% 以上的企业会抉择多云或混合云,而超过 70% 的企业会抉择应用多种数据库来满足业务需要。在行业的剖析报告中,咱们发现,如果企业可能无效应用多源基础架构和新的数据架构,它们的创新能力和整体盈利能力将会显著晋升。然而,在数据和云的时代下,企业数据管理的挑战更多,例如数据孤岛、多源异构数据管理复杂度以及开发效率等,都是急需解决的。

基于上述普遍存在的问题和挑战,玖章算术建设了 NineData 云原生智能数据管理平台。最底层 IaaS 接口层对立对接各场景的各种数据源,基于此建设 NineData 数据备份、数据复制、数据比照和 SQL 开发四大外围功能模块,与企业的数据库、搜寻、音讯队列、数仓等数字零碎严密联动,帮忙企业爱护数据资产,基于多云和混合云灵便构建基础设施,对立平安治理,晋升数据库开发效率。

这里开展介绍一下 SQL 开发,它是一种让企业内外部所有开发者都遵循对立数据拜访标准并晋升效率的最佳实际产品化,以后企业面对多云和多种数据源,尽管各种数据源有各自的 CLI 或图形管理工具,但存在这些问题:

  1. 权限扩散、审计欠缺,平安管控难度大;
  2. 各个工具建设水平不一,体验个别,开发效率低;
  3. 无奈造成对立标准,数据库生产稳定性不足保障;
  4. 多环境、多种数据源无奈对立治理。

针对这些问题,NineData 设计了企业级数据库安全治理能力,通过对立数据源对接各云厂商和自建的各种数据源,设计工作流和审批流、平安规定配置、权限治理与操作审计、SSO 反对等根底组件,将企业的数据(实例、库、表)+  账号角色 + 操作类型 通过规定引擎对立治理,并内置数据库 SQL 开发的稳定性和平安最佳实际,提供数据库拜访权限治理、变更治理、敏感数据治理、数据导入导出等性能。NineData 提供简略 GUI 的个人版和高效协同的企业版两种服务形式,并联合大模型 AIGC 的能力,在天然语音查问数据、表结构设计改写、SQL 优化倡议方面晋升开发者效率。

企业在数据复制场景下也面临着多数据源、多云数据买通、跨地区长周期复制,以及由此带来的同能和稳定性方面的问题。NineData 数据复制致力于提供数据流动的基础设施。打消不同数据库类型、不同厂商、不同环境下的造成的数据流动难点,帮忙企业最大地施展数据价值。目前 NineData 以及反对 13 种数据源的单双向链路,强劲的复制性能和欠缺的数据比照性能,具体将在前面开展。

02 数据复制技术架构

先介绍下 NineData 整体架构,基于多云和多源能力,咱们构建了数据备份、数据复制、数据比照和 SQL 开发能力。

2.1 多云角度

从多云角度,为了帮忙企业对立治理扩散在多云或混合云的各种数据源,咱们设计了灵便的云原生架构、容器化弹性拉起、网络架构等。

▶︎  反对专属集群

反对多云的同时,咱们通过专属集群的技术,可能让企业独享自身的资源。包含咱们能够把企业的 worker 节点搁置在企业本地或 VPC 外部,实现数据的外部闭环,进步企业数据安全和 worker 执行效率。

▶︎  云原生的 SAAS 模式

NineData 作为一个云原生的 SAAS 产品,按需拉起、弹性伸缩是最根本的能力。

▶︎  网络安全

网络方面,基于平安思考,很多企业客户不心愿裸露数据库的公网端口,因而,咱们设计了一个数据库网关,通过这种设计,用户只需拉起一个 NineData 数据库网关,就可能连贯咱们的核心治理节点,从而建设反向拜访通道,可能把散落在各地、以及包含外部的数据源的对立治理。此外,咱们的 NineData worker 也能够放到用户本地,实现数据链路的外部闭环,而治理链路仍然能够通过核心控制台实现对立的链路管理。

2.2 多源方面

在多源方面,咱们次要设计了对立数据源接入层。为了接入泛滥数据源,咱们对数据源的连接池治理、属性配置、连贯检查和平安认证做了对立形象。这样能够将所有的数据源对立接入。咱们的四大次要功能模块都应用雷同的数据源接入层,实现一次接入所有性能都可用。对于用户来说,就实现了真正的对立治理。

在 NineData 的产品设计中,平安不是繁多的工作或性能,而是从头至尾灌输在产品设计、开发、运维的全过程中,咱们在数据传输加密、运维白屏、操作审计方面做了很多工作,同时 NineData 通过内部测试和三方审计多方位爱护数据安全。

一个典型的 NineData 数据复制链路拓扑,当您配置完源和指标之后,NineData 就会让整个链路开始运行。一开始会有一个预查看,查看您的网络连接、账号密码等是否正确。接下来会进行构造复制,抓取和写入全量数据和增量数据。

从产品层面,咱们要反对多云多源,除了下面介绍的弹性架构和网络架构外,咱们在复制模块的多种数据类型兼容和扩展性做了重要的设计,同时多源异构长期运行必然存在少部分不兼容场景,咱们在可观测和可干涉方面也重点做了功能设计。数据传输内核模块的底线是保障数据统一,同时在吞吐和延时上具备当先的劣势,因而咱们在这方面做了很多工作。前面外围个性的分享将围绕这几个点进行开展。

03 数据复制的外围个性

3.1 吞吐能力

以全量性能为例,次要有几个重要的优化项:

▶︎  大表迁徙性能

大表迁徙性能是最常见的瓶颈,假如咱们在源端有一些数据须要解决,其中有许多表,而且它们的数据量都不同。如果咱们同时启动三个并发线程进行解决,那么可能会呈现一些数据量小的表曾经解决完了,然而一些数据量较大的表依然在期待单个线程进行解决的状况。如果表级并发,就会相似的问题。因而,为了进步整个效率,咱们必须加强表内的并发能力。具体来说,咱们须要思考表的切片是否平均。为此,咱们制订了一项策略,即默认组件反对一键拆分,顺次通过主键、非空惟一键、可空惟一键、一般键等这种程序反对拆分,以尽力最平衡的形式实现并发解决。

并发写入还连带着一个空间问题,在应用过程中,在源端如果您将 100G 的数据写入,在指标端它可能会变成 150G。这是因为如果单个表乱序提交的话,就可能会产生一些数据空洞。为此,NineData 在切片大小和并发程序方面进行了优化以管制写入放大。

▶︎  指标库写入

要以对指标库损耗起码的办法写入,能力取得最大性能。解决通道性能,并且它能够线性扩大之后,吞吐量的瓶颈就不在通道上,而在指标库的写入上。因而指标库的写入姿态就十分重要。如果每条 SQL 都须要在指标端进行解析,那么性能必定会差。因而,咱们须要采纳一些批量提交的形式。同时在解决压缩开关时,须要留神 CPU 的数量。在 CPU 数量较少的状况下,启用压缩会对性能产生较大的影响。

▶︎  内存优化

内存优化能够晋升吞吐性能。因为整个全量复制的特点是批量加载到内容而且疾速写入指标库,而后这个数据就被淘汰了。所以整个 JVM 的参数上做一些针对性的配置优化,从而升高内存和 CPU 开销,晋升通道性能。

3.2 低延时

那么 NineData 如何构建低延时呢?咱们从多个维度思考低延时个性。

▶︎  通道性能

在通道性能角度,包含一些如 Batch、热点数据的合并等。其中热点数据的合并,如果一条记录从 A1 改到 A2,再改到 A3,个别同步模型是全轨迹批改,但开启热点能力后,它可能间接合并成终态的 A3 插入语句,不会插入 A1 或 update A2,通过这种能力间接以终态的数据写入,在内存中把这个队列间接合并掉。在通道性能层面,还有一些其余设计。例如在 redis 的复制链路中,缩小队列的序列化代价,从而让整个队列的耗费降到最低。

▶︎  通道管理层设计

通道管理层面对低提早的整体零碎设计也十分重要,这是在咱们多年的实际中得出的教训。要可能以最小的代价面对同步链路中的各种异样。

(a) 升高异常情况下重拉的可能。数据库呈现提早,然而数据服务端的日志曾经被革除;作为咱们云原生的产品,咱们会怎么做呢?咱们会获取源端数据库的接口,查看是否存在被上传到 OSS 或者其余对象存储的日志。如果有,咱们会主动获取并接续上之前的记录,从而防止从新进行全量拉取,缩小延时。

 (b) 尽量少地回退数据。咱们设计了表级别的平安位点。每张表都会有一个本人最新的位点。如果在回放过程中,这张表的位点已经被应用过,咱们会将其摈弃,以防止位点回退。

(c) 洁净地运维。针对日常的运维操作,NineData 复制线程会使队列中的所有数据都提交实现,使得 16 个线程达到一个统一的位点,而后再敞开过程。通过这种能力,咱们实现了一个洁净的 cleandown,用户重新启动后就不会遇到须要回放数据,这是十分优雅的形式之一。

3.3 一致性数据同步

数据一致性重要性毋庸置疑,这里从数据一致性和 DDL 构造一致性两方面各重点介绍一个 NineData 的设计个性,同时 NineData 实现了欠缺的数据比照性能。

▶︎  数据一致性

数据自身的一致性问题,如何保障事务一致性。举个例子,假如咱们有 T1 到 T5 这五个事务,其中 B1 是订单状态,从 B1 创立订单,到 B3 可能是用户付款,这时会产生一个物流订单 L。如果咱们采纳失常的行级同步形式,订单和物流订单会别离存储在不同的表中,因为行级的并发性,无奈保障它们的程序性。因而,B1 和 L 可能同时呈现在指标库中,也就是说在创立订单时,物流订单也曾经被创立了。对于在线业务来说,这必定是违反业务逻辑,无奈反对在线业务的失常运行。

因而,咱们构建了一个事务一致性能力,用户能够开启事务能力。当用户开启事务能力时,咱们会查看 T3 这个事务中的每条记录与之前所有事务是否存在依赖关系。如果存在,T3 将期待其余事务都提交结束后再提交,确保数据的一致性。因而,第一次提交只会提交 T1 到 T4,T3 会期待 T2 提交结束后再提交。这是一种保证数据一致性的同步机制。

▶︎  DDL 变更同步的一致性

DDL 变更同步的一致性问题,具体来说,以表构造为例,如果咱们遇到了表构造的变更,个别的解决办法是查看源端的表构造。然而,因为数据日志中大部分只有数据和表名,短少构造和类型等信息,因而咱们须要回查数据源来获取构造信息,并拼接出最终的后果。然而,很可能在回查时源端曾经产生了第二次 DDL,导致咱们获取到的是曾经又被批改过的 DDL,从而拼接出的数据不统一和呈现谬误。

因而,咱们开发了一种 DDL 解析能力,即在 DDL 解析实现后,间接在同步线程解析线程中进行重放。同时,咱们记录每个变更的版本,重放的同时生成新版本,旧版本不删除。这样,任何表在任何时刻都能够随时查到其 Meta 构造,而不须要像其余业界实际一样,须要从头开始从新回放一遍。

▶︎  数据比照

在数据比照方面,NineData 将其作为一个重要的产品能力进行建设,咱们认为数据比照对整个数据品质的影响十分重要。因而,在构造比照、数据比照以及勘误 SQL 生成等方面,咱们在性能上做得十分全面。其次,咱们会思考数据比照对用户的源库和指标库带来的负载。这些负载对于许多生产人员来说十分重要。因而,咱们制订了许多策略,例如:仅对不统一的数据进行复检,能够管制并发和限流,设置抽样比例和条件过滤,仅对某一范畴内的数据进行比拟等等。同时,在性能方面,咱们也做有特色的优化。惯例的数据比照会拉出源和指标的所有数据,就会消耗大量计算资源和带宽,因而咱们做了比拟优雅的计算下推,只对不统一数据进行回表再一一字段比照。

3.4 可扩展性,减速实时数仓构建

在可扩展性方面,如何在 NineData 外面反对疾速地新增数据源?意味着咱们须要疾速反对构造和数据类型的转换,以及疾速将通道产品化,这些都是咱们的目前重要的思考因素。咱们的整个设计思路就心愿说,把原来的各种源到指标的这种 N 乘 M 的这种拓扑办法,可能通过 N 加 M 的这种形式来实现。

咱们先讲一下数据类型,因为数据类型可能会对于最终一致性,大家会更加的在意,业界无论是在 FiveTran、Airbvte、NIFI、NineData 等方面的开源我的项目或者还是商用我的项目中,都定义了很多两头类型。明天,NineData 也是定义了一些两头类型,因为两头类型形象得越好,它的品种就越少,这意味着新增的数据源咱们须要开发 convert 的工作量就越少。因而,如何更好地形象到更少的样本集里,是整体更好的形象办法。

第二个抓取和写入模块的插件化,最大水平复用代码,晋升产品化效率和稳定性。咱们提供了一个叫做关系数据提交框架。该框架把 DDL/DML 的库、表、主键级别抵触期待,事务抵触期待,热点合并和攒批优化 SQL 都形象进去,使得前面接入的数据源能够人造地具备这些能力。

以后 NineData 曾经广泛支持了 MySQL、PostgreSQL、SQLServer、Redis、MongoDB、Kafka、ElasticSearch、SelectDB(Doris) 等数据库,并在其系列上对接了支流的各云厂商产品。这里重点介绍下 SelectDB 和 ClickHouse 咱们的个性设计。

▶︎  构造复制

NineData 反对了 MySQL 所有 DDL 主动同步到 SelectDB,包含 Distribute Key 的自适应和 SQL 改写,跨库的 create table like SQL 改写等。

▶︎  数据复制

咱们定义了 NineData 两头类型到 SelectDB 数据类型的一一映射,实现数据类型以及字符集映射,同时对于工夫类型,反对依据服务端 Global TimeZone 进行跨时区数据迁徙。

▶︎  数据处理

反对在复制过程中筛选同步对象,同时进行操作类型过滤(如只复制 Insert 不复制 Delete)、基于数据计算进行过滤、数据类型转换。

▶︎  性能优化

除了复制框架反对的写入合并外,NineData 数据复制反对以 Stream 模式进行全量或增量写入,在 MySQL->SelectDB(Doris) 的测试中,云上同 Region 测试 30 个并发能够达到 209MB/S,88W RPS(单行均匀 250B 左右)。

NineData 在 ClickHouse 的反对上也做了粗疏的设计,构造映射方面反对用户抉择 CollapsingMergeTree 或 ReplacingMergeTree 进行复制,反对了 ClickHouse 各数据类型的映射,包含默认值差别的解决。在性能方面,相似于 Airbyte 的做法会将所有增量数据合成一个文件,因为 ClickHouse 引擎中的许多增删改都是变成间接减少,因而这种形式绝对简略。但这种形式会带来较大的提早。因而,在实现过程中,咱们思考应用 SQL 的形式进行提交,来了多少条就立刻转集批提交,能够动静地管制,例如超过 1000 条或 0.5 秒,能够几百毫秒就提交。此外,ClickHouse 的 Jdbc 在解析每条语句时性能较差,因而咱们进行了一些优化,采纳批量提交的形式来进步性能。

3.5 高可用机制

▶︎  节点容灾

NineData 所有组件采纳高可用架构,躲避单点危险。工作节点跑在分布式容器集群上,容灾零碎自动检测异样工作、异样节点并主动实现工作跨机漂移容灾。

▶︎  工作鲁棒性

通过动态内存治理,联合动静分片、动静攒批、流式读写、弹性扩缩容等技术,晋升链路对负载的自适应能力,无效保障工作稳定性。

▶︎  断点续传:

所有模块反对定期位点记录,包含构造复制、全量复制、增量复制、数据比照;任意工作或服务节点异样,会基于断点重启工作。通过欠缺的重试、干涉伎俩,晋升劣网、数据高负载、硬件异样等场景下,链路的健壮性。

3.6 可观测可干涉能力

▶︎  可观测性

(1)复制零碎针对每个链路有有秒级日志打点,能够查看秒级 RPS,累计 DDL/DML 操作数,队列沉积数等指标,查看工作各模块状态。

(2)实时查看提交线程状态。例如,如果有 16 个线程正在运行,咱们会显示这 16 个线程别离在执行哪条 SQL,或者工作是否被 DDL 卡住等信息。能够通过相似于 MySQL Processlist 的形式查看每个线程正在执行哪些操作,曾经执行了多长时间等信息。在同步过程中,用户可能会在指标端、新的写入等可能会遇到一些问题,导致这个两边写数据抵触等。因而,咱们在可观测性方面不仅会将根本状态齐全走漏给用户,还会提供每个线程提交的语句。

▶︎  可干涉能力

(1)批改同步对象,对于长期复制工作,用户可能因为业务变动,须要增加新的对象到同步链路中,能够在界面上间接增加,后盾会创立新对象的构造初始化、全量和增量,并在追上后合并同步对象到现有链路中。

(2)成熟的异样解决能力。对于异样工作,NineData 会显示具体的报错信息,用户能够进行 SQL 级别的语句勘误和重试,或者跳过,从而在大量指标双写或构造不统一状况下,仍然能够疾速修复工作,保障指标数据的及时性和正确性。

3.6 能力数据复制小结

NineData 数据复制的设计指标是 Any Where、Any Data、AnyTime 的服务客户的数据流动场景。以后支流数据源以及比拟残缺,兼容适配了各种简单的网络环境,深度适配 VPN、专线、堡垒机、云厂商 VPC 和私网拜访等计划,能够通过 SaaS 服务或专属集群形式服务客户,保障数据安全和复制稳定性。

04 典型用户案例

4.1 国资云客户

某大型国资云数据复制,客户全国有 30+Region,自身有很多数据须要同步,同时还要提供数据复制产品给他的客户应用,比方该云的客户从其余云厂商或自建零碎中迁徙上云。包含很多简单的利用场景,如迁徙上云、跨云迁徙、跨区域迁徙、数据容灾、异地多活等业务场景。也面临非常复杂的网络环境,Region 外部 /Region 之间,和其余云厂商与客户自有零碎之间等各种链路。客户在考查了市面上支流云厂商、数据复制专门厂商的计划后抉择了 NineData。

4.2 跨境电商企业

某跨境电商企业通过 NineData 实现实时数仓,领导经营剖析决策。客户的剖析和经营流动基于 ClickHouse。MySQL 生产是扩散在世界各地,比方日本、韩国等,他将各个中央的在线数据汇聚到国内的 ClickHouse 进行对立剖析和经营决策。在这个过程中,他应用了咱们的 NineData 复制产品,NineData 在跨地区的复制方面是具备一些劣势。咱们的解析模块、读取模块和写入模块能够异地部署,解析模块可能凑近用户的源端,写入端可能凑近用户的目标端,从而实现了整个性能的更加优化。

4.3 大型地产企业

某大型地产企业应用 NineData 实现对立数据管理。该企业领有大量的数据库,但其开发流程波及许多合作伙伴,例如 ISV 或第三方软件开发提供商。因而,他们须要将数据源的权限管制委托给这些合作伙伴。在以往的人工治理过程中,权限治理变得非常复杂且流程繁琐,难以对立治理。为此,NineData 提供了一个对立治理数据源的解决方案。通过该计划,对立纳管了企业的所有数据源,开发人员的账户初始化、权限申请以及数据开发流程的可视化等均失去了优化,从而大大晋升了开发效率和协同效率。

最初,NineData 曾经和数据源、云厂商产生了很多亲密的单干关系,并且获得云服务、信息安全治理、品质治理等多项认证,在多个行业的头部企业中广泛应用。NineData 致力于为客户提供更加稳固、更智能的数据库服务,帮忙客户疾速构建对立的数据管理,让每个人用好数据和云,欢送大家体验应用。

NineData 是新一代的云原生智能数据管理平台,蕴含了数据复制、SQL 开发、数据备份以及数据比照等多种性能。NineData 采纳当先的云原生与 AIGC 技术,为云与 AI 时代的架构设计提供了智能数据管理平台。作为业界首个反对跨云和本地 IDC 无缝买通的平台,可能帮忙客户轻松实现数据上云、跨云数据实时传输、ETL、数据备份、企业级智能 SQL 开发、数据库研发标准、生产变更以及敏感数据治理等性能,从而让客户的数据应用更加平安高效。

正文完
 0