管理Artifactory数据库的最佳实践

如何监视您的Artifactory数据库并提高性能

作者:Batel Tova和Eran Blumenthal

介绍

JFrog Artifactory的一个关键特性是基于存储的校验和的许多方面进行优化的惟一工件存储库管理.这是通过将所需的工件元数据存储在专用数据库中,并映射到其物理存储(NAS/SAN/文件系统/Blob存储/等等)来实现的。这种关系包含了两者之间连接和通信的重要性,并规定了数据库资源的可用性。2022世界杯阿根廷预选赛赛程例如,为了防止诸如请求响应时间较慢(GET、搜索、某些API调用,甚至UI慢)、断开连接、连接池耗尽、超时,以及在某些情况下节点同步问题(因为Artifactory High Availability节点通过数据库进行同步)等问题,Artifactory和数据库之间稳定且快速的连接是很重要的。

这份白皮书提供了一个基础理解和管理Artifactory使用的数据库,包括设置、优化配置和大规模工作的调优。

每个二进制文件都位于文件存储中(默认情况下是本地磁盘),并通过校验和(sha1)进行标识,所有元数据(例如包元数据、工件名称、大小、创建日期、回购位置、sha256值和签名)都保存在数据库中。

了解更多>关于管理Artifactory文件存储的最佳实践

什么是Artifactory数据库?

让我们首先看一下Artifactory与其数据库之间的关系。如前所述,Artifactory利用基于校验和的存储。这意味着每个二进制文件都根据其校验和在文件系统上存储和重命名,一次且仅一次。为了支持这一点,Artifactory使用数据库将由校验和标识的文件的逻辑表示之间所需的引用映射到虚拟文件系统中的位置。

Artifactory使用基于校验和的存储

除了支持基于校验和的存储之外,Artifactory数据库还包含其他信息,包括:

  • 属性- - - - - -键:值条目,可用工件元数据的一部分
  • 安全实体-用户、组、权限目标等
  • 文件校验和- md5、SHA1、SHA2
  • 档案索引-内部结构映射
  • 文件数据-创建/修改日期,大小,下载计数,部署器等

将这些信息存储在数据库中意味着所有Artifactory请求都转换为数据库查询。例如,对Artifactory的一个REST API调用可以转换为6个数据库查询;Artifactory将数据库用于标准的OLTP使用、短寿命和非常高效的事务。从上传/下载请求到最复杂的请求都是如此AQL查询.Artifactory还在数据库中保存与应用程序相关的内容。这包括安全性、一般配置和诸如存储的信息细节。

>了解更多关于JFrog平台资源2022世界杯阿根廷预选赛赛程

初步考虑

下面的列表包括在使用和监视Artifactory数据库时的重要注意事项。

  • 确保足够的资源2022世界杯阿根廷预选赛赛程用于您的数据库,包括计算、存储和网络。
  • 建立备份和恢复程序提前保护你的数据库[1]
  • 计划定期监控和调优提前为您的系统
  • 建立故障排除和支持可用性
  • 创建容灾计划

在考虑基础设施时,最常见的一个问题是,是否建议将Artifactory数据库安装在专用服务器上,还是与其他应用程序共享它。虽然这取决于您组织的需求,但重要的是要考虑Artifactory和数据库之间的持续通信,在大多数情况下,这将导致数据库的高利用率。

数据库连接

目前Artifactory使用JDBC查询.JDBC是一个Java API,它允许您连接数据库并执行查询。JDBC API使用JDBC驱动程序连接数据库,如下图所示。

数据库连接

可配置参数

违约

对于每个服务,默认配置的并发数据库连接数为100。这转换为来自Artifactory的300个开放数据库连接;100用于Artifactory应用程序,100用于访问服务还有100数据库锁定机制.Artifactory可以容纳的空闲数据库连接的最大数量是10。

参数

方法可以修改空闲连接数和数据库连接数system.yaml(适用于Artifactory版本7.x)和db.properties文件(适用于Artifactory版本6.x),使用以下参数:

pool.max.idle =< Number_Of_Idle_Connections >pool.max.active =< Number_Of_Connections >

超时

将返回以下异常,并将显示在artifactory.log,以防Artifactory未能预约连接。

