利用 AWS 的事件驱动数据网格架构应对现代数据挑战
扫描二维码
随时随地手机看文章
在当今数据驱动的世界中,企业必须适应数据管理、分析和利用方式的快速变化。传统的集中式系统和整体架构虽然在历史上已经足够,但已不再足以满足需要更快、实时访问数据洞察的组织不断增长的需求。该领域的一个革命性框架是事件驱动的数据网格架构,当与 AWS 服务相结合时,它成为解决复杂数据管理挑战的强大解决方案。
数据困境
许多组织在依赖过时的数据架构时面临着重大挑战。这些挑战包括:
集中式、整体式且与领域无关的数据湖
集中式数据湖是所有数据的单一存储位置,使其易于管理和访问,但如果扩展不当,可能会导致性能问题。单一数据湖将所有数据处理流程合并到一个集成系统中,这简化了设置,但可能难以扩展和维护。与领域无关的数据湖旨在存储来自任何行业或来源的数据,提供灵活性和广泛的适用性,但管理起来可能很复杂,并且针对特定用途的优化程度较低。
传统架构故障压力点
集中式数据架构
在传统的数据系统中,可能会出现几个问题。数据生产者可能会发送大量数据或有错误的数据,从而在下游产生问题。随着数据复杂性的增加以及系统来源的多样化,集中式数据平台可能难以处理不断增长的负载,从而导致崩溃和性能下降。对快速实验的需求增加可能会使系统不堪重负,从而难以快速适应和测试新想法。数据响应时间可能成为一个挑战,导致访问和使用数据的延迟,从而影响决策和整体效率。
运营数据环境和分析数据环境之间的差异
在软件架构中,孤立的所有权、不明确的数据使用、紧密耦合的数据管道和固有的限制等问题可能会导致严重的问题。当不同的团队孤立工作时,就会出现孤立的所有权,从而导致协调问题和效率低下。对如何使用或共享数据缺乏清晰的了解可能会导致重复工作和不一致的结果。耦合数据管道(组件之间过于依赖)使得系统难以适应或扩展,从而导致延迟。最后,系统的固有限制可能会减慢新功能和更新的交付速度,从而阻碍整体进展。解决这些压力点对于提高开发流程的效率和响应速度至关重要。
大数据的挑战
在线分析处理 (OLAP) 系统以一种使分析人员更容易探索数据不同方面的方式组织数据。为了回答查询,这些系统必须将操作数据转换为适合分析和处理大量数据的格式。传统数据仓库使用ETL(提取、转换、加载)流程来管理此过程。大数据技术,例如Apache Hadoop,通过解决扩展问题和开源改进了数据仓库,这使得任何公司只要能够管理基础设施就可以使用它。 Hadoop 引入了一种新方法,允许使用非结构化或半结构化数据,而不是预先强制执行严格的模式。这种灵活性可以在没有预定义模式的情况下写入数据,并在稍后的查询过程中进行结构化,使数据工程师可以更轻松地处理和集成数据。采用 Hadoop 通常意味着组建一个独立的数据团队:数据工程师负责数据提取,数据科学家负责清理和重组,数据分析师负责分析。由于数据团队和应用程序开发人员之间的沟通有限,这种设置有时会导致问题,通常是为了防止影响生产系统。
问题 1:数据模型边界问题
用于分析的数据与其原始结构密切相关,这对于复杂且频繁更新的模型来说可能会出现问题。数据模型的更改会影响所有用户,使他们容易受到这些更改的影响,尤其是当模型涉及许多表时。
问题 2:不良数据,忽视问题的代价
不良数据通常会被忽视,直到它导致架构出现问题,从而导致数据类型不正确等问题。由于验证通常会延迟到流程结束,因此不良数据可能会通过管道传播,从而导致昂贵的修复和不一致的解决方案。不良数据可能会导致重大业务损失,例如计费错误造成数百万美元的损失。研究表明,不良数据每年给企业造成数万亿美元的损失,浪费了知识工作者和数据科学家的大量时间。
问题3:缺乏单一所有权
应用程序开发人员是源数据模型方面的专家,通常不会将此信息传达给其他团队。他们的职责通常终止于应用程序和数据库边界。管理数据提取和移动的数据工程师通常是被动工作,并且对数据源的控制有限。数据分析师远离开发人员,他们收到的数据面临挑战,导致协调问题和需要单独的解决方案。
问题 4:自定义数据连接
在大型组织中,多个团队可能使用相同的数据,但创建自己的管理流程。这会产生多个数据副本,每个副本都独立管理,从而造成混乱。跟踪 ETL 作业并确保数据质量变得困难,从而导致由于同步问题和数据源安全性较低等因素而导致不准确。这种分散的方法浪费了时间、金钱和机会。
数据网格通过将数据视为具有清晰架构、文档和标准化访问的产品来解决这些问题,从而降低不良数据风险并提高数据准确性和效率。
数据网格:现代方法
数据网格架构
数据网格通过分散所有权并将数据视为由自助服务基础设施支持的产品,重新定义了数据管理。这种转变使团队能够完全控制其数据,同时联合治理可确保整个组织的质量、合规性和可扩展性。
简单来说,它是一个架构框架,旨在通过使用去中心化所有权和分布式方法来解决复杂的数据挑战。它用于集成来自各个业务领域的数据以进行全面的数据分析。它还建立在强大的数据共享和治理政策之上。
数据网格的目标
数据网格帮助各种组织获得对大规模数据的一些有价值的见解;简而言之,处理不断变化的数据环境、不断增长的数据源和用户数量、所需的各种数据转换以及快速适应变化的需求。
数据网格通过分散控制解决了上述所有问题,因此团队可以管理自己的数据,而无需将其隔离在不同的部门。这种方法通过分布式数据处理和存储来提高可扩展性,这有助于避免单个中央系统的速度变慢。它允许团队直接使用自己的数据,从而减少因等待中央团队而造成的延迟,从而加快洞察速度。每个团队对自己的数据负责,这提高了质量和一致性。通过使用易于理解的数据产品和自助服务工具,数据网格确保所有团队都可以快速访问和管理其数据,从而实现更快、更高效的运营并更好地满足业务需求。
数据网格的关键原理
· 分散的数据所有权:团队拥有并管理他们的数据产品,使他们对其质量和可用性负责。
· 数据作为产品:数据被视为具有标准化访问、版本控制和模式定义的产品,确保跨部门的一致性和易用性。
· 联合治理:制定政策是为了维护数据完整性、安全性和合规性,同时仍然允许分散所有权。
· 自助服务基础设施:团队可以访问可扩展的基础设施,支持数据的摄取、处理和查询,而不会出现瓶颈或依赖集中式数据团队。
事件如何帮助数据网格?
事件允许系统的不同部分实时共享和更新数据,从而帮助数据网格。当一个区域发生变化时,会通过一个事件通知其他区域,这样每个人都可以了解最新情况,而无需直接联系。这使得系统更加灵活和可扩展,因为它可以处理大量数据并轻松适应变化。事件还可以更轻松地跟踪数据的使用和管理方式,并让每个团队处理自己的数据而不依赖其他团队。
最后,让我们看看事件驱动的数据网格架构。
事件驱动的数据网格架构
这种事件驱动的方法使我们能够将数据的生产者与消费者分开,使系统随着领域随着时间的推移而发展而更具可扩展性,而无需对架构进行重大更改。生产者负责生成事件,然后将其发送到数据传输系统。流媒体平台确保这些事件可靠地传递。当生产者微服务或数据存储发布新事件时,它会存储在特定主题中。这会触发消费者端的侦听器(例如 Lambda 函数或 Kinesis)来处理事件并根据需要使用它。
利用 AWS 实现事件驱动的数据网格架构
AWS 提供了一套服务,完美补充了事件驱动的数据网格模型,使组织能够扩展其数据基础设施、确保实时数据交付并维持高水平的治理和安全性。
以下是各种 AWS 服务如何融入此架构:
用于实时事件流的 AWS Kinesis
在事件驱动的数据网格中,实时流是一个关键要素。 AWS Kinesis 提供大规模收集、处理和分析实时流数据的能力。
Kinesis 提供了多个组件:
· Kinesis Data Streams:摄取实时事件并与多个使用者同时处理它们。
· Kinesis Data Firehos e:将事件流直接传送到 S3、Redshift 或 Elastic 搜索以进行进一步处理和分析。
· Kinesis Data Analytics:实时处理数据以动态获取见解,从而在数据处理管道中实现即时反馈循环。
用于事件处理的 AWS Lambda
AWS Lambda 是数据网格架构中无服务器事件处理的支柱。凭借其自动扩展和处理传入数据流的能力,无需服务器管理,
Lambda 是以下方面的理想选择:
· 实时处理 Kinesis 流
· 调用API网关请求以响应特定事件
· 与 DynamoDB、S3 或其他 AWS 服务交互以存储、处理或分析数据
用于事件分发的 AWS SNS 和 SQS
AWS Simple Notification Service (SNS) 充当主要事件广播系统,跨分布式系统发送实时通知。 AWS Simple Queue Service (SQS) 确保解耦服务之间的消息可靠传递,即使在部分系统发生故障的情况下也是如此。这些服务允许解耦的微服务在没有直接依赖的情况下进行交互,从而确保系统保持可扩展性和容错性。
用于实时数据管理的 AWS DynamoDB
在去中心化架构中,DynamoDB 提供可扩展、低延迟的 NoSQL 数据库,可以实时存储事件数据,非常适合存储数据处理管道的结果。它支持发件箱模式,其中应用程序生成的事件存储
在 DynamoDB 中并由流服务(例如 Kinesis 或 Kafka)使用。
用于联合数据目录和 ETL 的 AWS Glue
AWS Glue 提供完全托管的数据目录和 ETL 服务,这对于数据网格中的联合数据治理至关重要。 Glue 可帮助编目、准备和转换分布式域中的数据,确保整个组织的可发现性、治理和集成。
适用于数据湖的 AWS Lake Formation 和 S3
虽然数据网格架构逐渐远离集中式数据湖,但 S3 和 AWS Lake Formation 在存储、保护和编目不同域之间流动的数据方面发挥着至关重要的作用,从而确保长期存储、治理和合规性。
使用 AWS 和 Python 运行事件驱动的数据网格
事件制作者:AWS Kinesis + Python
在此示例中,我们在创建新客户时使用 AWS Kinesis 来流式传输事件:
import boto3
import json
kinesis = boto3.client('kinesis')
def send_event(event):
kinesis.put_record(
StreamName="CustomerStream",
Data=json.dumps(event),
PartitionKey=event['customer_id']
)
def create_customer_event(customer_id, name):
event = {
'event_type': 'CustomerCreated',
'customer_id': customer_id,
'name': name
}
send_event(event)
# Simulate a new customer creation
create_customer_event('123', 'ABC XYZ')
事件处理:AWS Lambda + Python
此 Lambda 函数使用 Kinesis 事件并实时处理它们。
import json
import boto3
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('CustomerData')
def lambda_handler(event, context):
for record in event['Records']:
payload = json.loads(record['kinesis']['data'])
if payload['event_type'] == 'CustomerCreated':
process_customer_created(payload)
def process_customer_created(event):
table.put_item(
Item={
'customer_id': event['customer_id'],
'name': event['name']
}
)
print(f"Stored customer data: {event['customer_id']} - {event['name']}")
结论
通过利用 Kinesis、Lambda、DynamoDB 和 Glue 等 AWS 服务,组织可以充分发挥事件驱动的数据网格架构的潜力。该架构提供敏捷性、可扩展性和实时洞察力,确保组织在当今快速发展的数据环境中保持竞争力。对于希望在大数据和分布式系统时代蓬勃发展的企业来说,采用事件驱动的数据网格架构不仅是技术的增强,而且是战略上的当务之急。