我是Spring boot的新手。我们正在实现一个spring启动微服务应用。
由于spring boot使用嵌入式tomcat服务器,默认线程池是200。
那么增加处理1000个请求的能力的最佳方法是什么呢?我们需要让它异步还是?
欢迎您的参与。
提前感谢。
有硬件容量(RAM, CPU等),所以你不能在池中设置任何数量的线程(如1000在你的情况下)。它还取决于每个请求的执行时间。
要处理高流量,您应该设置Load Balancer与多个节点/实例。最好使用自动缩放在云服务器上。它将根据高负载(请求数)增加实例,并在请求数较低时再次减少实例。
没有一个参数可以保证应用程序并行处理1000个请求。
这取决于很多因素,比如:
- 请求的平均执行时间是多少?例如,如果你的请求只需要几纳秒就可以返回,那么X个线程的数量可以满足Y个并行请求(即使是在X<Y的情况下)。>
- 可用资源:有时即使线程数大于并行请求数(X>Y),如果资源有限(例如RAM、处理能力、最大数据库连接数),也可能无法同时处理它们。
所以,在现实生活中,这一切都取决于很多因素(上面没有提到),这些因素由软件架构来处理,而软件架构又会处理你的功能需求和非功能需求。因此,即使您的请求数量从1000更改为10000,如果您的架构是可伸缩的,它也会处理好。
知道现在需要调整哪个参数就足够了,但是对于将来,看看软件架构中的质量属性https://en.wikipedia.org/wiki/List_of_system_quality_attributes
是不是太简单了?应用程序响应每个请求的时间少于200毫秒就足够了吗?(理论上)由于我们有200个线程,我们可以并行处理200个请求。得到1000rps/200 = 5。因此,每个线程需要在一秒钟内处理5个请求,即响应<= 200ms