微服务到微服务数据传输的性能

Performance in microservice-to-microservice data transfer

我有这样的控制器:

@RestController
@RequestMapping("/stats")
public class StatisticsController {

    @Autowired
    private LeadFeignClient lfc;

    private List<Lead> list;


    @GetMapping("/leads")
    private int getCount(@RequestParam(value = "count", defaultValue = "1") int countType) {

        list = lfc.getLeads(AccessToken.getToken());

        if (countType == 1) {
            return MainEngine.getCount(list);
        } else if (countType == 2) {
            return MainEngine.getCountRejected(list);
        } else if (countType == 3) {
            return MainEngine.getCountPortfolio(list);
        } else if (countType == 4) {
            return MainEngine.getCountInProgress(list);
        } else if (countType == 5) {
            return MainEngine.getCountForgotten(list);
        } else if (countType == 6) {
            return MainEngine.getCountAddedInThisMonth(list);
        } else if (countType == 7) {
            return MainEngine.getCountAddedInThisYear(list);
        } else {
            throw new RuntimeException("Wrong mapping param");
        }

    }


    @GetMapping("/trends")
    private boolean getTrend() {
        return MainEngine.tendencyRising(list);
    }

它基本上是一个微服务,将根据 'Business Leads' 的列表处理统计信息。 FeignClient 正在获取修剪为所需数据线索的列表。一切正常。

我唯一关心的是性能 - 所有这些统计信息 (countTypes) 都将显示在 webapp 的登录页面上。如果我将一个一个地打电话给他们,每个电话都会一次又一次地检索潜在客户列表吗?或者列表会以某种方式存储在临时内存中?我可以想象,如果列表变长,加载它们可能需要一段时间。

我尝试在这个方法之外调用它们,通过@PostConstruct,在服务开始时填充列表,但这个解决方案有两个主要问题:身份验证不能由oauth令牌处理,检索到的列表将不敏感至 adding/deleting 线索,因为它仅在开始时加载。

每个 GET 请求都会调用 list = lfc.getLeads(AccessToken.getToken());。要么看看缓存响应,这在您需要经常获取大量数据时可能会有用。

我将从这里开始:Baeldung's: Spring cache tutorial 让您了解缓存。那么可以看看EhCache的实现或者实现自己的拦截器 putting/getting from/to Redis等外部存储

缓存是我认为解决此问题的唯一方法:由于使用不同的请求调用 Feign 客户端(基于令牌)数据不是静态的,需要缓存.

您需要实现缓存层以提高性能。您可以做的是,您可以在应用程序启动后立即预加载缓存。这样您就可以在缓存中准备好响应。我建议使用 Redis 缓存。但是任何缓存都可以完成这项工作。 此外,如果您可以将 getCount() 的逻辑移动到某个服务 class.

会更好