代码之家  ›  专栏  ›  技术社区  ›  drenda

如何在桶中选择文件的密钥以最大限度地提高AWS S3的性能

  •  0
  • drenda  · 技术社区  · 6 年前

    我对自动焊接很陌生。我正在开发一个云应用程序,我想使用S3来存储文件。 我读过 Request Rate and Performance Considerations - Amazon Simple Storage Service 为了更好地理解在S3中索引是如何工作的,但我不得不说我并不清楚。

    我的应用程序是多租户的,它将为每个客户存储许多文件。

    我认为关键是:

    bucketname/211a6589-caef-4554-acc6-bc0fd05d756d/a/f/z/3b288ae5-3779-49d1-a79e-1812d4fa76e2.pdf
    

    以这种方式组成的键:

    1. 存储桶名称
    2. 租户的UUID
    3. 随机生成三级文件夹
    4. 文件的UUID

    第2点。对我很有用,因为我把租户的所有数据都放在一个文件夹中。UUID是唯一和随机的,因此应该是一个好的实践。 我还添加了3个层次的嵌套文件夹(随机生成),因为最初我为磁盘存储创建了这个方法,这样我就可以平衡文件系统上的inode。

    从文档中,我不清楚在S3中,键的哪个部分用于索引。

    为了从S3获得最佳性能,我的方法是否足够好?

    1 回复  |  直到 6 年前
        1
  •  1
  •   John Rotenstein    6 年前

    首先,只有当bucket“通常每秒超过100个Put/List/Delete请求或每秒超过300个Get请求”时,才需要这种类型的工作。

    这不是一个典型的情况,所以如果您的应用程序不太可能达到这样的水平,不要花费太多精力。然而,如果你认为你会达到这样的水平,那么尽早“正确”地完成它是一个好主意。

    想法是 将负载分布到整个名称空间 .可以将AmazonS3看作是具有用于维护对象列表的树结构。对于大型存储桶,树结构的管理分散在服务器上。其目标是在多个服务器上分散流量,而不是只攻击一个服务器。

    如果使用UUID存储对象,而UUID是随机的,则 只需使用UUID .这将足以将荷载分散到整个树结构上。即使密钥前面只有几个随机字符,也足以分散负载。

    如果您特别希望在“每个租户”结构下存储文件,请使用:

    tenant-uuid/object-uuid
    

    这一点稍差一点,因为一个租户可以同时获取/放置大量文件,并且会影响到树结构的一小部分,但如果您有许多同时使用的用户,那么多租户应用程序的可能性很低。