53、云数据处理与消息传递服务全解析

云数据流与发布/订阅解析

云数据处理与消息传递服务全解析

1. 云数据流(Cloud Dataflow)处理流程与资源消耗

云数据流是一种强大的大规模数据处理工具。在数据处理过程中,有一系列明确的步骤。首先是对数据进行理解定价相关操作,处理数据并将结果向前传递。最后一步是聚合结果,比如统计所有最终传递的项目,并将最终输出保存回云存储桶。

在处理过程中,我们可以按每秒查看每个阶段处理的元素数量。例如,在分割阶段,每秒大约处理22,000行文本,并将其转换为单词列表输出。下一阶段接收单词列表作为元素,过滤掉不以字母“a”开头的内容,此阶段处理量约为分割阶段的13倍,这是因为每行输入文本有13个单词,所以该阶段每秒大约处理295,000个单词。

当作业完成后,云数据流会将总计数写入云存储桶。可以通过以下命令验证输出结果:

$ gsutil cat gs://dataflow-bucket/output-10e7-*
30000000

由于输入了1000万行文本,每行有三个以字母“a”开头的单词,所以总数为3000万。

作业完成后,我们还能查看作业消耗的计算资源。云数据流会根据数据量自动调整计算资源,例如在作业开始几分钟后会开启第二个虚拟机来处理数据,无需手动更改代码,工作完成后还会自动缩减资源。

云数据流的资源成本按计算(CPU每小时)、内存(GB每小时)和磁盘存储(GB每小时)组合计算,且不同地区的成本不同,以下是部分地区的价格表:
| 资源 | 爱荷华州 | 悉尼 | 伦敦 | 台湾 |
| ---- | ---- | ---- | ---- | ---- |
| vCPU | $0.056 | $0.0756 | $0.0672 | $0.059 |
| GB内存 | $0.003557 | $0.004802 | $0.004268 | $0.004172 |
| GB标准磁盘 | $0.000054 | $0.000073 | $0.000065 | $0.000054 |
| GB SSD | $0.000298 | $0.004023 | $0.000358 | $0.000298 |

不过,提前预测总成本比较困难,因为每个管道不同,输入数据差异大,使用的虚拟机数量、磁盘空间和内存总量也会变化。但我们可以采取以下措施:
- 若对成本敏感,可以设置特定数量或最大数量的工作节点,以限制每小时的总成本,但这可能会延长作业时间,且无法强制作业在规定时间内完成。
- 若了解特定管道的扩展规律,可以使用小输入运行作业估算成本,再外推大输入的成本。例如,之前统计1000万行文本中以字母“a”开头的单词的作业,消耗了约0.2 vCPU小时、0.75 GB小时的内存和50 GB小时的标准磁盘空间,在爱荷华州运行的总成本约为$0.0165。可以推测,处理10000万行类似分布的文本,成本可能线性增长到约$0.16。

以下是云数据流处理流程的mermaid流程图:

graph LR
    A[数据输入] --> B[分割阶段]
    B --> C[过滤阶段]
    C --> D[聚合阶段]
    D --> E[写入云存储桶]
2. 云发布/订阅(Cloud Pub/Sub)系统解析

在日常消息传递中,我们通常有一些基本要求,如消息由特定人发送、发送给特定人且只发送和接收一次。在机器间的通信中,尤其是大型分布式应用中,也有类似要求。但实现这些要求并不容易,因为消息广播、同步或异步通信都有不同要求。

许多开源消息平台(如Apache Kafka和ZeroMQ)和标准(如AMQP)可处理消息传递,但都需要开启服务器、安装和管理软件,且随着消息数量增加,需要增加机器并重新配置系统。而云发布/订阅则解决了这些难题。

云发布/订阅是一个完全托管的消息系统,基于谷歌内部基础设施构建,与YouTube和AdWords等服务使用相同的底层基础设施。它使用的概念与许多开源消息服务有很多重叠,熟悉其他消息系统的用户使用起来并不困难。

消息在云发布/订阅系统中的生命周期如下:
1. 消息发布 :消息生产者(发送者)决定发送消息,首先选择一个主题,然后将消息发布到该主题。云发布/订阅接收消息后,会为消息分配一个主题唯一的ID,并将其返回给生产者作为确认。
2. 消息路由 :云发布/订阅会查看该主题的所有订阅,并将消息副本广播到每个订阅。后续发送到该主题的消息会在每个订阅中排队,等待有人读取。
3. 消息传递方式 :消息到达订阅队列后,根据订阅配置有两种方式传递给消费者:
- 推模式订阅 :云发布/订阅主动向某个端点发送请求,将消息推送给消费者。
- 拉模式订阅 :消息在订阅队列中等待,消费者使用拉取API方法请求消息。
4. 消息确认 :消费者收到消息后,必须向云发布/订阅确认已处理该消息。他们使用消息附带的唯一ackId调用确认API方法。如果消费者在一定时间内未确认消息,消息将被放回订阅队列,实现自动重试。

云发布/订阅有三个核心概念:
- 主题(Topics) :类似于对话主题,代表信息类别,是发布消息的资源。主题用于对消息进行分类,消费者可以根据主题选择感兴趣的消息类别。在谷歌云平台上,主题仅用名称表示,消费者负责定制和配置。
- 消息(Messages) :表示要广播的内容,可以是客户操作通知或定期提醒。消息由Base-64编码的有效负载和可选的纯文本属性组成。当有效负载过大时,消息可以引用其他地方的信息。云发布/订阅系统在发布消息时会分配消息ID和时间戳。将有效负载和属性分开存储有两个原因:一是有效负载为Base-64编码,处理大有效负载可能有性能问题;二是消息可能加密,将一些信息放在属性中可避免在不解密消息的情况下检查关键信息。
- 订阅(Subscriptions) :用于表示对特定主题消息的兴趣。云发布/订阅会将主题的消息副本广播到所有相关订阅。

