系统性能提升优先法宝 | 缓存应用实践

      作者:徐贤军,12年加入京东系,从事架构设计与开发工作;在架构设计、系统优化上有较丰富实战经历


        天下武功唯快不破,如再配上如葵花宝典那样的秘籍,不能说人人都可以成东方不败那样的武林至尊,至少可以修炼成为林平之这样的高手;缓存是我们系统性能提升优先法宝,在互联网应用系统中,屡试不爽,网上有很多资料介绍缓存理论及使用策略,在这就不涉及,只是归归类,分享以前自己碰到场景及如何使用。

        接下来主要分两部分介绍:缓存分类与应用实践案例;

缓存分类

      常见有以下几类:客户端、浏览器、CDN缓存、NGINX缓存、应用缓存及统一缓存(如redis);

缓存分类:用户->数据层

      客户端缓存:很少使用,一般都是传统企业会使用;把不变化或很长时间才变化数据按一定格式存储在客户端的本地文件中,使用时通过js读取解析使用,延用了C/S结构的方式,适合数据量很大业务且技术有所不足的开发。

      浏览器缓存:这种使用很广泛,极大地提升了用户体验,但有时没及时更新导致显示“错误”的信息;把已经请求过的Web资源(如html页面,图片,js,css等)拷贝一份副本储存在浏览器中,缓存会根据进来的请求保存输出内容的副本;带来的好处有三点:减少网络带宽消耗;降低服务器压力;减少网络延迟,加快页面打开速度;适合请求量大、静态的数据请求。

      CDN缓存:是在用户和服务器之间增加cache层,把数据存放到内容分发网络机房服务器中,用户请求进从最近的CDN节点获取;也主要缓存图片、js及css文件;CDN需要付费,有些规模的网站才会使用;

      NGINX缓存:对客户已经访问过的内容在Nginx服务器本地建立副本,达到减少Nginx服务器与后端服务器之间的网络流量;

      应用缓存:是指在后端应用中使用缓存,如java常使用中Ehcache及gauva缓存组件进行数据缓存;也可以针对特殊场景在请求中进行线程缓存;适合调用量大且应用内部方法间调用,减少网络消耗;

      统一缓存:使用内存减少对数据库的直接访问,提高网站性能;如使用memcache或redis搭建缓存服务;

        前四类都是在网络传输中进行数据缓存,一般是研发很少去具体使用;后两类在应用中缓存,在开发中经常使用,接下来介绍下该种类的实践;

实践案例

1、热点key

      场景:在大促期间,给所有活动页及频道页提供侧滑html片段数据,会有修改;特点:数据记录少,调用量比较大(峰值400万/分钟);

      在接到需求时,第一反应使用redis进行缓存,数据更新时删除redis缓存;读取时先读取redis,缓存为空,读取DB并存放redis; 该场景是使用redis当缓存使用,存在一定风险:由于数据量少并发高时,成为热点key会集中命中单个redis实例,流量上去后,性能会变差,甚至可能拖垮实例;

      进一步改进本地JVM缓存加redis缓存,JVM缓存一分种失效,回源redis及数据库;存在集中穿透缓存回源数据库拖垮应用或数据库情况,之前有过缓存失效,集中回源数据库经历,结果应用服务一台台倒下,数据库没有压力;事后分析是数据库配置最大连接数为10,外部请求超时时间为500ms,不断有新请求进来,大量请求在等待连接!最后选择在JVM使用ConcurrentMap存放当DB使用,1分钟异步刷新数据;

      在大促当天,页面该请求返回性能不太理想,数据返回大概73KB,使用Nginx增加gzip压缩后,数据压缩到13KB,性能提高不少;后续在Nginx增加代理缓存,性能稳定;

2、类目中心设计

      类目是电商领域最基础数据,使用依赖的系统很多很多,早期是各个系统直接从数据库读取并自行缓存使用,人为给数据库增压;为了避免该情况,着手搭建类目中心,对性能及稳定要求是极致,类目中心服务异常不能影响使用方,类目更新后要及时同步给使用方;

      经过多次讨论,确认使用三级缓存:客户端缓存、类目系统jvm缓存及统一redis缓存;

类目中心--读

      客户端缓存:在对外提供api依赖包中进行缓存封装,通过调用类目系统接口提供缓存后的服务方法;缓存数据记录失效时间,调用时发现缓存数据已失效时,更新失效时间并返回,异步请求类目中心数据刷新;若缓存没有命中,回源请求类目中心;客户端会定时检测类目版本信息,若版本更新变化,客户端数据强制更新。

      类目系统jvm缓存:使用jvm缓存,若有过期异步回源统一缓存redis,穿透直接回源redis;

      统一缓存redis:当DB使用,不回源数据库,并定时从数据库把数据刷新至redis中;为了多个避免并发刷新,使用redis实现排它锁,保证只一个任务刷新;

      数据更新请求,有一定的规则:

      1、更新数据库,保证数据库是正确数据,后续步骤异常也可通过定时全量更新弥补;

      2、更新redis缓存;

      3、更新类目中心所有实例JVM缓存:由于系统是多实例集群,需要通知所有实例更新JVM缓存;

      4、更新版本号:用于客户端查验强制更新标识;一定需要JVM更新完成之后,否则客户端可能获取到更新前的“错误”数据;

类目中心--更新

      客户端95%的请求被客户端缓存命中,调用次数3700万/分钟,性能TP999为1ms;

客户端调用次数
客户端性能

      服务端请求次数3000万/分钟也没有压力,单实例现实际调用次数150万/分钟

服务端调用次数

最后

      缓存不仅能当缓存,也可以当DB使用,避免穿透;

      数据的更新分主动缓存及被动缓存;

      需要解决数据的一致性及有效性;

      如何使用,怎么组合,缓存什么数据都需要结合业务场景,也需要一步步观察、总结才能优化;

缓存更新内存


面试内存
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,650评论 18 139
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,928评论 2 89
  • 一周总结: 定价调整偏见:如何在与顾客的交谈中,占有话语权,是一门很深刻的学问。 权利有限策略:只有纵观全局,才能...
    临淄茂业DDM王春梅阅读 144评论 0 0
  • 早起的意愿增加了 呼吸的觉察,注意力还需要集中 动作稳定性,以及体位中自然记入屏气部分。很多体位可以深入一些了。 ...
    雅音ClarityZhang阅读 145评论 0 0
  • 盗火 | 蔡书腾 0717 遇到感知的浩瀚,无论是夜空中的星星或者是巨型视觉艺术,都会触发人的自我否定和时间停滞感...
    小新26阅读 2,504评论 5 6