管理手工文件存储的最佳实践

作者:Yann Chaysinh

介绍

作为二进制存储库管理器JFrog Artifactory是CI/CD过程中的核心部分。它是二进制文件的守门人:1。1 .保护访问权限,并对存储库应用读、写和删除等权限;利用你的二进制的生命周期通过元数据的应用和推广系统的使用,通过实现人工集群来确保数据的可用性。

在这种高可用性上下文中,您还将依赖于高可用性负载平衡器、代理、数据库和存储解决方案。Artifactory提供了可以与任何类型的存储解决方案集成的高级功能。

>了解更多关于你可以从Artifactory获得的好处。

本白皮书介绍了Artifactory如何存储和管理二进制文件,为您提供的存储功能包括:

  • 基于校验和的存储
  • 内部缓存机制
  • 存储配置选项
  • 备份和恢复策略

存储优化

使用基于校验和的存储管理数据

Artifactory的最佳设计利用基于校验和的存储,它使用两个组件:filestore数据库。每个二进制文件位于文件存储库(默认为本地磁盘),并由其校验和(sha1),包含所有元数据(例如包元数据(工件名称、大小、创建日期、回购位置、sha256值和签名)保存在数据库中。

校验和方法支持工件的唯一标识,而不需要在文件存储库中重复。远程团队可以从两个不同的存储库中使用存储在文件存储库中的相同依赖项,这些存储库具有从数据库引用的不同元数据。这样可以防止重复并减少存储消耗。

StorageWP_checksum_based_storage

将二进制文件与其元数据分离,提供了如何管理数据的灵活性。

  • 将工件移动或复制到不同的路径(例如,在促销活动)只会影响数据库和SQL查询,而不会影响文件存储。这是因为这只会更改工件元数据,而工件元数据单独存储在数据库中。

数据库服务器的大小可以按照以下比例进行调整:文件存储的1/100。这不是一个严格的公式,它是为了给你一个初始的大小。确保监控数据库存储。

在调整DB存储时,请记住,在人工升级期间,可能会修改数据库模式并创建临时表,这将增加所需的DB存储。

默认情况下,Artifactory与Apache Derby数据库一起安装。可以随时将该数据库迁移到另一个关系数据库。只要依赖于受支持的数据库和版本,也可以使用数据库即服务。

>了解更多关于支持的数据库和版本

缓存二进制文件以获得更好的性能

Artifactory在没有任何活动缓存的情况下将所有工件存储在本地。有两种类型的缓存可以在Artifactory中启用:Cache-fs最终

  1. Cache-fs:读缓冲区,用于优化Artifactory和远程存储(例如NAS或云存储)之间的流量。这个“最近最少使用”(LRU)缓存将托管最近上传和下载的工件。启用它可以减少对网络存储的请求数量,从而减少响应时间。由于可以设置最大大小,因此此缓存中的构件将根据其最后下载日期或创建/修改日期“旋转”。
    *可用于专业和企业许可证

    在并发连接请求尚未缓存的二进制文件的情况下,cache-fs将只让第一个连接从远程服务器下载二进制文件,而其他连接将开始流式传输已经下载的字节。
  2. 最终:写缓冲区,用于在使用慢速存储和/或远程存储时优化上传过程中的减速。默认情况下,所有依赖对象存储(如AWS S3、Azure Blob storage等)的Artifactory存储模板都启用此缓冲区。这允许实现异步上传,以便不必等待工件上传到远程存储并立即使用它。一旦工件上传到存储并且在Artifactory中可用,它将从最终缓存中删除。与cache-fs不同,没有可以调优的缓存大小限制。承载此缓存的磁盘大小将设置限制,并且应该被监视。

建议将这些缓存安装在可用IOPS最高、延迟较低的磁盘上。

调优缓存

Cache-fs:它的位置和它的最大大小应该根据你的企业需要进行调整,尤其是后者,因为它将指定何时缓存将旋转,你可能希望确保频繁使用的二进制文件被缓存。例如,如果您的一个用例是:

  • 使用Docker镜像,您可能希望缓存属于基础图像的所有图层
  • 快速配置您的linux服务器,您可能希望缓存最新的操作系统软件包(debian, rpm)
  • 加快构建速度,您可能希望缓存最常用的开发依赖项

启用后,此缓存默认设置为5gb。

使用人工查询语言(AQL)
使用AQL查询获取最近下载和上传的工件列表,该查询将返回工件列表及其大小。使用脚本添加工件大小并获得估算。


最终缓存:
默认情况下启用binarystore.xml对于以下模板如s3-storage-v3, azure-blob-storage, google-storage,Cluster-s3-storage-v3、cluster-azure-blob-storage和cluster-google-storage。它的位置,$ ARTIFACTORY_HOME /数据/最终而且它的大小无法调整。由于最终缓存将把所有要上传到对象存储的二进制文件排队,因此请确保为最终缓存分配的存储空间高于最大的批量上传。
这可能是您最大的工件的大小,或者您的文件中已发布的工件的大小建立信息
增加专门用于上传的线程数量也可以作为调优的一部分。

每次调优都会对Artifactory实例产生直接影响。了解更多关于如何监控它们的信息。同时,了解更多关于牛蛙Artifactory的开源监控工具。

存储配置选项

在软件工程中,将数据层和配置层与应用层分离是一种常见的最佳实践。将数据和配置存储在服务主机外部的不同位置将是有益的,特别是从监控、升级、备份/恢复和可伸缩性等操作方面。

根据您的组织需求,有几种不同的文件存储库配置可供选择。本文档指的是负责存储和基础设施的IT团队。介绍Artifactory中的4种存储配置类型:

  1. 自管理文件和块存储(本地存储、NAS、SAN)
  2. 云文件存储(例如,AWS EBS或EFS、Azure磁盘或文件)
  3. 对象存储(例如,AWS S3或Azure Blob存储)
  4. 数据库存储
类中指定的模板在Artifactory中定义文件存储库配置binarystore.xml
有几个模板可用并且完全可配置。

1.自管理文件和块存储(本地存储、NAS、SAN)

注意:NFS版本*和4。支持*。
在Artifactory High Available集群配置中,所有成员共享相同的文件存储库,并发访问在文件系统级别进行管理。

用例1:没有基础结构限制

您的IT团队将通过高可用性的NAS或SAN解决方案管理二进制文件的可用性,并且不受NFS挂载点或SAN卷的大小限制。

推荐模板: filesystem和cache-fs

在Artifactory独立配置中,文件系统模板可以通过引用挂载点或本地文件夹(指向SAN卷)作为二进制文件的位置来满足您的需求。选择cache-fs模板将启用读缓存(请参阅“缓存”一节中的cache-fs),当经常下载大型二进制文件(从数百MB到GB)时,它可以带来很大的好处。二进制文件将保存在本地,到达远程存储的网络时间将被完全抑制,以供将来的请求使用。

文件系统模板

文件系统模板

Cache-fs模板

在Artifactory集群配置中,所有节点将使用相同的挂载点。

Cache-fs模板

存储扩展过程可以通过扩展现有卷并实际为NFS挂载或卷分配更多空间来垂直(向上扩展)实现。

用例2:对存储大小或跨站点存储可用性的限制

您的IT团队将管理二进制文件的可用性,但对磁盘大小有限制,这会影响您扩展专用于Artifactory的存储的方式。

推荐模板:双分片或冗余分片

了解更多>关于文件存储分片

这两个模板之间的主要区别在于冗余参数,即每个二进制文件在分片之间分布的副本数量。如果您的IT团队保证冗余存储(例如高可用性NAS),则不需要Artifactory来管理冗余,您可以使用冗余= 1的“双分片”模板。双分片模板实现了文件存储分片,其中每个分片代表全局文件存储的一部分,其中一个分片可以是一个挂载点(NAS或SAN)。这允许您通过添加更多的分片来扩展存储。

如前所述,模板是可调的,参数更改如下:

  • 分片数量(默认设置为2个分片)
  • 冗余——每个二进制文件的副本数量分布在分片之间
  • 写机制:每个shard的空闲空间,每个shard的空闲空间百分比或轮循。
    • 设置轮流捡取(默认):使用轮询策略将二进制文件写入每个挂载。
    • 空闲空间:二进制文件被写入具有最大可用自由空间绝对容量的挂载。
    • percentageFreeSpace:将二进制文件以可用空间百分比写入挂载。

这些模板还为每个Artifactory实例启用读缓存(请参阅“缓存”一节中的cache-fs)。在集群配置中,这些缓存不同步。此配置既可以应用于独立部署,也可以应用于集群。所有的挂载应该对每个工件实例可用。

扩展过程可以通过纵向增加分片大小来完成,也可以通过横向添加更多分片来完成。

独立的:冗余= 2,Mount (Shard) = 2, LenientLimit = 1

独立的

冗余必须小于或等于系统中用于Artifactory的挂载数量。如果没有达到冗余指定的写次数(例如挂载失败),WRITE事务将失败。

“宽大限制”是验证“WRITE”事务/上传过程的成功写入的最小数量。它的默认值是1,如果设置为0,Artifactory将认为它等于冗余参数。

一旦二进制文件的副本数量达到“宽大限制”或“冗余”所定义的要求,就会提交WRITE事务。为了优化传输,Write事务依赖于并发流将二进制文件复制到多个分片上。

在这种情况下,a恢复系统将在每次垃圾收集器执行后重新应用文件存储中的冗余。

maxBalancingRunTime参数定义每个垃圾收集器运行后恢复系统的持续时间。

优化存储Rest API允许您手动应用新的冗余或在分片故障后重新应用当前的冗余。在这两种情况下,冗余必须大于1。
该进程将在下一次垃圾收集器运行后执行。

Artifactory不知道哪些分片保存了您的二进制文件,这允许您自由地将它们从一个分片移动到另一个分片。

独立的:冗余=1、Mount (Shard) = 2, LenientLimit = 1

集群:冗余= 1,Mount (Shard) = 2, LenientLimit = 1

集群

冗余度越高,平均检索时间(“READ”)就越低。
然而,更高的冗余将增加工件上传(“WRITE”事务)的持续时间以及分片的数量。冗余级别还影响Artifactory所需的总存储空间。

默认情况下,文件存储分片配置为在单个区域中提供分片,但您可以通过将分片分配给特定区域将其扩展到多个分区。使用此实现,您还可以覆盖IT团队不管理跨数据中心/站点/区域的冗余的用例。

独立的:冗余= 2,Mount (Shard) = 4, LenientLimit = 1

独立的

集群:冗余= 2,Mount (Shard) = 4, LenientLimit = 1

集群

此配置既可以应用于独立部署,也可以应用于集群。所有的挂载应该对所有Artifactory节点可用。

警告:注意您的区域之间的延迟,因为写入二进制文件的副本将是单个事务。

警告:请确保您的网络拓扑符合我们的建议时设置您的人工HA集群

用例3:对存储管理的限制

您的IT团队对每台服务器的挂载点数量有限制,或者没有为您的Artifactory提供正确的存储SLA,而您更喜欢处理数据的可用性。

推荐模板: filesystem、cache-fs和cluster-fs

在独立配置中,您将依赖于文件系统o或cache-fs。
要了解更多细节,您可以参考用例1。

在Artifactory集群配置中,可以使用cluster-fs模板,并且每个Artifactory实例都有自己的本地文件存储(也称为shard),它将指向NFS挂载、挂载的SAN卷甚至本地存储。Artifactory集群将管理这个由多个分片组成的“超级文件存储”。cache-fs将在每个Artifactory实例上被激活。默认情况下,此模板使用2的冗余,这意味着在2节点HA集群中,每个分片将包含完整的文件存储。这保证了站点宕机的可能性不会受到影响。
扩展过程可以垂直地通过增加磁盘大小来完成,也可以水平地通过向集群添加更多Artifactory节点来完成。

集群:冗余= 2,Mount (Shard) = 2(附加磁盘上的文件存储),LenientLimit = 1

Datacenter1

Datacenter1_2

警告:请确保您的网络拓扑符合我们的建议时设置您的人工HA集群
分片集群提供商的优化继承分片提供者,由文件存储分片使用,例如宽大限制和并发流将二进制文件复制到多个分片。
优化存储Rest API允许您手动应用新的冗余或在分片故障后重新应用当前的冗余。在这两种情况下,冗余必须大于1。

该进程将在下一次垃圾收集器运行后执行。

maxBalancingRunTime参数定义每个垃圾收集器运行后恢复系统的持续时间。

集群:冗余= 2,Mount (Shard) = 2(远程存储上的文件存储),LenientLimit = 1

Datacenter1

冗余度越高,平均检索时间(“READ”)就越低。
然而,更高的冗余将增加工件上传(“WRITE”事务)的持续时间以及分片的数量。冗余级别还影响Artifactory所需的总存储空间。

cluster-fs模板不支持多分区。
cluster-fs模板不支持每个Artifactory实例有多个挂载点。

2.云文件存储

人工文件存储也可以集成到云环境中,与您在自己的数据中心中集成的方式相同。由于目的是委托硬件维护和二进制文件的可用性,因此您可能希望从传统的文件存储切换到同样支持的对象存储(请参阅下一节)。本节将介绍在云环境中坚持使用文件存储的情况。

推荐模板:cache-fs、cluster-fs

一般的最佳实践既可以应用于本地环境,也可以应用于云环境。

启用cache-fs,并根据您的需求和预算将其安装在具有适当IOPS的磁盘上。如果读缓存对您的用例至关重要,请将其存储在持久磁盘中。您的SLA将判断您是否可以在性能和弹性之间进行权衡。

主要的云提供商也提供自动扩展的共享磁盘(用于AWS的EFS、Azure文件、Google云文件存储),你可以在其中存储二进制文件。尽管它们提供了良好的性能和可伸缩性,但它们通常比管理持久磁盘(AWS的EBS、Azure托管磁盘、Google持久磁盘)或使用对象存储要昂贵得多

使用Amazon弹性文件系统(EFS)和人工HA
在使用AWS EFS之前,阅读更多关于爆破模式如何影响你的Artifactory性能并推荐了最佳实践。

2.对象存储

推荐模板:cluster-s3-storage-v3 cluster-azure-blob-storage和cluster-google-storage。

随着云提供商的出现,对象存储得到了普及,它可以成为IT团队轻松将存储容量扩展到不同数据中心的另一种解决方案。Artifactory也可以依赖于这种类型的存储,并实现特定的功能来完全支持它,比如读/写的重试机制、读缓存和冗余的“写缓存”(参见缓存部分),以减少远程存储的延迟,并支持异步上传。有几个文件存储模板可用于特定的云提供商和任何支持S3协议的对象存储。

下图解释了这些模板如何利用缓存来防止数据丢失并优化上传过程。写/最终缓存依赖于sharding-cluster提供者,由cluster-fs模板(参见P12)使用,用于保证上传到对象存储的二进制文件的可用性。

集群:冗余= 3(最终缓存),LenientLimit = 2(最终缓存)

存储WP对象存储

写/最终缓存是冗余的,读缓存/cache-fs不是。

写/最终缓存依赖于与cluster-fs相同的机制sharding-cluster提供者)以确保二进制文件在上传到对象存储过程中的可用性。这是通过将二进制文件的副本分散到多个最终缓存(冗余参数)来实现的。宽大限制是另一个参数,它指定为验证“WRITE”事务而执行的最小成功写操作。

