构建高效数据流转的 ETL 系统:数据库 + Serverless 函数计算的最佳实践

news/2024/5/20 10:03:29 标签: etl, 数据库, serverless

作者:柳下

概述

随着企业规模和数据量的增长,数据的价值越来越受到重视。数据的变化和更新变得更加频繁和复杂,因此及时捕获和处理这些变化变得至关重要。为了满足这一需求,数据库 CDC(Change Data Capture)技术应运而生。然而,从 ETL 架构的角度来看,CDC 仅满足了数据的提取(Extract)能力。

为了实现完整的 ETL 架构,并完成高效、实时的数据集成、处理和同步,阿里云 Serverless 函数计算(FC)与数据库 CDC 技术深度融合。助力企业构建完整的 ETL 架构,实现数据的提取、转换和加载。通过将 CDC 作为事件驱动的数据源,将数据变化作为事件触发 Serverless 函数的执行,可以实现实时的数据处理和同步,有助于提升业务决策和分析的准确性和效率。

架构介绍

下面将从 ETL 模型入手,逐步讲述 FC + CDC 如何适配符合 ETL 模型的业务。

ETL 模型

在大数据领域,承载数据流转、加工业务的系统架构都可抽象为 ETL 模型,它由三个主要步骤组成:提取(Extract)、转换(Transform)和加载(Load)。

  1. 提取:从数据源中提取数据。数据源可以是各种数据存储系统。如:数据库、文件系统、消息队列、API接口等。
  2. 转换:数据经过一系列的转换操作转换为目标系统可以接受的格式和结构。如:数据清洗、数据合并、数据富化等。
  3. 加载:将转换后的数据加载到目标服务中。目标服务可以是数据仓库、数据湖、BI 系统等。

此架构应用广泛,帮助企业管理和利用数据,实现数据驱动的决策和业务转型。

图片

CDC + ETL

CDC 和 Extract(E) 是数据处理的两个概念,前者目的是捕获数据库中的变化数据,后者目的是从数据源中提取特定的数据集合。但回归业务本身,两者均是从数据源获取业务所需的数据,因此 CDC 和 ETL 的结合也是必然结果。两者的结合可构建更完整高效的数据处理流程,实现实时增量数据抽取和处理。相比传统的定期批量抽取方式,CDC 可更及时地捕获数据变化,使目标系统中的数据更加实时和准确。

图片

阿里云 DTS + FC

在阿里云数据库产品体系中,数据传输服务 DTS(Data Transmission Service)扮演了 CDC 的角色,作为实时数据流传输服务,它能够捕获上游数据库的变更信息,并将这些变更推送给下游服务。当下游服务是函数计算时,可以利用函数计算的自定义代码能力,对数据进行自定义加工(T)和投递(L)。如下图所示,FC 和 DTS 的深度集成构建了完整的 ETL 体系,为业务系统的快速搭建提供了帮助。

图片

功能详解

针对上文提到的 DTS + FC 架构,下面将剖析内部细节,深入理解系统的运行方式。

DTS 架构

DTS 在数据采集和数据传输上提供了完备的能力,DTS 系统可抽象为如下三大模块:

  1. Poller:从上游丰富的数据库服务获取数据,具体如下:
    • 传输数据类型: 可传输存量数据或增量数据;
    • 数据获取方式: 针对存量数据,DTS Poller 以并发查询方式扫描全表,将扫描结果投递至下游;针对增量数据,DTS Poller 监听并读取上游数据库的增量日志文件,解析文件中的日志信息并投递至下游;
    • 增量数据源: 针对不同的上游数据库,DTS 会读取不同的增量日志文件。例如:当数据库为 MySQL 时读取 Binlog 文件,当数据库为 MongoDB 时读取 Oplog 文件。
  1. Format Plugin:将获取的数据统一格式化为 Canal Json 格式,格式的统一标准化便于数据解析逻辑复用于不同的数据源;
  2. Sinker:将格式化后的数据推送给下游 FC。

图片

FC 架构

FC 和 DTS 的深度集成保证了 FC 可以接收 DTS 采集的数据库数据,并根据用户自定义代码实现数据加工和数据投递功能,具体如下:

  1. 请求路由: FC 网关将 DTS 发送的事件路由到 FC 后端;
  2. 调度处理: FC 调度层自动扩容计算节点运行用户代码,处理上游传递的 DTS 事件;
  3. 代码执行: 用户的代码按预期运行,通常逻辑为加工处理 event 事件,并将处理后的结果以 SDK/API 等方式发送给外部服务。

图片

从上图可以看到,您仅需关注数据加工和投递的业务逻辑,并通过简单代码片段完成实现,FC 后端会自动伸缩计算节点执行代码,您无需关注系统的基础设施建设、资源运维、伸缩、监控、报警等一系列繁琐工作,极大提升开发效率。同时 FC 作为 Serverless 应用,支持按量付费,避免长期预留机器资源带来的资源低效问题。

应用场景

OLTP 到 OLAP 的数据传输

什么是 OLTP 和 OLAP?

  • OLTP: 指在线事务处理。通过以事务单位进行操作,并需要支持高并发写入和数据一致性。常见的服务如:关系型数据库( MySQL、PostgreSQL 等)、订单处理系统、客户关系管理系统等。
  • OLAP: 指在线分析处理。通常用于从大量的数据中提取、聚合和分析信息,满足数据分析和决策支持。OLAP 系统通常以查询为基础,可以进行复杂的数据查询和分析操作。常见的服务如:AnalyticDB、ClickHouse、Power BI 等。

