【问题标题】:Performance in microservice-to-microservice data transfer微服务到微服务数据传输的性能
【发布时间】:2020-03-10 01:20:52
【问题描述】:

我有这样的控制器:

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

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

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

我尝试通过@PostConstruct 在此方法之外调用它们以在服务启动时填充列表,但此解决方案有两个主要问题:oauth 令牌无法处理身份验证,检索到的列表对添加不敏感/deleting 线索,因为它只在开头加载。

【问题讨论】:

    标签: spring-boot rest oauth microservices


    【解决方案1】:

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

    我将从这里开始:Baeldung's: Spring cache tutorial,它让您了解缓存。然后你可以看看 EhCache 的实现或者实现自己的拦截器从/到外部存储,例如 Redis。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-19
        • 2020-06-16
        • 2021-07-02
        • 1970-01-01
        • 2019-11-15
        • 2018-02-20
        • 2018-08-05
        • 2017-12-27
        相关资源
        最近更新 更多