我们有一个服务器应用程序,可以在DynamoDB中并行进行很多读写操作。
今天,我们为每个注入点注入新的DynamoDB
,并注入新的AmazonDynamoDBClient
(取决于CDI范围)。通常,我们的应用程序中有一个新请求,会插入一个DynamoDB
实例。
我知道DynamoDB
是线程安全的,可以将其范围更改为@ApplicationScoped
,但是对DynamoDB终结点的请求将是串行的,从而导致应用程序性能下降?甚至只有一个DynamoDB
实例,它都可以处理对AWS DynamoDB端点的同时请求?
谢谢
所有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