如果上传到对象存储失败,将触发重审机制,并在最终缓存上进行连续扫描。当对象存储不可用时,Artifactory将使用cache-fs作为二进制文件的“源”。请记住cache-fs有一个最大大小,并且只保留最近下载/上传的二进制文件。

每个“集群”模板都有一个“无集群”实现,其中最终的缓存不冗余/同步。

“集群”模板名称 “无集群”模板名称
cluster-s3-storage-v3 s3-storage-v3
cluster-azure-storage azure存储
cluster-google-storage google storage

这些“无集群”模板最初覆盖独立配置。在HA集群配置中,最终缓存必须是冗余的,以防止任何二进制丢失。这种丢失可能发生在中间阶段,即Artifactory节点在其缓存中完成了二进制文件的存储,并开始将其上传到对象存储,并且在此过程中它会下降。避免这种情况的最简单解决方案是依赖共享存储。对于“集群”模板,Artifactory通过设置冗余参数将相同二进制文件的副本分散到多个最终缓存来完全管理这种情况。

4.数据库

默认情况下,Artifactory将二进制文件与其元数据分开。二进制文件存储在文件存储库中,它们的元数据存储在数据库中。虽然可以将二进制文件作为BLOB存储在数据库中,但不建议这样做,因为数据库在存储大文件时存在限制,这会导致性能下降并对操作成本产生负面影响。

