55、Cloud Pub/Sub 消息模式与成本分析

Cloud Pub/Sub 消息模式与成本分析

1. 成本计算

在使用 Cloud Pub/Sub 时,成本是一个需要考虑的重要因素。假设你有 12,960,000 个发布请求,以及 1,296,000,000 个拉取(或推送)请求,那么总请求数为 1,308,960,000 个。

每个请求的最小计费量是 1 KB,即使消息很小,总数据量也约为 13 亿 KB,略低于 1.31 TB。按照每 GB 数据 0.06 美元的费率,每月向 100 个消费者发送 1300 万条消息的费用将是 78.60 美元。

2. 消息模式

2.1 扇出广播消息模式

2.1.1 模式介绍

扇出系统使用 Pub/Sub,使得任何单个发送者都可以向广泛的受众广播消息。例如,在一个由多台机器组成的系统中,每台机器都在 eBay 上自动竞标商品,你希望跟踪总体花费。由于有多台服务器都在竞标商品,你需要一种方式来告知所有服务器目前的花费情况,否则你将不得不轮询单个中央服务器以获取这个总数。

为了实现这一点,你可以使用扇出消息,每台服务器向特定的 Pub/Sub 主题广播其已花费金钱的事实。这样,所有监听该主题的其他机器都可以跟踪总花费,并在有新的支出时立即得到通知。

2.1.2 代码实现

以下是实现该功能的代码示例:

const request = require('request');
const pubsub = require('@google-cloud/pubsub')({
  projectId: 'your-project-id'
});
let machineId;
const topic = pubsub.topic('money-spent');           
const amountSpentUrl = 'http://ebaybidder.mydomain.com:8080/budgetAvailable.json';
let amountSpent;
startBidding = () => {                            
  request(amountSpentUrl, (err, res, body) => {
    amountSpent = body;
    const subscription = topic.subscription(machineId + '-queue');                        
    subscription.on('message', (message) => {           
      console.log('Money was spent!', message.data);
      amountSpent += message.data;               
      message.ack();                   
    });
    bidOnItems();     
  });
}

上述代码的主要步骤如下:
1. 初始化 :引入必要的模块,设置项目 ID,定义主题和获取可用预算的 URL。
2. 启动竞标 :当新的竞标机器启动时,调用 startBidding 方法,该方法会从中央位置获取可用预算。
3. 订阅主题 :为每台机器创建一个唯一的订阅,监听主题上的消息。
4. 更新花费 :当有新消息到达时,更新总花费,并确认收到消息。
5. 开始竞标 :调用 bidOnItems 方法开始在 eBay 上竞标商品。

2.1.3 更新花费的代码

当你竞标商品或因被出价更高而获得退款时,需要更新花费。以下是实现该功能的代码:

const pubsub = require('@google-cloud/pubsub')({
  projectId: 'your-project-id'
});
let machineId;
const topic = pubsub.topic('money-spent');
const broadcastBid = (bid) => {         
  return topic.publish({
    data: bid.amount,          
    attributes: {
      machineId: machineId,            
      itemId: bid.item.id
    }
  }, {raw: true});            
}
const broadcastRefund = (bid) => {      
  return topic.publish({
    data: -1 * bid.amount,     
    attributes: {
      machineId: machineId,
      itemId: bid.item.id
    }
  }, {raw: true});
}

上述代码的主要步骤如下:
1. 广播竞标 :当你竞标商品时,调用 broadcastBid 方法,向主题发布花费的金额。
2. 广播退款 :当你被出价更高或拍卖取消时,调用 broadcastRefund 方法,向主题发布退款的金额。

2.2 工作队列消息模式

2.2.1 模式介绍

与扇出消息模式不同,工作队列消息模式是一种将工作分配给多个消费者的方式,理想情况下,每个消息只由一个消费者处理。

继续以 eBay 竞标为例,假设你想设计一种方式来指示所有竞标机器对特定的商品列表进行竞标。为了避免每个机器都对每个商品进行竞标,你可以使用工作队列模式。

2.2.2 代码实现

以下是实现该功能的代码示例:

