跳到元数据的末尾
进入元数据的开始

概述

Artifactory使用基于校验和的存储唯一地存储工件。

一个上传到Artifactory的文件,首先计算其SHA1校验和,然后重命名为其校验和。然后,它托管在配置的文件存储中,位于由校验和的前两个字符组成的目录结构中。例如,校验和为“ac3f5e56…”的文件将存储在目录“ac”中;校验和为“dfe12a4b…”的文件将存储在目录“df”中,依此类推。下面的示例显示了“d4”目录,其中包含两个校验和以“d4”开头的文件。

Checksum-based存储

同时,Artifactory创建一个数据库条目,将文件的校验和映射到存储库中上传文件的路径。这种存储二进制文件的方式优化了Artifactory中的许多操作,因为它们是通过简单的数据库事务实现的,而不是实际操作文件。

页面内容

重复数据删除

Artifactory只存储一次二进制文件。这就是我们所说的“一次且仅一次存储”。第一次上传文件时,Artifactory在存储文件时运行所需的校验和计算,但是,如果再次上传文件(例如,上传到不同的位置),则将上传实现为一个简单的数据库事务,该事务创建另一个记录,将文件的校验和映射到其新位置。实际上,不需要再次将文件存储在存储器中。无论文件上传了多少次,文件存储都只存储该文件的一个副本。

复制和移动文件

复制和移动文件是通过简单地添加和删除数据库引用来实现的,相应地,这些操作的性能是数据库事务的性能。

删除文件

删除文件也是一个简单的数据库事务,其中删除相应的数据库记录。文件本身不会被直接删除,即使删除了指向它的最后一个数据库条目。所谓的“孤立”文件是由Artifactory的垃圾收集进程在后台删除的。

上传、下载和复制

在将文件从一个位置移动到另一个位置之前,Artifactory会发送校验和头。如果目标文件已经存在,即使它们存在于不同的路径下,它们也不会被传输。

文件系统性能

文件系统性能大大提高,因为文件存储上的操作被实现为数据库事务,因此永远不需要在文件系统上执行写锁。

校验和搜索

通过校验和搜索文件非常快,因为Artifactory实际上是在数据库中搜索指定的校验和。

灵活的布局

由于数据库是文件存储和显示布局之间的间接层,所以可以支持任何布局,无论是标准的打包格式,如Maven1、Maven2、npm、NuGet等,还是任何自定义布局。


sha - 256支持

从5.5版开始,Artifactory原生支持SHA-256。工件的SHA-256校验和是在部署到Artifactory时计算的,并作为数据库的一部分维护在持久存储中。的设置项SHA256校验和REST API端点(将工件的SHA-256校验和设置为其属性之一)仍然受到向后兼容性的支持,但是,该端点最终将被弃用。

Artifactory对SHA-256校验和的支持功能齐全,体现在以下几个方面:

在升级到5.5版本(或更高版本)之后,Artifactory将完全能够利用工件的SHA-256校验和来实现上述任何特性。

充分利用Artifactory对SHA256的原生支持

上传的新工件将自动计算其SHA-256校验和,但是,在升级之前已经托管在Artifactory中的工件将不会在数据库中有其SHA-256校验和。

为了充分利用Artifactory的SHA-256功能,您需要运行一个进程迁移Artifactory的数据库确保每个工件的记录都包含其SHA-256校验和。

将数据库迁移到包含SHA-256

迁移数据库可能是一项资源密集型操作

根据数据库的大小,这个过程可能是资源密集型的。为减轻系统上可能的负载,可以使用下面列出的几个系统属性或REST api.我们强烈建议通读整个流程迁移过程,以确保您的系统具有最佳配置。

