Google Cloud PubSub 推送 Telegraf 输入插件
免费使用此 InfluxDB 集成Google Cloud PubSub 是一种针对事件驱动系统和流式分析的消息队列和摄取解决方案。它提供全托管服务,允许独立应用程序通过发布/订阅架构异步通信。应用程序将消息发送到 Pub/Sub 服务,其他应用程序可以订阅主题以接收相关消息。Google Cloud Pub/Sub 在 Google Compute Engine 实例中表现良好,能够高效地处理大量数据。
什么是 Pub/Sub?
发布/订阅(pub/sub)消息是一种异步消息模式,其中消息的发布者不直接向接收者发送消息,而是发送可以由其他设备订阅的按类别划分的消息,而不需要发布者的知识。
Pub/sub 允许解耦发送者和接收者,这可以简化应用程序的设计和实现。使用 pub/sub,订阅者或发布者都不需要了解对方。
pub/sub 消息架构通常由三个组件组成:发布者、代理和订阅者。发布者向代理发送消息,代理再将它们分发到所有当前连接的订阅者。这使得系统可以水平扩展,随着订阅者数量的增加,代理可以处理更多消息的分发,而不会影响发布者。
Pub/Sub 消息的优点
灵活性
使用 Pub/Sub 消息架构,开发者可以通过向中心消息代理发送消息来解耦他们的应用程序。这可以使开发和新应用程序的测试更容易,以及修改现有应用程序。
pub/sub 代理通常支持多种不同的通信协议,而不仅仅是 HTTP。它们还使得向系统添加新服务变得容易,因为这些服务可以订阅它们需要信息的话题,而无需直接了解发布者。
性能和效率
pub/sub 消息可以帮助减少应用程序不同部分之间需要发送的消息数量,从而提高性能。
pub/sub 架构可以通过多种方式使应用程序更高效和性能更好。pub/sub 可以消除轮询设备进行监控类型工作负载的需求,这将减少监控设备的负载并减少不需要轮询请求的带宽使用。pub/sub 还允许应用程序的不同部分独立地进行扩展或缩减,这使得它们更具成本效益。
可靠性
通过修改消息代理配置,pub/sub 消息架构可以帮助确保消息的可靠传输。
可扩展性
发布/订阅系统具有高度的可扩展性,因为它可以轻松容纳大量发布者和订阅者而不会影响性能。如果消息量高,消息代理可以作为负载均衡器或速率限制器为订阅者提供服务,通过保留消息直到订阅者能够赶上。
pub/sub 应用程序还可以独立扩展其组件。代理可以复制以处理更多消息吞吐量,一些过滤消息的逻辑可以放入代理中,而不是向订阅者发送无用的消息。如果需要,订阅者也可以独立于代理进行扩展。
使用 Pub/Sub 消息的挑战
延迟
如果订阅者需要在非常短的时间内接收消息,延迟可能会成为 pub/sub 应用程序的一个主要问题。从发布者到代理再到订阅者的额外网络跳转可能会在特定用例中造成过多的开销。这尤其适用于消息代理接收到大量请求时。
复杂性
对于简单的应用来说,添加需要管理的中介代理以及与异步消息相关的潜在问题可能不值得其带来的发布/订阅架构的好处。
消息投递保证
发布/订阅架构的一个常见问题可能与消息如何传递给订阅者有关。消息可能按照创建时间的顺序传递,如果这是问题,必须在您的应用程序代码中考虑这一点。
消息也可能多次发送给同一订阅者,而代理可能在中途失败,无法传递消息。
大多数发布/订阅代理都有处理上述问题的功能,但它们会对系统性能产生影响。一般来说,您对消息顺序和投递的保证越多,您的应用程序性能越慢。
发布/订阅架构组件
发布者
发布者是发布/订阅系统的一个组件,它生成消息。根据架构,发布者可以直接将消息发送给订阅者或将消息发送到专门的消息代理。
订阅者
订阅者是发布/订阅系统中接收来自发布者的消息的组件。在大多数情况下,订阅者必须明确订阅他们感兴趣的主题才能接收消息。一旦收到消息,订阅者就可以对消息中包含的数据采取行动,并可能通过发送回消息作为发布者本身。
代理
发布/订阅代理是介于发布者和订阅者之间的中介组件,通过接收和发送他们之间的消息来协调。
使用代理的价值在于它可以提供以下功能:
- 通过持久化消息实现冗余
- 过滤和路由消息
- 速率限制
- 为消息提供不同级别的投递保证
主题
主题是用于在发布/订阅系统中定义消息可用通道的标签,发布者和订阅者都可以向其发布消息和订阅消息。
主题通常按层次结构组织,每个层次代表一个更具体的主题。
消息
消息是发布者和订阅者之间交换的信息单位。消息与特定的主题相关联,它们可以包含任何类型的信息。
对于某些用例,消息可以具有定义的数据结构,以确保订阅接收消息的格式标准化。
发布/订阅关键概念
松耦合
发布/订阅设计模式的一个关键部分是发布者和订阅者之间是解耦的。这意味着发布者不需要知道谁订阅了其消息,订阅者也不需要知道发布者是谁。这种松耦合使得随着发布者和订阅者数量的增加,系统具有更大的灵活性和可扩展性。
异步通信
发布者和订阅者之间的通信是异步的。这意味着发布者可以在不等待订阅者响应的情况下发送消息,反之亦然。异步通信可以提高效率,因为发布者和订阅者可以在发送和接收消息的同时继续工作。
消息过滤
使用发布/订阅,可以过滤消息,以便只有对特定消息感兴趣的订阅者才能收到它。如果配置了任务,代理也可以根据其内容读取和过滤消息。消息过滤有助于减少杂乱,并确保订阅者只接收他们感兴趣的信息。
消息路由
可以根据某些标准将消息路由到不同的订阅者。例如,消息可以根据消息的主题或订阅者的位置进行路由。这有助于确保将消息传递给最相关的订阅者。
容错
由于如上所述,发布/订阅架构的不同部分松散耦合,因此容错性得到了有效构建。处理发布者和订阅者之间通信的代理可以进行复制以确保可用性,并为消息提供持久性。例如,如果一个订阅设备因某些原因而关闭,代理可以保存消息副本,直到设备重新上线,然后交付消息。其他设备不需要了解彼此的状态,因为代理会处理这些事务。
发布/订阅用例
应用消息和通知
发布/订阅架构最常见用例之一是消息传递。在这种类型的系统中,可以将消息发送到大量订阅者,而不需要每个订阅者不断轮询新消息。这可以在各种场景中使用,例如向用户发送警报或通知。这种类型的消息也可以用于应用程序后端服务之间的内部通信。
数据流
发布/订阅架构的另一个常见用例是数据流。在这种类型的系统中,数据可以流式传输到大量订阅者。在需要尽快将数据传送给用户的情况下,例如实时更新或股票价格,这非常有用。
地理定位跟踪
发布/订阅架构还可以用于地理定位跟踪。可以实时跟踪资产位置,当资产进入或离开特定区域时,可以通知订阅者。
物联网应用
发布/订阅架构还可以用于物联网应用。使用pub/sub传感器可以将数据实时流式传输到订阅者,这在各种场景中很有用,例如监控环境或跟踪机械状态。如果一个设备发送的值超过某个阈值,订阅者可以发送消息回传数据,指示设备关闭或采取其他行动。
事件驱动架构
事件驱动架构(EDA)是一种消息模式,其中服务通过产生和消费事件相互通信。这种类型的架构常用于需要高度可伸缩性和可靠性的应用程序,例如金融交易系统和社交媒体平台。
发布/订阅非常适合事件驱动架构,因为它允许服务在无需显式连接的情况下产生和消费事件。这有助于降低分布式系统的复杂性,使其更易于维护和扩展。它还使得将新服务或功能集成到系统中变得更加容易,因为它们可以简单地订阅相关事件,而无需那些事件生产者了解新服务。
微服务架构
微服务架构是一种软件开发风格,其中应用程序由一组小型、独立的服务构建而成。
发布/订阅消息非常适合微服务,因为它允许服务在无需显式连接的情况下进行通信。这有助于降低管理系统的复杂性,因为服务可以发布和订阅事件,而无需了解系统中的其他服务。
大数据分析
大数据分析是一个处理无法使用传统方法处理的大量数据的领域。
发布/订阅消息传递可以通过从多个来源实时流式传输数据来帮助大数据分析。这对于需要快速分析大量数据的情况很有用,例如欺诈检测或预测分析。发布/订阅还可以用于管理多步骤数据处理工作流和并行处理大量数据。
为什么使用Google Cloud Pub/Sub Push Telegraf插件?
Google Cloud Pub/Sub Push输入插件侦听通过HTTP POST从Google Cloud Pub/Sub发送的消息。Telegraf充当Google Pub/Sub“推送”服务的端点。Google的Pub/Sub服务通过HTTPS/TLS发送,因此此插件必须在有效的代理后面或配置为使用TLS。
使用此Telegraf插件收集您的消息,您可以将您的消息存储在InfluxDB中,以及所有其他指标和事件数据,例如消息属性和订阅主题。
如何使用Google Cloud PubSub Push Telegraf插件
Google Cloud PubSub Push Telegraf插件使用简单。首先,您需要为Pub/Sub主题创建一个PUSH订阅。然后,您可以选择适合您环境的配置选项(例如服务地址、令牌、超时和正文大小)。此外,您可以通过指定服务TLS证书和密钥的文件名来启用TLS。您还可以通过在tls_allowed_cacerts
中包含允许的CA证书文件名列表来启用双向认证TLS并授权客户端连接。
请注意,此插件仅期望以Google Pub/Sub JSON格式接收消息。
要监控的关键Google Cloud PubSub Push指标
使用Google Cloud PubSub Push,您可以在不同的应用程序之间流数据,进行应用程序监控、欺诈检测和实时排行榜。数据类型Message
定义了Google Pub/Sub消息的结构,数据类型Payload
是接收到的Google Pub/Sub数据。
发布/订阅工具
Redis
Redis是一个内存数据库,可用于像实时消息传递、流数据以及地理位置跟踪这样的发布/订阅用例。
Redis快速、可靠且可扩展,具有广泛的消息管理功能,例如消息确认、消息排序和消息投递保证。
Google Cloud Pubsub
Google Cloud Pubsub是一个用于构建发布/订阅消息系统的托管服务。它专注于事件流,用于将数据移动到数据仓库进行分析、实时警报或通知,以及将数据流式传输到操作数据库。
Kafka
Apache Kafka是一个设计用于高吞吐量和可扩展性的开源分布式消息系统。这使得Kafka非常适合发布/订阅应用程序,并且它通常用于事件驱动架构和流数据应用程序。
Kafka具有广泛的功能,例如消息确认、交付保证和可扩展性。它还支持推送和拉取消息模式,这使得它成为发布/订阅用例的多功能工具。
Pulsar
Apache Pulsar是一个由Yahoo最初创建并由Apache软件基金会管理的一个开源分布式发布/订阅消息系统。它设计用于高性能,具有简单的API、可扩展性、灵活性和可操作性。
脉冲星提供两种消息传递类型:队列(消息排序)和发布/订阅(消息广播到多个消费者)。它还支持数据流、消息重放等特性。该系统具有容错能力,能够检测和恢复节点故障。
MQTT
MQTT 是由 IBM 为 物联网 用例设计的协议。该协议基于许多发布/订阅概念,并依赖于 MQTT 代理来处理设备之间的消息传递。MQTT 强调持久性和交付保证,因为它旨在在 边缘计算 环境中工作,在这些环境中网络连接无法保证。
常见问题解答
发布/订阅与消息队列
尽管“发布/订阅”和“消息队列”这两个术语经常互换使用,但它们实际上指的是不同的技术。发布/订阅系统为应用程序提供了一种通过可由多个服务订阅的主题进行通信的方式,而消息队列则为应用程序提供了一种通过发送到单个服务的单个消息进行通信的方式。
发布/订阅与事件代理
发布/订阅是一种消息模式,其中发布者向订阅者发送消息。另一方面,事件代理是一种软件应用程序,它作为两个或多个应用程序之间的中间人,通过接收、转换和路由数据从一个系统到另一个系统。