从上面描述看,OLTP 和 OLAP 是两种不同的数据处理服务,用于满足不同的业务需求。OLTP 系统适用于处理实时的交易和业务操作,而 OLAP 系统适用于从大量数据中进行分析和决策支持。在实际应用中,OLAP 的数据来源就是不同的 OLTP 数据库,所以 OLAP 本身不产生数据,通过 ETL 从 OLTP 抽取数据到 OLAP 数据库即数据仓库中做整合清洗达到可分析的数据标准。而 DTS + FC 恰好可以连接两类服务,打通数据通路。

图片

CDC 事件驱动模型

什么是事件和事件驱动?

  • 事件: 在业务系统中,事件是指系统或业务中发生的重要、有意义的事情或状态变化。事件可以是内部触发的,也可以是外部输入的,通常与业务流程、数据更改、用户操作等相关。
  • 事件驱动: 事件驱动架构是一种系统设计范式,其中事件是系统中的核心组成部分。在这种架构中,系统的各个组件通过订阅和响应事件来进行通信协作,实现松耦合、可扩展的系统架构。

CDC 因用于捕获数据库中的数据变化,常被当做事件驱动后续流程的执行,常见的场景如下:

  • 订阅和发布系统:CDC 可作为订阅和发布系统的一部分,将数据库中的数据变化作为事件发布给相关的订阅者。这可以用于实现发布-订阅模式的事件驱动系统架构。
  • 数据校验:CDC 可将数据库中变化的数据推送给 FC。做定制化数据校验,校验数据的合理合规,这在金融、财务订单等系统非常重要。
  • 数据审计:CDC 可将数据库中变化的数据推送给 FC,经由 FC 持久化至任意三方服务,用于数据审计和数据可追溯需求。
  • 变更通知:当特定关键数据变动后,以任意方式发送特定通知,如:邮箱、钉钉、短信、电话等。

图片

总结&展望

CDC 和 Serverless 函数计算的结合,可以实现实时的数据处理和响应,同时减少对基础设施的依赖和管理。 在实际应用中,可将 CDC 作为事件驱动的数据源,将数据变化作为事件触发 Serverless 函数的执行。这样可以实现实时的数据处理和分发,同时利用 Serverless 函数计算的弹性扩展能力,根据实际负载动态分配计算资源。总而言之,DTS 和 Serverless 函数计算的集成为企业提供了更高效、灵活和可靠的数据处理解决方案。未来函数计算将探索更多的数据源(Oracle、PolarDB PostgreSQL、PolarDB MySQL 等),满足更多的业务需求。更多信息或需求请钉钉与我们联系,官方钉钉群号:11721331。


http://www.niftyadmin.cn/n/5297656.html

相关文章

基于COT控制的降压型DC-DC转换器设计(四)

恒定导通时间控制模式 基于纹波的恒定导通时间控制模式(Ripple-Based Constant On-Time, RB-COT) 电压模控制与电流模控制反馈电压 都要经过误差放大器后再和参考电压进行比较,这就使得电压的变化要通过一个补偿网络才能够作用到功率管上&am…

MATLAB常用笔记记录(持续更新)

3.错误使用 reshape 元素数不能更改。请使用 [] 作为大小输入之一,以自动计算该维度的适当大小。 仔细检查之后发现原因是:两个栅格图层的行列数不一致。解决办法如下: 先改变栅格图层1源文件的投影坐标系,再进行掩膜提取&#x…

怎么解决 Nginx反向代理加载速度慢?

Nginx反向代理加载速度慢可能由多种原因引起,以下是一些可能的解决方法: 1,网络延迟: 检查目标服务器的网络状况,确保其网络连接正常。如果目标服务器位于不同的地理位置,可能会有较大的网络延迟。考虑使用…

深度学习核心技术与实践之计算机视觉篇

非书中全部内容,只是写了些自认为有收获的部分 计算机视觉背景 (1)视觉皮层的神经元是一列一列组织起来的,每一列神经元只喜欢某一种特定的形状或者某些简单的线条组合,而不是鱼、老鼠、鲜花 (2&#xf…

【UE5.1】制作会飞的气球,并吊起其它物体

目录 效果 步骤 一、制作气球 二、将气球附加在其它物体上来吊起物体 效果 步骤 一、制作气球 1. 新建一个工程,创建Basic关卡,添加一个第一人称游戏资源 2. 新建一个游戏模式基础、HUD和玩家控制器 在世界场景设置中设置游戏模式、默认Pawn、HUD…

B3610 [图论与代数结构 801] 无向图的块 题解

B3610 [图论与代数结构 801] 无向图的块 题解 2023 2023 2023,再见。 2024 2024 2024,你好! 解法 其实就是统计点双连通分量的个数。需要注意的是,孤立点在这里不被看作块。本文使用 tarjan 算法来解决这道题。 概念明晰 时间…

软件集成测试

软件集成测试是将各个独立的软件模块组合起来,并测试它们之间的接口和交互是否正常工作的过程。下面是软件集成测试的一般步骤: 确定测试策略:确定集成测试的目标、范围和测试策略。确定要测试的软件模块和它们之间的依赖关系。 设计测试用例…

docker的学习以及使用,利用docker开minecraft服务器

简介 Docker是一个开源的平台,用于开发、交付和运行应用程序。它使用容器技术,允许开发者将应用程序及其依赖项打包到一个轻量级、可移植的容器中。这个容器可以在任何支持Docker的环境中运行,而无需担心环境差异或依赖项冲突。 Docker 使用…