每秒请求数和Spring rest后端的性能限制

每秒请求数和Spring rest后端的性能限制,spring,performance,rest,microservices,Spring,Performance,Rest,Microservices,我想用tomcat开发一个SpringREST后端应用程序。 我预计有1000-5000个活跃用户。用户将创建从客户端(Android、web、Ios)到后端的请求。大多数请求将创建一个简单的db select 如何计算每秒请求的限制 如何估计性能极限 我应该使用Microservice architecure还是单片 谢谢知道用户数量很有用,但这还不够 至少,您应该能够估计在peek时间内每秒的预期请求数和所需的响应时间 一旦您知道了这一点,了解限制的最安全的方法就是从一个简单的Java程

我想用tomcat开发一个SpringREST后端应用程序。 我预计有1000-5000个活跃用户。用户将创建从客户端(Android、web、Ios)到后端的请求。大多数请求将创建一个简单的db select

  • 如何计算每秒请求的限制
  • 如何估计性能极限
  • 我应该使用Microservice architecure还是单片

谢谢

知道用户数量很有用,但这还不够
至少,您应该能够估计在peek时间内每秒的预期请求数和所需的响应时间

一旦您知道了这一点,了解限制的最安全的方法就是从一个简单的Java程序或类似JMeter的东西中进行性能测试
要了解典型的tomcat性能,请查看以下内容:

通常,SpringREST不会增加太多性能损失,而且您还可以拥有一个tomcat实例集群,因此瓶颈可能在其他地方,例如在DB中


至于微服务问题,从最简单的方法(monolith)开始,只需确保遵循标准软件开发实践,即拥有模块和类等。以后可以转移到微服务,但你应该有一个真正的原因,因为它更复杂。

使用合适的拦截器,在那里你可以做任何你想做的事情。您可以计算线程数(使用静态变量)并每秒重置一次,也可以使用线程进行重置

@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));
        }
    }
}

微服务或单片设计可根据您的要求。如果您有一个大的应用程序和许多模块,并且希望这些模块独立工作,并且可能有不同的数据库,那么您可以选择微服务。微服务有很多优点,但只有在你需要的时候。对于基本操作来说,正常的单芯片是好的(一个rest项目、一个静态资产项目和/或任何其他公共项目,如果需要)。

在本例中使用执行器是个好主意,您将能够使用端点指标获得每秒的请求。当然,您需要增加和减少计数器程序。