无法为事务打开JDBC连接;org.apache.tomcat.jdbc. Pool . pool排气dexception: [art-exec-672866] Timeout: Pool empty。无法在120秒内获取连接,没有可用的[size:100;忙:100;空闲状态:0;lastwait: 120000)。
重要提示:确保监视可用连接的等待时间。几秒钟的等待会导致更高的响应时间,应该避免。

数据库性能的因素

估计并发数据库连接的数量和大小需要考虑Artifactory的日常使用情况。

本节描述了一些你需要考虑的影响数据库性能的常见因素,包括:

  • AQL查询
  • 索引文件条目
  • 数据库的大小
  • 每个工件的总属性
  • IOPS价值
  • 数据库资源2022世界杯阿根廷预选赛赛程
  • Tomcat配置

人工查询语言(AQL)

如果您正在运行增强的AQL查询对于每个构建,该查询将运行近30秒,因为AQL使用流,Artifactory将为每个构建保持数据库连接30秒。

归档索引条目

为了允许存储的存档工件(zip, tar, tar.gz)可以通过类搜索和可从UI浏览, Artifactory维护indexed_archives_entries表,它表示工件文件中包含的文件的索引。

indexed_archives_entries

在使用存档索引功能时,indexed_archives_entries将变得更大。此外,当一个新的归档文件部署到Artifactory时,它的内容将被索引并更新表。文件中定义的这些存档文件可以是jar、war、zip或其他存档类型$ {ARTIFACTORY_HOME} / etc / mimetypes.xml文件。

每当垃圾回收器删除索引工件时,条目就会从该表中删除,因此该表不应保存不存在的归档的任何索引。

若要禁用特定文件类型的存档索引,请编辑mimetypes.xml并将文件类型的“index”属性的值从“true”更改为“false”。禁用特定mime类型的未来索引不会从数据库中删除现有索引。

这是Artifactory自动启用的一个有用的行为,但如果它对客户用例没有价值,则可以禁用它。

数据库的大小

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

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

每个工件的总属性

当Artifactory拥有许多具有大量属性的工件时,数据库大小也会受到影响。如今,Artifactory为每个属性值保留4000 varchar(约4k)。这意味着如果每个工件有10个属性,Artifactory为数据库中的每个工件保留0.04 MB。

显然,JFrog鼓励尽可能多地利用属性的功能,因为元数据是DevOps的核心,然而,大量使用元数据可能会对数据库的性能和使用造成影响,因此应该监视这个表。

每个工件的总属性

IOPS价值

在配置Artifactory数据库时,还应该考虑IOPS(每秒输入/输出操作数)的数量。例如,当使用AWS RDS.IOPS是一种常用的性能指标,用于区分不同的存储类型。作为IOPS值增加,性能需求和成本都会上升。

我们收到了一些用例,其中用户达到了IOPS的极限,并经历了40%的性能下降。

要增加数据库端的连接数,请执行以下计算:

总连接数=(节点数)* 3 * (pool.max.active) + 50

数据库调优

除了修改数据库连接之外,在数据库性能方面还需要考虑其他设置。对于微调示例,我们的MySQL文档包含设置my.cnf文件以使用InnoDB引擎

对于PostgreSQL,您可以找到更多关于调优的信息PostgreSQL维基同时也学习如何增加你的max_connections设置。

Tomcat配置

Artifactory运行在Tomcat它使用Apache HTTP客户端处理HTTP请求。Tomcat控制一个线程池,并为每个传入请求分配一个线程。随着线程池的减少,Tomcat将创建更多的连接来处理传入的额外请求。如果请求的数量超过maxThreads值,则请求将被排队。万一acceptCount也达到了限制,Tomcat将抛出连接拒绝错误,直到最终释放所需的资源。2022世界杯阿根廷预选赛赛程

可以在Tomcat的属性中增加这些属性的值server.xml文件Artifactory_Home / conf / tomcat文件。

默认的TomcatmaxThreadsValue为200,而acceptCount设置为100。

建议数据库硬件

并发连接 最大连接 Tomcat

maxThreads

Tomcat acceptCount 存储 处理器 RAM (xmx)
1 - 20 100(默认设置) 200 One hundred. 至少20%来自Artifactory仓库 4核 8 GB
20 - 50 100(默认设置) 200 One hundred. 至少20%来自Artifactory仓库 4核 16 GB
50 - 100 200 200 One hundred. 至少20%来自Artifactory仓库 8芯 32 GB
100 - 200 400 400 200 至少20%来自Artifactory仓库 16芯 64 GB
200 - 500 800 800 400 至少20%来自Artifactory仓库 32核 128 GB
500 + 请联系JFrog支持以获取推荐的设置。

