AWS Java SDK-更快吗? DynamoDB客户端的单个实例(@ApplicationScoped)还是为每个请求创建一个新实例?

问题描述 投票:0回答:1

我们有一个服务器应用程序,可以在DynamoDB中并行进行很多读写操作。

今天,我们为每个注入点注入新的DynamoDB,并注入新的AmazonDynamoDBClient(取决于CDI范围)。通常,我们的应用程序中有一个新请求,会插入一个DynamoDB实例。

我知道DynamoDB是线程安全的,可以将其范围更改为@ApplicationScoped,但是对DynamoDB终结点的请求将是串行的,从而导致应用程序性能下降?甚至只有一个DynamoDB实例,它都可以处理对AWS DynamoDB端点的同时请求?

谢谢

java amazon-web-services amazon-dynamodb inversion-of-control cdi
1个回答
0
投票

所有AWS服务的客户端都在后台使用HTTP调用。因此,无论您使用的是哪种服务,DynamoDB在遇到此问题时,答案都是一样的,即AWS建议使用单个客户端实例处理多个请求。

这里是一个AWS论坛问题https://forums.aws.amazon.com/thread.jspa?messageID=247661(可能需要登录),对此进行了讨论。引用答案。

SDK客户端之一(例如:AmazonS3Client)的每个实例都创建了自己的客户端对象来发送HTTP请求,由于它管理着HTTP连接池之类的资源,因此这可能是相对昂贵的。

通过重用相同的S3客户端对象,您可以更有效地利用资源。

当您通过客户端增加更多负载时,您可能还会快速查看通过ClientConfiguration类可用的配置选项

如果需要对客户端的行为进行更多控制,例如它们应使用公用的http连接池还是使用单独的http连接池,则可以使用此处介绍的方法https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/creating-clients.html

© www.soinside.com 2019 - 2024. All rights reserved.