管理人工数据库的最佳实践

如何监控人工数据库并提高性能

作者:Batel Tova和Eran Blumenthal

介绍

JFrog Artifactory的一个关键底层特性是基于校验和的存储,它支持独特的工件存储,从而优化库管理.这是通过将所需的工件元数据存储在专用数据库中,并映射到其物理存储(NAS/SAN/FileSystem/Blob storage等)来完成的。这种关系包含了两者之间的连接和通信的重要性,并指示了数据库资源的可用性。2022世界杯阿根廷预选赛赛程例如,Artifactory和数据库之间的稳定和快速连接非常重要,它可以防止诸如请求响应时间较慢(GET、搜索、某些API调用,甚至UI速度较慢)、连接丢失、连接池耗尽、超时以及在某些情况下节点同步问题(因为Artifactory High Availability节点通过数据库同步)等问题。

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

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

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

什么是人工数据库?

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

人工利用基于校验和的存储

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

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

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

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

初步考虑

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

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

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

数据库连接

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

数据库连接

可配置参数

违约

对于每个服务,默认配置的并发数据库连接数为100。这意味着来自Artifactory的300个开放数据库连接;人工工厂申请100,人工工厂申请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未能预订连接。

cannotcreatetransactionexception:无法为事务打开JDBC连接;嵌套异常是org.apache.tomcat.jdbc. Pool . poolextrestedexception: [art-exec-672866] Timeout: Pool empty。无法在120秒内获取连接,none available[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为每个属性值保留了4,000 varchar(大约4k)。这意味着如果每个工件有十个属性,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配置

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

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

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

推荐的数据库硬件

并发连接 最大连接 Tomcat

maxThreads

Tomcat acceptCount 存储 处理器 RAM (xmx)
1 - 20 100(默认设置) 200 One hundred. 至少20%来自人工工厂的仓库 4核 8 GB
20 - 50 100(默认设置) 200 One hundred. 至少20%来自人工工厂的仓库 4核 16 GB
50 - 100 200 200 One hundred. 至少20%来自人工工厂的仓库 8芯 32 GB
100 - 200 400 400 200 至少20%来自人工工厂的仓库 16芯 64 GB
200 - 500 800 800 400 至少20%来自人工工厂的仓库 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等)一起工作,在幕后使用主动/被动拓扑。

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

建议首先验证额外数据库节点的需求:

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

总之,建议采用主-被动式解决方案。

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

网络延迟不能超过几毫秒。

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

这个需求的原因是JFrog Artifactory与数据库之间的通信。在最佳情况下,到数据库的缓慢连接与请求的较慢响应时间(例如GET、搜索、某些API调用,甚至UI缓慢)直接相关。在其他情况下,这可能导致连接断开、连接池耗尽、超时,在某些情况下甚至可能导致节点同步问题(节点通过数据库同步)。

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

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

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

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

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

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

使用捆绑数据库的利弊:

优点:

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

缺点

  • 2022世界杯阿根廷预选赛赛程资源:由于数据库和Artifactory位于同一个JVM中,因此存在资源竞争的风险。随着系统中工件数量的增加,这一点尤其正确。不像外部数据库那样可扩展。
  • 管理:虽然捆绑数据库的管理较少,但维护和其他操作受到限制。例如,只有当Artifactory应用程序关闭时,才能连接到数据库。

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

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

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

在人工HA设置中,可以在系统升级期间继续常规的日常操作。但是不能修改配置设置。

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

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

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

要么释放,要么死亡