const pubsub = require('@google-cloud/pubsub')({
  projectId: 'your-project-id'
});
const topic = pubsub.topic('bid-on-item');             
const subscription = topic.subscription('bid-on-item-queue');
subscription.on('message', (message) => {          
  message.ack(() => {                   
    bidOnItem(message);   
  });
});

上述代码的主要步骤如下:
1. 初始化 :引入必要的模块,设置项目 ID,定义主题和订阅。
2. 监听消息 :为订阅注册一个回调函数,当有新消息到达时,确认收到消息,并调用 bidOnItem 方法对商品进行竞标。

2.3 两种消息模式对比

消息模式 特点 适用场景
扇出广播消息模式 单个发送者向多个消费者广播消息,每个消费者都能收到相同的消息 需要将信息同步给多个接收者的场景,如多个服务器之间的状态同步
工作队列消息模式 消息由单个消费者处理,避免重复处理 需要将任务分配给多个工作者,且每个任务只需要处理一次的场景,如任务调度

2.4 消息模式流程图

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;

    A(消息发送者):::process -->|扇出广播消息模式| B(主题: money-spent):::process
    B -->|订阅| C(消费者 1):::process
    B -->|订阅| D(消费者 2):::process
    B -->|订阅| E(消费者 3):::process

    F(任务生产者):::process -->|工作队列消息模式| G(主题: bid-on-item):::process
    G -->|订阅| H(消费者 1):::process
    G -->|订阅| I(消费者 2):::process
    G -->|订阅| J(消费者 3):::process

通过上述内容,我们了解了 Cloud Pub/Sub 的成本计算方法,以及扇出广播消息模式和工作队列消息模式的原理和实现方式。在实际应用中,我们可以根据具体的需求选择合适的消息模式,以提高系统的效率和可靠性。

3. 其他相关服务及功能

3.1 数据处理与存储服务

在云环境中,除了 Cloud Pub/Sub 外,还有许多其他重要的数据处理与存储服务。

3.1.1 Cloud Bigtable
  • 概念 :Cloud Bigtable 是一种高性能的 NoSQL 数据库服务,适用于处理大规模数据。它具有高吞吐量和低延迟的特点,非常适合实时分析和大数据处理。
  • 数据模型 :其数据模型基于分布式哈希表,支持多版本数据和稀疏数据。表由行和列族组成,每个行可以有多个列族,每个列族可以包含多个列。
  • 使用场景 :常用于物联网、金融、医疗等领域,如处理传感器数据、交易记录等。
3.1.2 Cloud Datastore
  • 概念 :Cloud Datastore 是一种面向文档的 NoSQL 数据库,提供自动复制和高可用性。它支持事务和复杂查询,适用于存储结构化和半结构化数据。
  • 数据结构 :数据以实体的形式存储,每个实体有一个键和多个属性。实体可以组织成层次结构,支持祖先查询。
  • 使用场景 :常用于 Web 应用、移动应用等,如存储用户信息、博客文章等。
3.1.3 Cloud Spanner
  • 概念 :Cloud Spanner 是一种全球分布式关系数据库,提供强一致性和自动扩展。它结合了关系数据库的功能和分布式系统的可扩展性,适用于对数据一致性要求较高的应用。
  • 数据模型 :基于传统的关系数据库模型,支持 SQL 查询和事务。表可以通过主键和外键进行关联。
  • 使用场景 :常用于金融交易、电商平台等,如处理订单信息、库存管理等。

3.2 机器学习与人工智能服务

云平台还提供了丰富的机器学习与人工智能服务,帮助开发者快速构建智能应用。

3.2.1 Cloud ML Engine
  • 概念 :Cloud ML Engine 是一个托管的机器学习平台,支持 TensorFlow 等流行的机器学习框架。它提供了模型训练、部署和预测的一站式服务。
  • 操作步骤
    1. 数据准备 :将训练数据存储在 Cloud Storage 中。
    2. 模型开发 :使用 TensorFlow 等框架开发机器学习模型。
    3. 模型训练 :在 Cloud ML Engine 上提交训练作业,指定训练参数和资源配置。
    4. 模型部署 :将训练好的模型部署到 Cloud ML Engine 上,生成预测服务。
    5. 模型预测 :通过 API 调用预测服务,对新数据进行预测。
