如何将Amazon弹性文件系统(EFS)与人工HA一起使用
如何将Amazon弹性文件系统(EFS)与人工HA一起使用
AWS中的人工高可用性(HA)可能使用S3或Amazon的弹性文件系统(EFS)可以为NFS文件存储实现。为EFS实现进行设计必须考虑到EFS如何工作的某些方面。
本文档解释了burst Throughput和Provisioned Throughput模式之间的差异,目标是使用带有人工HA的EFS实现最佳性能。有关Amazon EFS的更多信息,请参见什么是Amazon弹性文件系统?
Amazon EFS性能概述
突发吞吐量模式(默认模式)
Amazon EFS上的吞吐量随着文件系统的增长而扩展。文件系统可以以其基准速率连续驱动吞吐量。此外,Amazon EFS被设计为在一段时间内达到高吞吐量水平。
有关EFS性能的完整文档,请参见Amazon EFS中的吞吐量扩展。
Amazon EFS使用信用系统来确定文件系统何时会崩溃。每个文件系统在一段时间内以由文件系统大小决定的基准速率获得积分,并在读取或写入数据时使用积分。每当文件系统处于非活动状态或驱动吞吐量低于其基准速率时,文件系统就会累积突发积分。
如果您的文件系统没有可用的突发信用额度,则I/O吞吐量是基准速率,直到突发信用额度补充完毕。基线速率可能会严重影响Artifactory的性能。因此,最好的做法是完全避免需要突发信用额度,或者很少需要,而是能够通过基线吞吐量分配提供所需的全部吞吐量。您可以使用Amazon CloudWatch对Amazon EFS的度量。
预置吞吐量模式
如果您发现由于小容量文件系统或吞吐量需求激增,在burst Throughput模式下性能受到限制,您可以选择Provisioned Throughput模式。Provisioned Throughput提供了设置吞吐量级别的功能,该级别将在您使用文件系统时保持恒定且始终较高,而与文件系统的大小无关。这种模式非常适合需要高吞吐量但文件系统相对较小的客户,这对于Artifactory用户来说并不少见。可以找到有关已配置吞吐量使用和定价的更多详细信息AWS的网站。
如何确定哪种吞吐量模式最适合您的工作负载?
为了获得最佳结果,您必须考虑您的工作负载是什么以及满足该性能所需的容量。这样做:使用突发吞吐量模式,文件系统中的容量越大,基线吞吐量和突发吞吐量就越高。
许多JFrog Artifactory服务器的存储可扩展到TiB范围,这对于用例来说通常是足够的性能。然而,对于较小的文件存储,基线吞吐量非常低:1 GiB的数据为50 KiB/s,并且在此之上每GiB线性扩展。如果您的工作负载需要比基线和突发模型提供的吞吐量更多的吞吐量,那么您应该考虑预置吞吐量模式。
使用本地EBS缓存
您可以在Artifactory节点实例上使用本地EBS缓存。此选项减少了EFS文件存储上的工作负载,并在突发吞吐量模式下使用突发信用余额。配置Artifactory以在每个节点上的EBS中使用缓存。这个本地缓存将工件存储在每个单独的节点上,并将它们直接提供给客户机,而不是从EFS中提取它们。每个节点可能有重复的缓存条目(因为任何节点都可以服务任何请求),但这极大地减少了对EFS的访问。重要的是要考虑到,如果使用S3作为二进制存储,也可以使用相同的机制来增强性能。这种方法可能允许您更频繁地利用突发能力,但仍然应该只在基线吞吐量处于合理值时使用。特别是,要记住,当实现缓存时,必须首先以EFS的速度将其流式传输到缓存中,然后再发送出去,所以如果EFS由于耗尽突发信用余额而运行非常慢,这可能会导致客户端超时。如果您发现遇到突发信用余额限制或客户端超时,则应该切换到Provisioned Throughput模式,以增加EFS的可用吞吐量。
例如,如果一个文件在没有本地缓存的情况下被下载了1000次,那么EFS的下载活动将是1000 * filessize。但是,启用本地缓存后,它最终可能只有2 *文件大小。如果您不希望在创建新实例时重新填充EBS缓存,建议将其持久化(非临时)。有关配置缓存的详细信息,请参见关于在binarstore .xml文件中配置文件存储的注意事项。
吞吐量不足/超过突发信贷余额的症状
存储设计不足的症状包括ping延迟(api/system/ping)和非常缓慢的下载/上传过程。在您的Artifactory日志中,延迟可能显示为超时错误或由客户端超时断开连接引起的断开连接。
在S3存储上实现的5.0之前的人工版本
如果使用S3存储实现5.0之前的Artifactory HA版本,则需要在共享NFS挂载上实现集群范围的写缓存(称为最终缓存)。Jfrog推荐这种缓存使用预置吞吐量模式下的EFS,因为它通常是低存储和高使用率,这与EFS预置吞吐量模式所支持的工作负载类型一致。对于Artifactory 5.0及更高版本,S3实现的缓存应该是EBS本地磁盘缓存。
