跳到元数据的末尾
转到元数据的开始

概述

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。我们强烈建议您通读整个流程迁移过程,以确保系统的最佳配置。

通过a配置迁移Artifactory的属性集artifactory.system.properties文件如下所述,或使用启动SHA256迁移任务停止SHA256迁移任务REST API端点,本质上,做以下事情:

  • 搜索没有SHA-256值的所有数据库记录。
  • 对于每个这样的记录,在数据库中查找具有相同SHA1校验和值的所有其他记录
    • 如果其中任何一个已经计算出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毫秒]

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


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

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

重新启动要求

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

监控迁移过程

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

SHA256后迁移

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

  • 没有标签