我有一个使用 Spring boot 构建的测试微服务应用程序,我正在进行负载测试。这样做时,我似乎遇到了服务之间 RestClient 调用的阻塞问题。我没有进行任何配置更改,因此线程池等均使用默认值。我的所有测试都是在 AWS 微型实例上进行的,并使用 loader.io 来执行初始客户端请求。
该应用程序有两个服务运行在不同的服务器上
在执行服务 #1 期间,会调用服务 #2 来修饰有关发帖用户的详细信息,包括我是否关注他们等。
服务内已进行缓存,即使在负载下,配置文件服务也能够在 50 毫秒左右做出响应。如果我将内部请求从 post 服务删除到配置文件服务,它仍然保持在 400 毫秒左右。
我观察到的是,负载下这些服务之间的往返时间调用随着并发请求数量的增加而线性增加。在相同负载条件(80tps)下,服务之间调用的响应时间最多约为 4 秒。
代码使用简单的RestTemplate在服务之间进行调用,例如:
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
HttpEntity<String> httpEntity = new HttpEntity<String>(headers);
responseVal = restTemplate.exchange(url, HttpMethod.GET, httpEntity,String.class);
Spring 中服务之间可以发出的并发请求数量是否有任意限制?如果有,如何增加?
调用服务使用 @Transactional 注释,然后强制按顺序处理 GET。删除了这个,现在一切都运行得很好