常见问题解答

1.每个用户请求Artifactory向数据库发送多少个查询?

每个向Artifactory服务器的请求大约会对数据库运行1到8个查询。

2.Artifactory支持高可用性数据库吗?

Artifactory支持数据库连接的单一URL,作为数据库配置文件(db.propertiesArtifactory版本6的文件。x和。

通常,Artifactory不知道数据库设置的集群拓扑。

支持使用通过单个数据库端点设置的主动/被动数据库,以获得高可用性和弹性。JFrog云解决方案也是如此,它与各种云解决方案(如Amazon RDS或其他云解决方案(PostgreSQL、MSSql、MySql等)一起工作,在幕后使用主动/被动拓扑。

使用active-active数据库设置高度依赖于内部数据库实现,因此目前并不是所有供应商和所有解决方案都完全支持。然而,其他解决方案,如Oracle RAC、mssql双活集群和其他解决方案也很成功。

建议首先验证附加数据库节点的需求:

要获得高可用性,请使用受支持的主动-被动设置。为了实现负载平衡,请以适合您的需求和用例的方式设置数据库。

综上所述,建议采用主动-被动解决方案。

3.Artifactory和数据库之间的推荐延迟是多少?

网络延迟最多只有几毫秒。

在HA集群中,节点需要局域网质量的网络连通性、低时延、高吞吐量的稳定网络。这意味着支持同一区域内的不同可用分区,而不支持HA集群的跨分区拓扑。

这一需求的原因是JFrog Artifactory与数据库有很大的关系。在最好的情况下,连接到数据库的速度较慢与请求的响应时间较慢直接相关(如GET、搜索、某些API调用,甚至UI速度较慢)。在其他情况下,这可能导致连接丢失、连接池耗尽、超时,在某些情况下甚至可能导致节点同步问题(节点通过数据库进行同步)。

因此,建议在每个数据中心都有一个集群,集群之间可以复制,而不是在两个数据中心有一个扩展的集群。

4.我们对数据库有缓存机制吗?

Artifactory并不缓存结果,但是每个数据库都有自己的缓存机制,例如forPostgreSQL

5.建议使用绑定的数据库还是外部化的数据库?

Artifactory附带了一个嵌入式的现成的Derby Database,它被预先配置为可以使用,但是,为了获得更好的性能和重用您可能拥有的现有基础设施,您可以配置Artifactory来使用其他受支持的数据库。

一般来说,捆绑的DerbyDB是一个非常好的、快速和可靠的数据库,可以支持高达700K的工件。在这之后,我们注意到性能下降。

使用绑定数据库的利与弊:

优点:

  • 速度:Derby是一个非常精简和快速的数据库,它通过与Artifactory共享相同的JVM(没有“通过HTTP连接”)而得到改进。
  • 管理:使用绑定的数据库可以减少维护额外的产品/组件(也就是外部数据库)。hth华体会最新官方网站

缺点

  • 2022世界杯阿根廷预选赛赛程资源:由于数据库和Artifactory位于同一个JVM中,因此存在资源竞争的风险。当系统中的工件数量增加时,这一点尤其正确。没有外部数据库的可伸缩性。
  • 管理:尽管在绑定的数据库中管理较少,但维护和其他操作是有限的。例如,只有当Artifactory应用程序被关闭时,才可能连接到数据库。

6.哪一个数据库建议吗?Oracle, MS, MySQL,还是其他?

没有官方的数据库推荐。选择数据库主要取决于组织的要求和需求。

7.HA集群升级过程中是否可以修改配置?

在Artifactory HA设置中,可以在系统升级期间继续进行常规的、日常的操作。但是无法修改配置设置。

这是因为在系统升级期间,后台可能会发生许多更改。例如,创建或修改新的表/列、配置文件

为了防止冲突和数据损坏,在所有Artifactory节点处于相同的版本之前,不能提交任何配置更改。

注意,Artifactory升级是一个相对较短的过程,应该需要几分钟。

快速释放,否则死亡