实施S3 REST API的建议
在实施用于 StorageGRID 的 S3 REST API 时,应遵循以下建议。
针对不存在的对象的建议
如果您的应用程序定期检查某个对象是否位于您不希望该对象实际存在的路径上,则应使用 "`available` " 一致性控制。例如,如果您的应用程序在放置到某个位置之前一直位于某个位置,则应使用 "`Available` " 一致性控制。
否则,如果 head 操作未找到对象,则在一个或多个存储节点不可用时,可能会收到大量 500 个内部服务器错误。
您可以使用 PUT 存储分段一致性请求为每个存储分段设置 "`Available` " 一致性控制,也可以在单个 API 操作的请求标题中指定一致性控制。
对象密钥建议
对于在 StorageGRID 11.4 或更高版本中创建的分段,不再需要限制对象密钥名称以满足性能最佳实践。例如,现在可以对对象密钥名称的前四个字符使用随机值。
对于在 StorageGRID 11.4 之前的版本中创建的分段,请继续对对象密钥名称遵循以下建议:
-
不应使用随机值作为对象密钥的前四个字符。这与 AWS 以前针对密钥前缀的建议不同。而应使用非随机、非唯一前缀、例如
image
。 -
如果您按照以前的 AWS 建议在密钥前缀中使用随机和唯一字符,则应在对象密钥前添加目录名称。也就是说,请使用以下格式:
mybucket/mydir/f8e3-image3132.jpg
而不是以下格式:
mybucket/f8e3-image3132.jpg
关于"`范围读取`"的建议
如果选择了*压缩存储的对象*选项(配置>*网格选项*)、则S3客户端应用程序应避免执行指定要返回的字节数范围的GET对象操作。这些 "`range read` " 操作效率低下,因为 StorageGRID 必须有效解压缩对象以访问请求的字节。从非常大的对象请求少量字节的 GET 对象操作效率尤其低下;例如,从 50 GB 压缩对象读取 10 MB 范围的操作效率非常低。
如果从压缩对象读取范围,则客户端请求可能会超时。
如果需要压缩对象,并且客户端应用程序必须使用范围读取,请增加应用程序的读取超时时间。 |