以下是云发布/订阅消息流程的mermaid流程图:

graph LR
    A[消息生产者] --> B[选择主题并发布消息]
    B --> C[云发布/订阅分配ID并确认]
    C --> D[广播消息到订阅]
    D --> E{订阅配置}
    E -->|推模式| F[云发布/订阅推消息给消费者]
    E -->|拉模式| G[消费者拉取消息]
    F --> H[消费者确认消息]
    G --> H

综上所述,云数据流和云发布/订阅为大规模数据处理和消息传递提供了强大而便捷的解决方案,了解它们的工作原理和成本计算方法,有助于我们更好地利用这些服务。

3. 云发布/订阅核心概念详解

云发布/订阅的三个核心概念在消息的发布和消费过程中起着关键作用,下面我们更深入地了解它们。

3.1 主题(Topics)

主题是消息分类的基础,就像公司里不同的部门,每个部门对应一个特定的主题。比如在一个公司通信场景中,销售部门对应“销售业务”主题,技术支持部门对应“技术支持”主题。当你有关于销售业务的消息时,就发布到“销售业务”主题;如果你是技术支持部门的人员,就关注“技术支持”主题的消息。

主题在云发布/订阅系统中是非常重要的资源,它为消息的组织和传播提供了明确的方向。在使用时,你只需要指定主题的名称,后续的消息发布和订阅操作都围绕这个主题展开。

3.2 消息(Messages)

消息是要传递的具体内容,其形式多样。可以是一个简单的通知,如“用户注册成功”;也可以是一个复杂的提醒,如“系统即将进行维护”。

消息由两部分主要内容构成:
- Base - 64编码的有效负载 :这是消息的核心数据部分,通常是一些需要传递的关键信息。例如,当通知新视频发布时,如果不直接将视频内容作为有效负载(因为视频文件可能很大),可以将视频的相关描述信息进行Base - 64编码后作为有效负载。
- 纯文本属性 :作为消息的元数据,以键值对的形式存在。比如消息的优先级、发送时间等信息可以放在属性中。这样做的好处前面已经提到,一是避免处理大有效负载带来的性能问题,二是在消息加密的情况下可以方便地查看一些关键信息而无需解密消息。

下面是一个简单的消息示例,假设我们要发送一个新文章发布的消息:

有效负载(Base - 64编码): 新文章内容的编码信息
属性: 
    文章标题: "云计算的未来趋势"
    发布时间: "2024 - 10 - 01 10:00"
    优先级: "高"
3.3 订阅(Subscriptions)

订阅是消费者表达对特定主题消息兴趣的方式。当你创建一个订阅时,就相当于告诉云发布/订阅系统:“我想要接收关于这个主题的消息”。

订阅有推模式和拉模式两种:
- 推模式订阅 :云发布/订阅系统会主动将消息推送给消费者。这种模式适合那些需要及时处理消息的场景,比如实时监控系统,一旦有新的监控数据消息,系统能立即收到并处理。
- 拉模式订阅 :消费者需要主动去订阅队列中拉取消息。这种模式适合那些对消息处理时间要求不那么高,或者消费者有自己的处理节奏的场景,比如批量数据处理任务,消费者可以在合适的时间批量拉取消息进行处理。

订阅的确认机制也是非常重要的一环。消费者在处理完消息后,必须使用ackId调用确认API方法来告知云发布/订阅系统消息已处理。如果未在规定时间内确认,消息会被放回队列进行重试,确保消息不会丢失。

4. 云服务的综合应用与总结

云数据流和云发布/订阅在不同的场景中有着各自独特的优势,它们也可以相互配合,为大规模数据处理和消息传递提供更强大的解决方案。

4.1 云数据流与云发布/订阅的联合应用

在一个典型的大数据处理场景中,云数据流可以负责对大量数据进行清洗、转换和聚合等操作,而云发布/订阅可以用于在不同的处理模块之间传递消息。

例如,在一个电商系统中,云数据流可以对用户的购买记录数据进行处理,计算每个用户的消费金额和购买频率等信息。当云数据流完成某一批数据的处理后,可以通过云发布/订阅系统发布一个消息,通知其他模块(如营销模块)进行后续操作,如发送个性化的促销信息给用户。

整个流程可以用以下mermaid流程图表示:

graph LR
    A[用户购买记录数据] --> B[云数据流处理]
    B --> C[云发布/订阅发布消息]
    C --> D[营销模块接收消息]
    D --> E[发送促销信息给用户]
4.2 云服务使用建议

在使用云数据流和云发布/订阅时,我们可以参考以下建议:
- 成本控制 :对于云数据流,提前了解不同地区的资源成本,根据数据量和处理需求合理设置工作节点数量。对于小数据量的测试任务,可以选择成本较低的地区进行测试,估算成本后再进行大规模数据处理。
- 性能优化 :在云发布/订阅中,根据消息处理的及时性要求选择合适的订阅模式。对于实时性要求高的消息,使用推模式订阅;对于批量处理的消息,使用拉模式订阅。
- 消息管理 :在消息设计上,合理安排有效负载和属性的内容,避免大有效负载带来的性能问题和加密消息处理的复杂性。

总之,云数据流和云发布/订阅为我们提供了强大的工具来处理大规模数据和实现高效的消息传递。通过深入了解它们的工作原理、核心概念和使用方法,我们可以更好地利用这些云服务,为各种应用场景提供可靠的支持。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值