【问题标题】:Load testing AWS SDK client负载测试 AWS 开发工具包客户端
【发布时间】:2020-08-11 10:15:52
【问题描述】:

对 AWS 开发工具包客户端进行性能测试的推荐方法是什么?我基本上只是列出/描述资源,并想看看当我查询 10k 个对象时会发生什么。 AWS 是否提供某种类型的模拟 API,或者我真的需要为每种类型的资源请求 10k 来执行此操作?

我当然可以至少模拟两个级别:

  1. SDK:我用自己的接口封装 SDK 并创建模拟。这不会将 SDK 的 JSON 用于对象代码,并且我的模拟会通过额外的内存、垃圾收集等影响 AppDomain。
  2. REST API:据我了解,SDK 只是 REST API 的包装器(因此对象中显示了 HTTP 响应代码。看来我可以将 SDK 配置为转到自定义端点。 这将模拟与主 AppDomain 隔离开来,更具代表性,但当然我仍在对响应时间、限制等做出一些假设。

除了上述需要很长时间来实施之外,我想确保我的代码不会大规模失败,无论是在本地还是在 AWS。我认为保证这一点的唯一方法是在 AWS 上创建(和支付)资源。我错过了什么吗?

【问题讨论】:

    标签: amazon-web-services aws-sdk-net


    【解决方案1】:

    当您查询 10k 或更多对象时,您必须处理:

    1. 分页 - API 通常每次调用只返回有限数量的项目,为下一次调用提供NextToken
    2. 速率限制 - 如果您过多地敲击某些 AWS API,它们会限制您的速率,开发工具包可能会将其报告为某种速率限制超出异常
    3. 内存使用情况 - 希望您在处理之前不要将所有结果都收集到内存中。在它们到达时对其进行处理以节省您的操作内存。

    除此之外,我不明白为什么它不应该工作。

    更新:还可以查看Moto - AWS 模拟库(适用于 Python),它也可以在独立模式下运行以与其他语言一起使用。然而,与任何模拟一样,它的行为可能不会与真实事物 100% 相同,例如围绕 Rate Limiting 行为。

    【讨论】:

    • 是的,我考虑过这些。我的问题实际上是关于如何测试一个现实的场景,但理想情况下不必启动每个资源的 10k(这将需要支持票并且可能不会被批准)。基本上,我可以建立一个可以查询并代表真实环境的模拟环境吗? AWS 或其他任何人是否提供类似的东西?速率限制实际上是一个完美的例子,如果我没有提前知道会发生这种情况,我自己的嘲笑可能无法解释。
    • @NelsonRothermel 查看Moto - AWS 模拟库(适用于 Python),也可以在独立模式下运行以与其他语言一起使用。然而,与任何模拟一样,它的行为可能不会与真实事物 100% 相同,例如围绕 Rate Limiting 行为。
    猜你喜欢
    • 2017-05-02
    • 1970-01-01
    • 2021-07-16
    • 2015-09-22
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多