JFrog Xray RabbitMQ队列

本·阿米先生
2023-01-22 11:07

用户添加图片

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

RabbitMQ队列

有3种主要类型的队列:

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

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

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

工人

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

指数

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

队列

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

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

坚持

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

队列

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

  • persistExistingContent-保留现有工件的依赖关系图。消息将在这里由IndexExistingContent工作者发布。

分析

将安全数据与组件匹配

队列

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

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

警报

根据政策和观察创建违规行为,准备电子邮件和webhook。

队列

警报支持这些队列:

  • 警报-根据政策和观察创建违规行为,为新工件创建电子邮件和webhook。

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

通知

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

队列

通知-所有生成的通知。

影响分析

在db同步之后使用新的漏洞和许可证数据更新依赖关系图的过程。

队列

impactAnalysis—现有组件的新漏洞和license数据。

MDS更新

使用安全信息更新元数据服务器的过程。该信息将在通过UI/API进行搜索时公开

队列

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

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

重试

内置重试机制的工作原理如下:

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

  2. TTL过期后,消息将自动(由RabbitMQ)移动到原始队列。

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

规模

扩大员工规模可以通过两种方式完成:

  • 增加特定队列的工作线程数量

  • 添加新的x射线节点

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

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

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

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

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

配置

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

需要重新启动才能应用worker配置中的更改。

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