数据恢复策略

回收站应该是数据恢复的第一个选项,因为默认情况下,任何删除的工件都会在那里结束。您可以修改垃圾桶的保留期,将其设置为14天。注意,在进行存储大小调整时,这应该作为整体存储分配的一部分加以考虑。

您选择的数据恢复将取决于文件存储库的大小、Artifactory的恢复点目标和恢复时间目标要求。

  • 1TB以下的文件存储没有使用对象存储:
    您可以使用Artifactory内置备份系统,该系统将聚合二进制文件、它们的元数据和Artifactory主机服务器上的一般配置。在集群设置中,备份将由执行备份任务的节点(默认情况下是主节点)生成。
  • 1TB以下的文件存储使用对象存储或1TB以上的文件存储是否使用对象存储:
    内置备份可能不尊重您关于RTO的SLA,建议基于与文件存储备份同步的数据库备份/快照管理备份策略,这可能取决于服务(例如S3版本)或第三方it工具/服务。记得备份配置文件夹。

默认情况下,备份文件夹将保存在本地$ARTIFACTORY_HOME/backup中。确保存储空间至少比当前文件存储空间大3倍,因为备份不会受益于校验和优化,并且将包含存储在数据库中的所有元数据。您还可以将其存储到特定的卷(专用磁盘)中,以确保在空间不足的情况下,这不会影响Artifactory。

如果您决定在共享挂载上执行备份,请验证磁盘是否具有尽可能高的IOPS和低延迟(同一数据中心中的远程存储)。

为了减少RPO,您还需要依赖一个灾难恢复/镜像站点,它可以是被动的(冷DR)来重新加载备份,也可以是活动的(可以利用数据库和存储复制)。

了解更多>关于管理备份和灾难恢复的最佳实践。

结论

Artifactory是一个优化的二进制管理器,它专注于以最有效的方式管理、存储和检索二进制文件,这要归功于它基于校验和的存储和读写缓存。在本白皮书中,我们介绍了基于基础设施和存储需求的不同存储配置。作为二进制文件的来源,应该基于您自己的SLA实现备份和恢复策略。

本白皮书旨在帮助您根据需要更好地理解Artifactory存储设置和配置。希望它将允许您使用Artifactory作为二进制文件的主要来源,并充分利用它的潜力。

要么释放,要么死亡