支持 Node.js 的 5 大云原生消息队列 (MQ)

云原生的好处,为什么我们需要它用于消息队列和可以使用 Node.js 轻松运行的前五个云原生 MQ。

每日分享最新,最流行的软件开发知识与最新行业趋势,希望大家能够一键三连,多多支持,跪求关注,点赞,留言。

消息队列 (MQ) 允许您运行分布式服务。本文将更详细地介绍 MQ。然后讨论云原生为您的应用程序提供的好处以及为什么我们需要它用于 MQ。最后,重点介绍可以使用 Node.js 轻松运行的前五个云原生 MQ。

开始:同步

在推出应用程序时,应用程序的可伸缩性模型是一个重要的考虑因素。举一个使用请求-响应模型的简单应用程序示例。您拥有三个主要组件来促进您的服务:客户端、服务器和用于处理系统数据的数据库。

支持 Node.js 的 5 大云原生消息队列 (MQ)

使用这种方法,一旦客户端将请求发送到服务器,它必须等待处理完成才能返回响应。但是,这是一个问题;它不会对只有几个随机用户的简单应用程序造成任何技术处理问题。在这里,您正在运行您的数据库可以轻松处理的同步模型。

如果您的系统开始流行怎么办?您的服务器将开始处理耗时的任务,以满足不断增长的用户群的需求。想象一下您的同步模型一次处理这些请求。在这种情况下,您的客户无法继续进行任何其他操作。打开 HTTP 连接后,在从服务器获得响应之前,您无法关闭连接。

随着服务器收到越来越多的请求,客户端将不得不等待更长的时间才能得到响应。您最终会收到积压的请求。即使客户端期望一个简单的成功消息作为响应,它也必须等待第一个请求得到处理,因为请求按照接收到的顺序被预期。53% 的移动用户放弃网站需要3 秒以上才能做出响应;您的系统范例最终会在用户期望和应用程序功能之间造成巨大差距。

介绍异步

解决此问题的最佳方法之一是创建异步通信模型。异步模型将同时执行第一个请求和任何接收到的请求的其余部分。

支持 Node.js 的 5 大云原生消息队列 (MQ)

这种方法的美妙之处在于,当客户端向服务器发送请求时,它不必等待服务器得到任何响应。它实际上可以继续执行一些其他操作。在这里,您的应用程序正在发挥其全部潜力,并且在任何给定时间可以执行的操作没有任何限制。

获取消息队列:异步方法

实现异步通信的最佳方法之一是使用消息队列 (MQ)。消息队列使客户端能够减少任务完成的等待时间,从而在此期间执行其他任务。此外,它允许服务器按照它选择的顺序执行任务。

消息队列是一种服务到服务的异步通信,用于构建高度解耦和可靠的微服务应用程序。它允许一个服务通过相互发送消息来与另一个服务通信。

消息队列使用代理进行集中数据管理,以确保服务之间的通信以可靠的方式传递。

该架构使用消息作为数据。服务器,也称为生产者,创建消息(数据)并将它们发送到集中式消息队列管理器(代理)。客户端,也称为消费者,从队列中检索消息并处理数据。

支持 Node.js 的 5 大云原生消息队列 (MQ)

这样,生产者可以发送任意数量的数据,而不必担心消费者的可用性。该应用程序现在可以使用这种基于微服务的架构来管理多个大规模任务。当客户端需要数据时,它只是随时从队列中请求消息。

用于消息队列的 Node.js

您已决定异步运行系统。感谢消息队列架构。但是话又说回来,您需要实现此架构以利用系统的功能。实现消息队列的最佳方法之一是使用 Node.js (Typescript/NestJS) 。

