负载测试 AWS SDK 客户端
Load testing AWS SDK client
对 AWS SDK 客户端进行性能测试的推荐方法是什么?我基本上只是 listing/describing 资源,想看看当我查询 10k 个对象时会发生什么。 AWS 是否提供某种类型的模拟 API,或者我真的需要为每种类型的资源请求 10k 来执行此操作?
我当然可以至少在两个层面上模拟:
- SDK:我用自己的接口包装 SDK 并创建模拟。这不会对对象代码执行 SDK JSON,我的模拟会通过额外的内存、垃圾收集等影响 AppDomain。
- REST API:据我了解,SDK 只是 REST API 的包装器(因此对象中显示了 HTTP 响应代码。看来我可以配置 SDK 以转到自定义端点。
这将 mocks 与主 AppDomain 隔离开来,更具代表性,但当然我仍然对响应时间、限制等做出一些假设
除了上述需要很长时间才能实现之外,我想确保我的代码不会在本地或 AWS 上大规模失败。我认为保证这一点的唯一方法是在 AWS 上创建(并支付)资源。我错过了什么吗?
当您查询 10k 或更多对象时,您将不得不处理:
- 分页 - API 通常 returns 每次调用只有有限数量的项目,为下一次调用提供
NextToken
。
- 速率限制 - 如果你对某些 AWS APIs 施加过多的冲击,它们会限制你的速率,SDK 可能会报告为某种 速率限制超出异常。
- 内存使用 - 希望您在处理之前不要将所有结果收集到内存中。在它们到达时对其进行处理以节省您的操作内存。
除此之外,我不明白为什么它不应该工作。
更新:另请查看 Moto - AWS 模拟库(适用于 Python)也可以 运行 独立模式 用于其他语言。然而,与任何模拟一样,它的行为可能不会与真实事物 100% 相同,例如围绕 Rate Limiting 行为。
对 AWS SDK 客户端进行性能测试的推荐方法是什么?我基本上只是 listing/describing 资源,想看看当我查询 10k 个对象时会发生什么。 AWS 是否提供某种类型的模拟 API,或者我真的需要为每种类型的资源请求 10k 来执行此操作?
我当然可以至少在两个层面上模拟:
- SDK:我用自己的接口包装 SDK 并创建模拟。这不会对对象代码执行 SDK JSON,我的模拟会通过额外的内存、垃圾收集等影响 AppDomain。
- REST API:据我了解,SDK 只是 REST API 的包装器(因此对象中显示了 HTTP 响应代码。看来我可以配置 SDK 以转到自定义端点。 这将 mocks 与主 AppDomain 隔离开来,更具代表性,但当然我仍然对响应时间、限制等做出一些假设
除了上述需要很长时间才能实现之外,我想确保我的代码不会在本地或 AWS 上大规模失败。我认为保证这一点的唯一方法是在 AWS 上创建(并支付)资源。我错过了什么吗?
当您查询 10k 或更多对象时,您将不得不处理:
- 分页 - API 通常 returns 每次调用只有有限数量的项目,为下一次调用提供
NextToken
。 - 速率限制 - 如果你对某些 AWS APIs 施加过多的冲击,它们会限制你的速率,SDK 可能会报告为某种 速率限制超出异常。
- 内存使用 - 希望您在处理之前不要将所有结果收集到内存中。在它们到达时对其进行处理以节省您的操作内存。
除此之外,我不明白为什么它不应该工作。
更新:另请查看 Moto - AWS 模拟库(适用于 Python)也可以 运行 独立模式 用于其他语言。然而,与任何模拟一样,它的行为可能不会与真实事物 100% 相同,例如围绕 Rate Limiting 行为。