【发布时间】:2017-08-13 04:11:49
【问题描述】:
我想用 tomcat 开发一个 Spring REST 后端应用程序。 我预计有 1000-5000 个活跃用户。用户将创建从客户端(Android、Web、Ios)到后端的请求。大多数请求都会创建一个简单的数据库选择。
- 如何计算每秒请求数限制?
- 如何估算性能限制?
- 我应该使用微服务架构还是单体架构?
谢谢
【问题讨论】:
标签: spring performance rest microservices
我想用 tomcat 开发一个 Spring REST 后端应用程序。 我预计有 1000-5000 个活跃用户。用户将创建从客户端(Android、Web、Ios)到后端的请求。大多数请求都会创建一个简单的数据库选择。
谢谢
【问题讨论】:
标签: spring performance rest microservices
使用适当的拦截器,你可以做任何你想做的事。您可以计算线程数(使用静态变量)并每秒重置一次或使用线程来执行此操作。
@Component
public class RequestLoggingInterceptor extends OncePerRequestFilter
{
@Override
protected void doFilterInternal(final HttpServletRequest request, final HttpServletResponse response, final FilterChain filterChain) throws ServletException, IOException {
final long start = System.nanoTime();
try {
filterChain.doFilter(request, response);
} finally {
if( _logger.isInfoEnabled() ) {
final long end = System.nanoTime();
logger.info(buildMessage(request, end - start));
}
}
}
微服务或单体设计可根据您的要求进行。如果您有一个大型应用程序和许多模块,并且您希望这些模块独立工作并且可能有不同的数据库,那么您选择微服务。微服务有很多优点,但前提是你需要它们。对于基本操作,正常的单体是好的(一个休息项目,一个静态资产项目和/或任何其他常见项目,如果需要)。
【讨论】:
了解用户数量很有用,但还不够。
至少您应该能够估计在 peek time 中每秒的预期请求数和所需的响应时间。
一旦您知道这一点,了解限制的最安全方法就是对其进行性能测试,无论是从简单的 Java 程序还是从 JMeter 之类的程序。
对于典型的 tomcat 性能,请查看例如对此:how to handle 2000+ requests/sec on tomcat?
一般来说,Spring REST 不会增加太多性能损失,而且您还可以拥有一个 tomcat 实例集群,因此瓶颈可能在其他地方,例如在数据库中。
至于微服务问题,从最简单的方法(单体)开始,并确保遵循标准的软件开发实践,即有模块和类等。以后可以迁移到微服务,但你应该有这是一个真正的原因,因为它更复杂。
【讨论】: