代码改变世界

服务化之后本地和远程缓存的应用

2016-04-25 14:13  雪霁  阅读(1346)  评论(0编辑  收藏  举报

经过服务化之后,拆分出的用户中心,经过一段时间的监控,发现几个问题:
1.每天的调用次数大约在2-3亿之间
2.60%的调用集中在TOP100个接口之中
3.用户中心的memcached压力在用户中心的线程排在第一个
4.个别接口成为了服务化过程中的瓶颈
5.memcached使用过程中监控到数据每天有几千次的超时调用,导致服务最大单次耗时被拉长
6.网络开销
7.序列化与反序列化,在缓存中的开销

通过分析针对现有缓存模型进行了重构,加入一层本地缓存
解决思路:减少dubbo请求,把一些不易改变且访问量巨大的数据缓存在本地,通过多级缓存的模式,从而提升系统性能。

在分布式集群的环境下,要解决上述的问题把问题拆分成:
1)如何管理本地缓存数据
2)如何同步各节点间的数据
3)如何监控本地缓存使用情况,最终反应的数据我们需要重新采集和分析。 1.引用本地缓存Ehcahe,简单快速,很好的继承现有的spring,速度比memcached快非常的多。
2.改造现有应用,由于现有接口都是保持不变,只要增加新的模板即可解决,对于省平台的重构将会非常小,并且是可控的
3.为了解决节点间的同步:
1)刚开始我们采取的策略是通过zookeeper的特性,进行节点监听,然后master做分发,但是使用后发现问题(什么问题 你懂的)
2)为此我们引入了activemq,省平台已经集成了这个中间件,所以基本上增加一些配置就能为我们所有,这里最重要的也是本次改造的一个关键,通过mq的订阅模式(区别于我们一直使用队列模式),来解决节点的分发 4.最后我们需要动态的对线上的节点进行监控,我们选择zookeeper的特性,通过写入监控数据,然后统一采集,来分析我们线上缓存的一个使用情况,比如:命中率,调用次数,缓存堆大小等

技术交流群: 534368042