微服务异步通信和消息传递| JFrog Xray

Microservices改变了我们构建应用程序的方式。软件设计已经从大型单片应用(不能真正适应变化和改进)转变为小型独立流程基础设施的集合,这更适合适应当今敏捷世界的变化。

微服务如何通信?

微服务彼此解耦,但仍然必须能够通信。当涉及到管理微服务基础设施中的通信时,最流行的方法之一是异步通信。

虽然同步通信需要在转移到其他任务之前等待响应,异步通信使我们能够灵活地在微服务之间发送消息并继续处理其他任务。这种方法还增加了每个微服务的独立性——在微服务中断的情况下,其他服务不会受到影响,因为任务将被暂停,直到失败的微服务重新启动并运行。异步通信的最佳例子之一是电子邮件。电子邮件发送后,发送者可以继续处理其他事情,而接收者可以阅读电子邮件,知道发送者不依赖于回复来继续他们的工作。

实现异步通信可以通过使用消息队列—在目标服务忙或不可用时,用于存放所有等待消息的临时存储。消息队列的基本架构非常简单,有生产者和消费者。生产者是创建消息并将其交付给队列的应用程序/服务。消费者连接到队列并获取要处理的消息。

为了实现消息队列,我们需要一个消息代理——一个从生产者接收消息并将其传递给消费者的服务。消息不会直接发布到队列。相反,生产者将消息发送到交换器,交换器将消息路由到不同的队列。消息一直留在队列中,直到使用者处理它们并将它们从队列中移除。

JFrog x射线示例

微服务通信和消息传递

JFrog x光有2个主要工作流程:

在Xray中,微服务之间的所有内部通信都是异步的,并使用RabbitMQ消息代理进行管理。

请注意已经和JFrog x射线公司合作了吗?阅读本文在JFrog Xray中了解更多关于RabbitMQ的信息。

JFrog Xray如何使用RabbitMQ

x射线有多种关键作用,如扫描、影响分析和数据库同步。这些角色需要由不同的x射线服务同时处理流。Xray使用RabbitMQ来管理这些不同的流,同时跟踪服务之间的通信。

RabbitMQ在Xray中管理3种主要类型的队列:

  • 新内容-负责与系统新增内容相关的事件。例如,将一个新工件上传到标记为索引->的存储库将在Index队列中创建一条消息。
  • 现有内容-对系统中已经存在的内容负责。例如,重新索引存储库将向此队列发送消息。
  • 重试-失败的消息将被发送到此队列,并在此队列中停留一段时间TTL
    一旦TTL过期,消息将返回到原始队列。

队列名称由服务名称和队列类型定义(新的内容队列名称没有任何后缀)。例如,' indexExistingContent '和' alertRetry ',而' persist '没有后缀。这个命名约定在调试RabbitMQ队列时很有用,因为队列名称是可预测的。

JFrog x射线队列在x射线的主要流程

JFrog x射线队列在x射线的主要流程

这种将工作流分离到独立队列的方法有助于减少消息队列上的负载,并提供更流畅的功能。

每一个x光microservice有一个可配置的消费者数量,称为“工人”。可以通过增加特定队列的工作线程数量或向集群添加新的Xray实例来扩展工作线程。为每个服务单独调优worker的数量可以优化Xray的性能,方法是为不那么密集的服务分配更少的worker,并在更需要的地方利用实例资源。2022世界杯阿根廷预选赛赛程

尝试一下

JFrog Xray使用RabbitMQ消息代理维护其内部微服务异步通信,从而提供了更好的健壮性和可伸缩性。

想要体验这种基于独立和异步通信的软件,同时改进您的DevSecOps?开始使用x射线免费>