代码改变世界

重构系统的套路-提高并发能力

2018-06-28 10:29  春哥大魔王  阅读(526)  评论(0编辑  收藏  举报

提高系统并发能力,总结起来有三点:异步,缓存,并行。

异步

比如我们在某段业务逻辑中加了一个同步写kafka的操作,tp99瞬间多了30毫秒,这样在整个监控曲线看起来非常扎眼,于是我们需要将这个同步改成异步。
对于老系统需要在业务进行梳理,如果业务场景中不关心返回值,这样完全可以做成异步。
如果业务关心返回值,比如订单逻辑,很多下游服务需要传入本次主订单ID与下游服务进行连接,这样写主订单就必须变成了一个同步逻辑,但是主要关心的还是这个OrderId,我们可以建立一个OrderId生成器,这样单独的一个OrderId服务性能更好,可以将整个业务逻辑串起来。

缓存

为了提升整个逻辑链路的响应时间,我们应该将数据离访问更近,这样响应更快。
有了缓存,我们可能产生某种依赖,将尽可能多的数据放入缓存,而没有好好的进行梳理和分析。
这样缓存数据可能越来越大,内存成本越来越高,当一段促销造成的流量越来越大,如果没有进行合理的扩容,则会造成想不到的问题。
比如我们的营销活动放到redis做缓存,每个营销活动其实是有很多聚合信息,并且每个活动有失效期的,这样比较适合缓存场景的,但是某天产品同学的运营策略变了,在双11我们需要提前做一些预热,这样用户领取的优惠券的周期就变长了,如果简单的是放到了redis,其实整体的活动信息在高峰来时,原有的redis容量就造成了一定的性能影响。

并行

下游的服务我们通过建立线程池,进行异步处理,于是我们需要关心设置合理的线程池。
梳理系统的代码,将很多同步的for,while的循环改成基于Future的同步模型,提升整体并行度,达到一定的性能提升。