>> 最近工作了,写博客的时间越来越少了,思考的时间越来越少,学习沉淀的时间也越来越少。忙里偷闲,记录一些在平时工作中一些有亮点的小tip,记录一些实用的技能,也多亏平时接触到的有能力有想法的同事~
前言
对于大体量互联网公司的应用,更多场景下需要考虑性能问题,比如大促稳定性、高并发下HA等等。而且在目前微服务盛行的今天,糟糕的涉及往往会导致链路的高rt和糟糕的性能,进而导致糟糕的用户体验。在平时的码代码的过程中,要多注意这方面,不能一味的怼代码,而应该通过一些或高级或实用的方式提高性能。
现在有一种case:对于目前我们的系统应用A,高程度依赖了一个外部系统B的服务,但是糟糕的设计导致现在的代码中存在多个循环的同步服务调用以及一次请求中多次重复的跨域调用两个问题,导致应用A的部分接口rt较高,性能不够好。
针对这个问题,有几个优化思路,也是很常见的优化思路:多线程、加缓存。但是如何设计,如何通过工具化的方式开放能力给更多应用使用呢?
解决
一、结合CompletionService,通过多线程的方式优化同步循环查询
CompletionService将Executor和BlockingQueue的功能整合在了一起,我们就可以使用类似于队列操作的take和poll方法来获取一个已完成的future,多线程查询优化查询性能。
思路:通过配置的方式,将线程池相关bean托管给spring来管理,利用线程池批量查询。当这个工具包作为一个jar被引入时,需要结合spring的一些注解对配置和bean进行管理。
解决步骤1:
- Applicati