每个服务一个DynamoDB客户端,或者所有服务一个迪纳摩DB客户端



我有一个。NET核心Web API,它聚合了我的DynamoDB中的几个表中的数据。

有5个服务从相关表中读取(想想客户服务,从客户表中读取(。每个服务都有自己的DynamoDB客户端,并且这些服务可以同时执行。

我遇到了一些问题。基本上,一项服务不时需要更长的时间才能完成其发电机请求。通常每个请求<50ms,但在并发负载下,一些请求可能需要长达1秒的时间。

我正在用一个在45秒内(每秒~44 req(的2000 req的负载测试来重现这一点。

我的问题是,当查询多个表时,这是正确的设计吗?还是应该只有一个DynamoDB客户端来执行所有查询?我知道DynamoDB客户端在引擎盖下使用HttpClient。这会成为瓶颈吗?

作为附带说明,SLA通常<100ms。

简短回答

在对DynamoDb进行任何调用之前,请尝试使用ThreadPool.SetMinThreads(100, 100)。在您的情况下,每个服务一个客户端是可以的。

答案很长

只有当您的服务访问不同的表时,才使用多个客户端并没有错。每次对新表的第一次调用都需要一个同步DescribeTable调用来填充缓存,因此您不希望对同一个表进行多次调用。总的来说,对所有服务使用单个客户端更安全。

然而,官方的DynamoDB SDK for.net在性能和线程管理方面非常差,这很可能会给您带来问题。除了DescribeTable之外,还有一些锁和同步操作在某些情况下可能会导致线程饥饿。你可以试着";"修复";通过设置ThreadPool.SetMinThreads(100, 100)(您可能希望使用另一个相当大的值来代替100(。github 上有关此问题的更多详细信息

相关内容

最新更新