Spring boot Apache并发请求配置与Hikari DB连接池配置

Spring boot Apache并发请求配置与Hikari DB连接池配置,spring-boot,tomcat,amazon-ec2,amazon-rds,hikaricp,Spring Boot,Tomcat,Amazon Ec2,Amazon Rds,Hikaricp,这是我的连接设置,我试图在这里执行API测试 AWS Ec2实例2核心CPU,8GB RAM(t3大型)-美国西部地区 俄勒冈州 AWS RDS Postgres实例与t3.large-美国俄勒冈州西部地区 Spring boot 2.2.0版本,包含Spring数据jpa,所有读取操作 设置为@transaction(readonly=true) Apache httpd、AWS ALB和Tomcat被设置为默认配置 三个war文件与默认的hikari存在于同一个tomcat服务器中 配置ap

这是我的连接设置,我试图在这里执行API测试

  • AWS Ec2实例2核心CPU,8GB RAM(t3大型)-美国西部地区 俄勒冈州
  • AWS RDS Postgres实例与t3.large-美国俄勒冈州西部地区
  • Spring boot 2.2.0版本,包含Spring数据jpa,所有读取操作 设置为@transaction(readonly=true)
  • Apache httpd、AWS ALB和Tomcat被设置为默认配置
  • 三个war文件与默认的hikari存在于同一个tomcat服务器中 配置apigateway、otpservice和userservice
  • 我还打开了hibernate慢速查询日志来告诉我 有超过25毫秒的查询
  • 我用100个并发请求和500个请求以以下方式运行jmeter

  • 通过API网关为输入的电话号码调用生成OTP API
  • 通过传递OTP,通过API网关调用Validate OTP
  • 通过API网关调用列表用户API
  • 在执行上述脚本时,API网关将对每个请求触发至少7个查询,以进行各种安全验证和审核。我面临以下问题

  • API网关中的连接池很快就用完了,因为每个查询的响应都很慢,我以各种方式优化了查询,但仍然收到来自hibernate的慢速查询警告。如果我在本地系统中使用本地数据库和tomcat运行相同的jmeter,延迟不到10毫秒,我甚至可以使用总共1000个用户同时运行200个用户

  • 我将api网关中的连接池增加到20,连接池超时增加到60秒,因为问题发生在api网关中,我开始从AWS负载平衡器获取网关超时错误,因为它超过了默认的60秒响应。因此,我将apache和AWS负载平衡器中的超时时间增加到1800秒,现在我能够用总共200个用户执行100个并发请求

  • 现在,如果我使用相同的100个并发连接将用户总数增加到500,那么我将开始遇到db连接池问题和Apache抛出的502网关错误。现在我将db最小连接池设置为20,最大连接池设置为100,现在即使有1000个用户有100个并发请求,我也能够在平均12秒内得到响应

  • 我的问题是,如果Apache能够同时处理100个请求,那么db连接池是否也应该是100?即使EC2和RDS位于同一区域,但其实例不同,网络延迟至少为2-3倍。高连接池是正确的选择吗?我看到数据库指标和RDS上的CPU使用率只有20%左右。然而,在存在war文件的EC2中,CPU确实在较长时间内达到100%,但我能够在没有任何超时的情况下成功获得响应