涂鸦智能已经超越了现有的基于 Kafka 的消息系统。 用户、主题和消息数量的快速增长导致与存储、处理、人工和时间相关的成本不断增加。
为了提高系统性能,涂鸦需要更灵活的消息传递系统来满足他们的持久化需求。 他们还需要一种能够轻松按用户对消息进行分类的解决方案。
在评估了几个不同的选项后,涂鸦最终选择了 Apache Pulsar,因为事实证明它最擅长处理消息的积累和重复消费。 Pulsar 的加入让涂鸦的消息系统更加高效,从而降低了运营和维护成本。
涂鸦智能是一个全球化的智能平台; “AI+IoT”开发者平台; 以及,全球领先的语音AI交互平台。 涂鸦智能连接消费者、生产品牌、OEM、零售连锁的需求,为客户提供一站式的人工智能物联网解决方案。
涂鸦提供硬件介入、云服务、应用软件开发,形成人工智能+制造服务的封闭生态。 这个封闭的生态系统为消费者提供物联网智能设备的业务端技术和商业模式升级服务,从而满足客户对硬件产品的更高需求。
图 1 显示了涂鸦目前的生态模型,包括涂鸦云、涂鸦 OS 和涂鸦 APP,它们共同形成了一个封闭的生态循环。 右边的 IoT 生态系统展示了涂鸦的一些应用场景,例如智能酒店、智能安防、智能家居等。
Figure 1. The Current Ecological Model of Tuya Smart
图 2 展示了涂鸦智能在添加 Pulsar 之前的消息架构。 上层包括一套独立于物联网的设备,如电源开关、投影仪等。 来自这些设备的消息通过 MQTT 网关被报告给消息系统。 此外,其他物联网设备(例如传感器)在将消息报告给消息系统之前通过 MQTT 网关传输消息。
Figure 2. Tuya Smart's Message Architecture Before the Addition of Pulsar
图 3 展示了涂鸦之前消息系统中的每个链接。 消息分发从 MQTT 网关开始。 然后,在获得中间服务的访问权限后,将消息连接到 Kafka,通过 Kafka 分发消息。 用户在收到消息后能够以不同的方式处理消息。
Figure 3. The Links in Tuya's Previous Message System
涂鸦之前的架构模式给公司带来了以下痛点:
最突出的问题是HTTP的传递方式不灵活。 如果用户想在服务重启后再次消费消息,则需要额外的处理来满足消息持久化的需求。 具体来说,用户没有收到的任何消息都需要保存在数据库中。
涂鸦现有的 Kafka 订阅模式可以解决持久化问题; 但是,该公司还面临其他架构挑战,需要采用不同的解决方案。
Tuya 最终选择了 Pulsar,主要有两个原因。 首先,Pulsar 具有独特的功能,例如多租户,这为公司提供了独特的优势。 其次,Pulsar 在测试期间的表现优于其竞争对手。 在本节中,我们将检查哪些 Pulsar 功能对涂鸦最有吸引力,并回顾性能测试的结果。
以下特性在涂鸦决定采用 Pulsar 的过程中发挥了关键作用:
丰富的交付/订阅策略
Pulsar 统一了队列模型和流模型。 数据的副本不需要存储在主题级别,因为一条数据可以被多次消费。 通过在流式传输、排队等中计算不同的订阅模型,可以显着提高灵活性。
易于运维(与 Kafka 相比); 倾向于自动化
Apache Pulsar 是一个灵活的发布-订阅消息系统,具有多层和分段的架构。 它的主要优势在于地理复制。 借助 Pulsar 将计算与存储分离的云原生架构,数据从代理转移到共享存储中。 上层是复制消息分发和服务的无状态代理。 下层是称为 bookie 集群的持久存储层。
凭借其分段存储架构,Pulsar 允许数据独立扩展并快速恢复,而不受扩展的限制。
多租户隔离
多租户是单个软件实例为多个租户提供服务的能力。 租户是一组用户,它们共享对软件实例具有特定权限的公共访问权限。 租户和命名空间是支持多租户的两个核心 Pulsar 资源,如下所示:
消息可以按类别或租户(用户)分类。 当涂鸦开始按租户而不是类别对消息进行分类时,租户之间的交互就自动解决了。
虽然 Pulsar 不是唯一可以解决这个问题的平台,但是在 Kafka 中很难达到预期的结果,因为 Kafka 是一个单租户系统。 Pulsar 的多租户特性更好地服务于涂鸦的真实场景。
优秀的在线社区
Pulsar 社区非常活跃,对技术和文档问题都反应迅速。
涂鸦确实从性能、扩展、运维等角度比较了多个消息队列,尽职尽责。 表 1 显示了他们的研究结果的摘要。
表 1. 性能比较:Pulsar 与其竞争对手
Item | LeviMQ | Kafka | NSQ | Pulsar |
---|---|---|---|---|
稳定性 | 高 | High | High | High |
扩展 | 高 | Medium | Medium | High |
O&M | 高 | Low | High | High |
生态 | 低 | High | Medium | High |
性能 | 高 | High | High | High |
LeviMQ 是涂鸦开发的基于 MQTT 协议的消息队列。\ NSQ 是 Go 中流行的开源消息中间件产品
首先,Kafka 在扩展方面存在不足,尤其是在缩减方面。 其次,从运维的角度来看,Kafka如前所述,在人工和时间方面成本更高。 最后,在生态方面,LeviMQ 是涂鸦开发的,但不是开源的解决方案。 因此,LeviMQ 在一定程度上具有内在的生态局限性。 NSQ 也是一个优秀的消息队列——开源,基于 Kafka 的优势进行了更改。 但是,Pulsar 的文档更完整。
在比较了消息队列性能的各个方面后,分析了各个平台的优缺点。 结果如图 4 所示。
图 4. LeviMQ、NSQ、Pulsar 和 Kafka 的优缺点
如图 4 所示,Pulsar 更擅长扩展和应用场景。 它也比 Kafka 更灵活。
而且,尽管 Pulsar 的文档不如 Kafka 完整,但 Pulsar 社区一直在努力填补空白,并且取得了良好的进展。
随着 Apache Pulsar 的加入,涂鸦的消息系统架构发生了变化,如图 5 所示。
图 5 加入 Apache Pulsa 后涂鸦新消息系统架构
架构中最显着的变化如下:
涂鸦成功将 Apache Pulsar 应用到各个应用层,系统整体表现良好。 他们对结果非常满意,现在正在努力实施他们的短期和长期计划。
目前,该公司正在为 Pulsar 应用一套规则引擎,以满足日益增长的消息订阅需求。
未来,涂鸦期待更多扩展的业务支持功能,提供更丰富的使用场景。 具体来说,
随着 5G 的到来,物联网行业面临着无数的挑战和机遇。 作为一个全球化的智能平台,涂鸦智能不仅链接各个销售平台的厂商,还以无数种方式连接用户。 在“万物智能”的主题驱动下,涂鸦迫切需要一个高性能、高稳定性的消息系统。
在对比了 Kafka、LeviMQ 等多种不同的消息系统后,涂鸦最终选择了 Apache Pulsar。 Pulsar 凭借其卓越的性能和异地复制、多租户隔离等特性,解决了涂鸦以往消息系统中的许多痛点,如交付不灵活、主题数量快速增长导致运营成本增加、租户之间的交互 , 等等。 该实施证明 Apache Pulsar 作为物联网行业的应用程序具有广阔的前景。