JFrog x射线RabbitMQ队列

Snir Ben Ami
2023-01-22 11:07

用户添加图片

Xray使用RabbitMQ管理异步操作。
本文档描述了主队列和Xray使用它们的方式。

RabbitMQ队列

队列主要有3种类型:

  • 新内容—没有后缀,例如Index。这种类型的队列负责与添加到系统中的新内容相关的事件。例如,将一个新的Artifact上传到存储库,标记为索引,将在Index队列中创建一条消息。

  • 现有内容-包含' ExistingContent '后缀-例如,IndexExistingContent。这种类型的队列负责系统中已经存在的内容。例如,重新索引存储库将向此队列发送消息。

  • 重试-失败的消息将被发送到这个队列,并将在那里停留一个TTL。一旦TTL结束,消息将返回到原始队列。请参见重试部分。

工人

每个队列都有工作者,它们是队列的消费者。配置是应用程序的每个节点。
例如,如果系统配置了10个Index worker,并且有3个HA节点,那么系统将有30个消费者用于Index队列。

指数

从JFrog Artifactory下载并创建组件图。

队列

  • 指数-新的工件索引。将影响新构建、工件和发布包的索引。

  • indexExistingContent-通过重新索引存储库触发的现有工件索引。

坚持

将依赖关系图持久化到Postgres数据库。

队列

  • 坚持-持久化新工件的依赖关系图。来自Index worker的消息将在这里发布。将影响新构建、工件和发布包的索引。还负责删除事件后删除未使用的依赖关系图。

  • persistExistingContent—持久化现有工件的依赖关系图。消息将由IndexExistingContent工作者在这里发布。

分析

将安全数据匹配到组件

队列

  • 分析—分析新构件的依赖关系图,匹配安全漏洞。

  • analysisExistingContent—分析现有工件的依赖关系图,匹配安全漏洞。可以通过重新扫描手表和重新索引触发。

警报

根据策略和监视创建违规行为,准备电子邮件和网络链接。

队列

警报支持以下队列:

  • 警报-根据政策和手表创建违规,创建电子邮件和网络挂钩-为新的工件。

  • alertImpactAnalysis-对于现有工件,由影响分析触发(见下文)。

通知

执行实际发送电子邮件和webhook。

队列

通知—所有生成的通知。

影响分析

在DB-sync之后用新的漏洞和许可数据更新依赖关系图的过程。

队列

impactAnalysis-现有组件的新漏洞和许可证数据。

MDS更新

使用安全信息更新元数据服务器的过程。这些信息将在通过UI/API搜索时暴露出来

队列

  • mdsUpdate-通过REST向元数据服务(与Artifactory一起安装)发送更新,用于新部署的工件。

  • mdsUpdateExistingContent-通过REST向元数据服务(与Artifactory一起安装)发送现有工件的更新。可以由其他' ExistingContent '工作者触发。此队列的大部分负载来自Impact Analysis流。

重试

内置的重试机制如下:

  1. 带有可恢复错误(如网络错误、磁盘限制等)的失败消息将被写入相应的重试队列,TTL较小(从6秒开始)。

  2. 当TTL过期后,消息会自动(由RabbitMQ)移动到原来的队列中。

  3. 当再次出现错误时,消息将被传输到具有2*(原始TTL)的重试队列。如果TTL大于7天,则该消息将被视为失败,并保存在失败表中(也在' System Messages '下的UI中显示)。

规模

可以通过两种方式来扩大员工数量:

  • 增加特定队列的工作人员数量

  • 添加新的x射线节点

向外/向上扩展的注意事项:

伸缩可能会影响以下外部资源:2022世界杯阿根廷预选赛赛程

  • PostgreSQL -可能会影响连接数,CPU,磁盘和内存的使用

  • Artifactory和元数据服务器——增加MdsUpdate工作者的数量,会导致Artifactory和元数据服务器上的负载显著增加。

  • RabbitMQ -增加worker的数量通常不会对RabbitMQ产生不良影响。通常,当队列变得非常大时,RabbitMQ会消耗大量的资源。2022世界杯阿根廷预选赛赛程

配置

所有队列的工作者都可以通过REST API进行配置。一个例外是MDS工作线程,它只能在system.yaml,并且没有单独的配置MdsUpdateExistingContent而且MdsUpdate

为了在工作者配置中应用更改,需要重新启动。

在未来,我们计划将所有工人的配置转移到system.yaml