Node.js 是一种流行的技术,可为您的应用程序提供广泛的功能。这包括:

  • 异步/非阻塞线程执行。Node.js 允许您创建非阻塞服务器/API。每个 Node.js API 都是非阻塞的。堆栈中的后续任务在等待执行链外部的响应的同时不断运行。它的单线程异步功能使其非常适合实时通信过程。这是您构建服务器所需的确切架构。事实上,消息队列是异步的,您的应用程序可以充分发挥潜力。
  • 事件驱动。node.js 服务器是事件驱动的。它使用事件循环同时处理多个客户端。它使用其多线程池进行并发执行。这样,每次发送请求时,都会创建一个专用线程来处理该特定请求。这再次使非阻塞执行更容易。
  • 支持 Node.js 的 5 大云原生消息队列 (MQ)

    以上是 Node.js 提供的一些优势。它们使构建微服务应用程序变得更加容易和更具可扩展性。添加消息队列的好处,组合允许您创建复杂和高性能的应用程序。

    您可以使用许多消息队列与 Node.js 一起运行。但是,设置一个需要基础架构层,例如数据库、网络、服务器、操作系统、安全性等。设置所有这些元素来运行您的基础架构可能很难维护和监控。然而,它会降低您的基础架构的可移植性。一层的停机时间会极大地影响整个应用程序,因为整个基础架构紧密耦合以一起运行所有这些层。

    为了克服这些挑战,我们需要利用现代基础设施的灵活性、可扩展性和弹性的现代解决方案。非常感谢云原生计算,它允许您在云中运行和托管应用程序,以利用云计算软件交付范例的固有特征。

    走向无服务器:将消息队列作为服务运行(云原生)

    截至目前,几乎所有 IT 工具或产品都可以作为服务访问。一种允许您运行无服务器架构的交付模型。消息队列并没有留在云的潮流中。云原生旨在提供专门为正确利用云计算架构而创建的无服务器开发策略。

    无服务器架构是一种云原生开发方法,允许开发人员在不配置服务器的情况下创建应用程序或处理扩展管理。相反,此类任务由云提供商抽象和处理。这允许开发人员通过更快地发布生产就绪和容错模型来创建与供应商无关的、自动配置和高度可扩展的应用程序。

    这得益于以下事实:

  • 云原生以微服务为中心——这样,你的消息队列仍然是松耦合的。可以更新特定功能,而不会导致您的应用程序停机。
  • 它们的创建考虑了持续集成/持续交付(CI/CD) 管道。这为您的团队和成员带来了加速软件开发生命周期 (SDLC) 的概念,以便在不同级别进行协作,例如设计、开发和测试。
  • CI/CD 充满了自动化。这使您能够以最小的努力进行高影响力的更改。
  • 云原生架构是容器编排的。您不必担心平台、操作系统或运行时环境。
  • 综上所述,云原生应用的原则是:

    支持 Node.js 的 5 大云原生消息队列 (MQ)

    现在想象一下将整个消息队列架构作为服务运行。这是向前迈出的一大步,带来了好处:

  • 自动化机会使您能够专注于其他紧迫的挑战。
  • 可移植性——消息队列变得与供应商无关。容器允许您通过端口映射连接到不同的微服务组件。这样,您就可以避免供应商锁定。
  • 提高可靠性。您减少了停机时间,并且一个组件的故障不会影响相邻的服务。
  • 易于管理和扩展您的架构。
  • 语言 – 云原生消息队列旨在与现代语言和框架一起使用,例如 Node.js、Typescript、Go、Python、Rust 等。
  • 由于云原生可以使用多种框架和语言轻松实现,因此选择您想要使用的内容很容易。Node.js 是消息队列的绝佳候选者。我们已经看到 Node.js 补充了消息队列架构。

    支持 Node.js 的前 5 个云原生 MQ

    让我们深入了解 Node.js 支持的顶级云原生消息队列 (MQ)。

    1. Memphis

    Memphis是一个具有嵌入式分布式消息队列的开源实时数据处理平台。它旨在消除应用内流式传输用例的繁重任务。

    孟菲斯是云原生的。它通过为生产者-消费者范式提供实时数据处理平台而蓬勃发展。

    孟菲斯的特别之处:

  • Memphis 是为异步通信而构建的分布式消息代理
  • 它支持众多云部署平台。
  • 与其他使用主题和队列的消息代理和队列不同,孟菲斯使用站。
  • 工作站提供易于使用的消息队列。它将您从创建一个永无止境的生产者、消费者、编排、手动扩展和分散监控流中抽象出来。一个站为您处理所有这些。这就是让孟菲斯成为一个独特平台的原因。只需单击几下,即可查看如何创建电台。

    这是孟菲斯车站工作的一个基本示例:

    支持 Node.js 的 5 大云原生消息队列 (MQ)

    Memphis 非常适合云原生应用程序开发。它使用现代工具来创建开发堆栈。这些包括:

  • Docker – 允许您的应用程序利用虚拟化容器和隔离资源并大规模运行微服务。
  • Kubernetes – 它提供编排服务,让您决定如何以及在何处运行容器。
  • Terraform – 将资源定义为代码的 IaC(基础设施即代码)工具。
  • Node.js 支持。Node.js是一种流行的 JavaScript 运行时。它非常适合创建任何类型的实时应用程序和微服务。Node.js 允许您创建用于连接微服务的虚拟服务器和路由。
  • Memphis 对Node.js 和 Typescript有很好的支持。查看适用于 Node.js 和 Typescript 的 Memphis SDK 并开始创建 Producers/Consumers。Memphis 还支持其他服务器端语言,例如Go和Python,

    您是否部署了 Memphis 消息队列?选择您喜欢的环境并以前所未有的方式运行代理。您可以在以下位置运行孟菲斯:

  • Kubernetes
  • Docker-撰写
  • 云提供商
  • 2.RabbitMQ

    RabbitMQ是一个开源的分布式消息代理。由于微服务架构的兴起,每个关注点都有自己独立扩展的运行时间,RabbitMQ 是一种工具,它允许这些微服务与各种不同的协议异步通信以运行大型应用程序。

    RabbitMQ 使用高级消息队列协议(AMQP)。这允许 RabbitMQ 等中间件代理与客户端应用程序保持一致并进行有效通信。

    RabbitMQ 使用 Exchange 来管理消息。当生产者发送消息时,它不会立即注册到队列中。消息很快注册到 RabbitMQ Exchange,它使用绑定和路由键来确定消息属于哪个队列。这是 RabbitMQ 基础架构的基本示例:

    支持 Node.js 的 5 大云原生消息队列 (MQ)

    查看本指南并了解什么是 RabbitMQ 以及围绕它的重要概念。

    RabbitMQ 使用分布式部署机制。您可以以高度可用的方式设置实例。就像孟菲斯一样,RabbitMQ 是云可用的。这允许您在云中的 Kubernetes等基础架构之上运行高可用性集群。

    利用这些功能为适合开发可扩展应用程序的喜爱编程语言创建了巨大的跨语言支持。您可以使用流行的 Node.js 运行您的云支持 RabbitMQ 架构并利用其功能。

    以下是您可以使用 Node.js 轻松运行的 RabbitMQ 功能

    支持 Node.js 的 5 大云原生消息队列 (MQ)

    3. Kafka

    Kafka是一个分布式平台,用于为高性能数据管道推送事件。超过 80% 的财富 100 强组织使用 Kafka来运行他们的基础设施事件。

    这些事件是从不同的服务生成的。然后,Kafka 将这些事件流式传输并持久化到其他目标。Kafka 用于连接数百个事件源。

    支持 Node.js 的 5 大云原生消息队列 (MQ)

    卡夫卡以她的表演而闻名。作为分布式平台,在 Kafka 之上构建消息队列系统变得非常容易。查看此AZ 指南并了解 Apache Kafka 架构及其组件。

    支持 Node.js 的 5 大云原生消息队列 (MQ)

    为了构建规模和速度流事件,Kafka 具有五个核心功能。这些是:

  • Publisher – 这形成了将事件流发布到 Kafka 主题的数据源。
  • 消费者- 形成一个订阅的应用程序,从任何订阅的 Kafka 主题中获取数据。
  • Process – Kafka 使用流 API 作为处理器。这允许 Kafka 使用来自不同来源的传入事件并将传出数据流生成到一个或多个主题。
  • Connect – Kafka Connect允许您在 Apache Kafka 和其他系统之间扩展流数据。这将 Kafka 主题链接到现有应用程序,并将数据带到 Kafka 集群和其他外部来源。
  • Store – Kafka 为您的事件提供了一个主要的数据存储工具。
  • 支持 Node.js 的 5 大云原生消息队列 (MQ)

    那么是什么让卡夫卡受欢迎?

    使 Kafka 受欢迎的一些优势包括:

  • 可扩展性
  • 高吞吐量
  • 低延迟
  • 容错
  • 可靠性
  • 耐用性
  • 尽管 Kafka 很受欢迎且具有优势,但它是一个具有挑战性的基础设施,用于为本地生产设置、部署、扩展和管理。

    为了避免此类挑战,现在构建了 Kafka,并且可以将其作为云中的服务进行管理。这使云能够执行艰巨的任务,例如复杂的集群大小调整和配置、构建和维护 Kafka 基础设施。相反,当云处理繁重的工作时,您将专注于构建应用程序逻辑。这使得部署 Kafka 变得容易,而无需特定的 Kafka 基础设施管理专业知识。

    为了展示你的生产者和消费者,Kafka 支持各种编程语言。Kafka 云平台,例如Confluent Cloud,允许您使用 Node.js 构建和使用 Kafka。

    4.Strimzi

    鉴于许多消息队列技术正在利用 Kubernetes 等动态技术。我们已经看到使用云原生平台运行 Kafka 流更加容易。Strimzi为 Kafka 提供部署配置。Strimzi 允许您在 Kubernetes 上运行 Apache Kafka 集群。这允许您跨可用区和专用节点分布代理。

    Strimzi 是一个云原生计算基金会沙盒项目。BasItidges Kube 原生管理 Kafka 的广泛功能,例如集群、主题、用户、Kafka MirrorMaker 和 Kafka Connect。这样,您可以使用 NodePort、OpenShift Routes、Ingress 和负载均衡器在 Kubernetes 外部公开 Kafka。

    一旦 Kafka 在 Strimzi 提供的 Kube-native 支持上运行,您现在就可以开始使用 Node.js 来创建您的流并使用诸如KafkaJS 之类的库,这是一个适用于 Node.js 的现代 Apache Kafka 客户端。

    5.Redpanda

    Kafka 架构使用 Zookeeper 来跟踪 Kafka 代理集群。

    支持 Node.js 的 5 大云原生消息队列 (MQ)

    Redpanda是一个流数据平台,兼容 Kafka-API、无 ZooKeeper 和无 JVM。Kafka API 很棒。Redpanda 旨在让 Kafka 快速运行。Redpanda 允许您选择最适合您需求的部署选项。

    这包括:

  • 使用 Terraform 和 Ansible。
  • 为连接配置 Kubernetes Operator。
  • 它利用 Kubernetes 等基础设施的能力允许您在云上运行 Kubernetes并在 Kubernetes 网络之外访问 Redpanda。

    Redpanda 允许您使用Google Kubernetes Engine、Amazon EKS 和 DigitalOcean 等云提供商创建Kubernetes 集群并运行您的代理。

    Redpanda 与 Kafka API 兼容,允许您利用为 Kafka 创建的无数客户端库,例如Node.js 的 KafkaJS 客户端。

    查看本指南并了解如何将 Node.js 与 Redpanda 一起使用

    结论

    您可以使用许多消息队列。但是,以云原生方式运行的消息队列优于其他消息队列。它允许您以可扩展性为核心运行服务器队列。本文帮助您了解有关云原生 MQ 的更多信息以及可与 Node.js 一起使用的最佳选择。

    来源:科技狠活与软件技术

    声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2022年9月3日
    下一篇 2022年9月3日

    相关推荐