迁移是通过在Artifactory的属性集artifactory.system.properties文件如下面所述,或使用启动SHA256迁移任务而且停止SHA256迁移任务REST API端点,本质上做以下工作:

  • 搜索所有没有SHA-256值的数据库记录。
  • 对于每个这样的记录,在数据库中找到具有相同SHA1校验和值的所有其他记录
    • 如果它们中的任何一个已经计算了SHA-256,那么使用它来更新所有其他的
    • 如果它们中没有一个已经计算过SHA-256,那么计算它,然后使用它来更新所有其他的SHA-256
  • 如果没有其他SHA1值相同的记录,则计算SHA-256

首先运行垃圾收集以优化迁移过程

一旦所有数据库条目都填充了SHA-256值,迁移过程就完成了。因为您的数据库可能包含已删除的工件的条目,但还没有被物理删除垃圾收集,我们强烈建议在调用数据库迁移之前手动调用垃圾收集。通过减少迁移产生的下载数量,删除已删除的构件可以极大地提高迁移的性能和总运行时间。

配置迁移流程

迁移过程可以通过以下方式配置系统属性,或使用启动SHA256迁移任务而且停止SHA256迁移任务REST API端点

默认情况下,迁移将在主节点上运行forceRunOnNodeId属性,则可以将其配置为在辅助节点上运行。

属性名
函数

artifactory.sha2.migration.job.enabled

[默认值:false]

当为true时,当节点重新启动时,将调用将数据库迁移到包含所有工件的SHA-256校验和的进程。

artifactory.sha2.migration.job.forceRunOnNodeId

[默认值:null]

仅对HA安装有效。

默认情况下,迁移过程运行在主节点上。若要在任何其他节点上运行该进程,请将此值设置为相应节点的ID(在node.id属性。美元ARTIFACTORY_HOME / etc / ha-node.properties文件)。

在专用节点上运行迁移

这使您可以选择指定一个特定的节点来运行迁移,并分配额外的资源以使其更快地完成迁移过程。2022世界杯阿根廷预选赛赛程

在主节点和相应的辅助节点上设置该属性

要在辅助节点上运行迁移过程,您需要在主节点和相应的辅助节点上都设置此属性.Artifactory仍然只在相应的辅助节点上运行进程。

artifactory.migration.job.dbQueryLimit

[默认值:100]

指定每次迁移作业查询数据库中缺少SHA-256值的项时应检索的行数。

artifactory.migration.job.batchSize

[默认值:10]

工件以新的SHA-256值批量并发更新,然后启动睡眠周期。这个属性是指定每个批处理中的工件数量。

artifactory.sha2.migration.job.queue.workers

[默认值:2]

指定应执行实际工件更新的并发线程数。

为了计算其SHA-256校验和,每个并发工件更新都可能导致下载。但是,工件只会下载一次,即第一次找到没有SHA-256值的数据库条目。相同工件的后续数据库条目(因此具有相同的SHA1值)将重用已经计算的SHA-256值。

artifactory.migration.job.sleepIntervalMillis

(默认值:5000毫秒

指定在每批更新之后启动的睡眠周期的持续时间。


下面是一个你可以粘贴到你的artifact .system.properties的示例代码片段,根据I/O和CPU利用率适当调整worker的数量:

示例artifactory.system.properties片段
##SHA2迁移块。启用= true artifactory.sha2.migration.job.queue.workers = 5

重新启动要求

要使对迁移配置的更改生效,您需要重新启动将运行它的实例(在HA安装的情况下是节点)。设置上面指定的默认值是为了在迁移过程中保持系统的最佳性能。为了加快迁移过程,您可以调整这些值(记住硬件限制),但是这可能会以系统性能为代价。

监控迁移过程

根据存储的大小和已配置的迁移参数,迁移过程可能需要很长时间。为了便于监控进程,状态和错误消息被打印到一个专用的日志文件中,ARTIFACTORY_HOME /日志/ sha256_migration.log。此外,一些消息(进程启动、启动错误)也被记录在ARTIFACTORY_HOME /日志/ artifactory.log文件。

SHA256后迁移

虽然这不是强制性的,但建议在迁移完成后删除所有与SHA256相关的系统属性并重新启动。

  • 没有标签