3.2.2 Cloud Natural Language
  • 概念 :Cloud Natural Language 是一个自然语言处理 API,提供实体识别、情感分析、语法分析等功能。它可以帮助开发者理解和处理文本数据。
  • 操作步骤
    1. 数据输入 :将需要分析的文本作为输入。
    2. API 调用 :使用 Cloud Natural Language API 对文本进行分析。
    3. 结果获取 :获取分析结果,如实体列表、情感得分等。
3.2.3 Cloud Vision
  • 概念 :Cloud Vision 是一个图像识别 API,提供图像标注、人脸检测、文字识别等功能。它可以帮助开发者理解和处理图像数据。
  • 操作步骤
    1. 图像上传 :将需要分析的图像上传到 Cloud Storage 或直接作为输入。
    2. API 调用 :使用 Cloud Vision API 对图像进行分析。
    3. 结果获取 :获取分析结果,如图像标签、人脸信息等。

3.3 网络与安全服务

网络与安全是云环境中至关重要的方面,云平台提供了一系列的服务来保障网络的可靠性和数据的安全性。

3.3.1 Cloud DNS
  • 概念 :Cloud DNS 是一个分布式的域名系统,提供高可用性和低延迟的域名解析服务。它可以帮助开发者管理域名和 IP 地址的映射。
  • 操作步骤
    1. 域名注册 :在域名注册商处注册域名。
    2. 区域创建 :在 Cloud DNS 中创建域名区域。
    3. 记录添加 :添加 DNS 记录,如 A 记录、CNAME 记录等。
    4. 域名配置 :将域名的 DNS 服务器配置为 Cloud DNS 的服务器。
3.3.2 Cloud Storage
  • 概念 :Cloud Storage 是一个可扩展的对象存储服务,提供高可用性和持久性的数据存储。它可以用于存储各种类型的数据,如图片、视频、文档等。
  • 操作步骤
    1. 存储桶创建 :在 Cloud Storage 中创建存储桶。
    2. 对象上传 :将数据上传到存储桶中。
    3. 权限设置 :设置存储桶和对象的访问权限,如公共访问、私有访问等。
3.3.3 安全配置
  • 访问控制 :使用 IAM(Identity and Access Management)来管理用户和服务账户的权限,确保只有授权的用户可以访问资源。
  • 加密 :对存储在 Cloud Storage 中的数据进行加密,保护数据的机密性。
  • 网络安全 :使用 VPC(Virtual Private Cloud)来隔离网络,设置防火墙规则来控制网络流量。

3.4 服务使用流程图

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;

    A(数据处理与存储):::process --> B(Cloud Bigtable):::process
    A --> C(Cloud Datastore):::process
    A --> D(Cloud Spanner):::process

    E(机器学习与人工智能):::process --> F(Cloud ML Engine):::process
    E --> G(Cloud Natural Language):::process
    E --> H(Cloud Vision):::process

    I(网络与安全):::process --> J(Cloud DNS):::process
    I --> K(Cloud Storage):::process
    I --> L(安全配置):::process

4. 总结

通过对 Cloud Pub/Sub 以及其他相关云服务的介绍,我们可以看到云平台提供了丰富的功能和服务,涵盖了数据处理、存储、机器学习、网络和安全等多个方面。在实际应用中,我们可以根据具体的需求选择合适的服务,构建高效、可靠的云应用。

4.1 消息模式选择

  • 扇出广播消息模式适用于需要将信息同步给多个接收者的场景,如多个服务器之间的状态同步。
  • 工作队列消息模式适用于需要将任务分配给多个工作者,且每个任务只需要处理一次的场景,如任务调度。

4.2 服务组合

在构建云应用时,我们可以将不同的服务组合使用,以实现更复杂的功能。例如,使用 Cloud Pub/Sub 进行消息传递,使用 Cloud Bigtable 进行数据存储,使用 Cloud ML Engine 进行机器学习预测。

4.3 未来展望

随着云计算技术的不断发展,云平台将提供更多的功能和服务,为开发者带来更多的便利和创新机会。我们可以期待云平台在人工智能、物联网、区块链等领域发挥更大的作用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值