阿里云王牌架构师杨曦:也谈系统缓存设计误区及高阶使用技巧

阿里云高级解决方案架构师 杨旭

世界最大混合云的总架构师,4年前,开始作为双11阿里云技术负责人,负责搭建全球最大的混合云结构,把 “双11”的电商业务和技术场景在阿里云上实现,并保障这个混合云在双11当天能够满足全球客户的购物需求。

正文

相信很多研发同学都有过引入缓存进入到应用架构设计中的经历,本文从几个角度阐述一些选型误区和使用误区以及高阶使用技巧等,供开发者参考。

  1. 什么情况下开始考虑缓存?

缓存的主要目的是为了挡一些读多写少的用户请求,且数据在一定时间周期内保持不变,再且业务允许一定时间差而导致的脏数据。假设你的业务直接读写持久化存储(比如mysql)的压力不大,换言之持久化存储的水位还较低可控范围内,那么不建议引入缓存,不但增加了一道依赖提高了系统复杂度,而且并没有带来可观的解决问题收益。引入缓存是为了提高系统承载能力且有效减少对后端持久化存储的冲击。遵循架构简单适用的原则,不要为了使用缓存而使用。

  1. 确定引入缓存后我该如何设计内部数据结构和缓存服务架构?

先说缓存数据结构,这里往往存在使用误区,不少开发者将大字节key-value型数据写入缓存系统,业务频繁读取,那么问题来了,从普通缓存服务器的网卡能力来看,几K甚至几十K大小的key-value,QPS上不了多少就会打爆网卡,因此数据大小遵循小够用原则,而不是什么都往里面放。

另外内存型缓存更关注整体内存使用量,业务的key数量以及平均key大小跟内存之间的博弈,同时务必合理设置数据过期时间。不推荐复杂数据结构和时间复杂度高的操作,比如redis的执行时间为O(N)的指令集。最后最重要一点切记把内存型缓存当做持久存储对待,从应用系统设计上内存型缓存是要考虑随时丢失的场景。

至于缓存服务架构如何选择,有几种供参考,单master模式,master-slave模式(快速切换),集群模式(有必要进行业务数据分片)等。外加运维管控系统,常见的缓存服务结构:
1

Figure 3来源阿里云ApsaraDB for Redis

  1. 几种高阶使用场景介绍
    针对一些常见的缓存大规模使用场景,介绍几例高阶的用法:

一、 大流量下缓存前置架构以提高服务性能。比如APP_A请求APP_B,正常路径从APP_A → APP_B → Cache,前置做法简单的说是APP_A内嵌APP_B的client,以达到直接读取Cache,请求不经过APP_B。这儿也有个问题,APP_B的研发同学需要把控好plugin到APP_A的客户端,比如权限的收放,哪些可以在客户端里做,哪些操作不能在客户端侧做,根据业务实际场景斟酌。

二、 SmartClient智能客户端。客户端可以根据配置变更动态做出变化,比如QPS限流,白名单等等策略,通过配置动态更新通知客户端做相应的预期调整。举个例子,流量突增导致缓存压力过大,通过配置变更使得客户端部分读缓存改为走读mysql,有效分担缓存系统压力。

三、 复杂缓存失效场景如何解?除了根据业务场景主动设置数据过期时间,还有几种情况,比如因数据请求更新mysql完毕,同时应用触发更新cache数据以达到缓存和mysql的数据一致性,此外假设还有跨机房集群而需要多个集群失效保持同步,一般会通过主动失效服务来做多侧的同步失效。如图中的“失效中心”角色:
2

Figure 4来源阿里巴巴内部业务系统

【往期回顾】
1.阿里云王牌架构师一问开发者:我需要一个高并发的架构,我的系统要改造成微服务吗
https://yq.aliyun.com/articles/623271?spm=a2c4e.11155435.0.0.120433122PgFrW

2.阿里云王牌架构师二问开发者:容器和虚拟化你会怎么选?
https://yq.aliyun.com/articles/623272?spm=a2c4e.11155435.0.0.120433122PgFrW

3.阿里云王牌架构师杨曦:N多环境N多应用个性配置管理如何从混乱到简单?
https://yq.aliyun.com/articles/623882?spm=a2c4e.11155435.0.0.7a783312apAOKE

更多干货内容尽在阿里云总监课,戳链接报名:https://yq.aliyun.com/promotion/689

阿里云总监系列课重磅上线!聚焦人工智能、弹性计算、数据库等热门领域,首次集齐12位阿里云技术高管,耗时半年精心打磨,从理论到实践倾囊相授,从零开始绘制技术大牛成长路径,限时直播课程免费报名中!
IMG_1996

原文地址:http://blog.51cto.com/13927391/2161807

时间: 2024-10-03 02:08:46

阿里云王牌架构师杨曦:也谈系统缓存设计误区及高阶使用技巧的相关文章

阿里云王牌架构师杨曦:N多环境N多应用个性配置管理如何从混乱到简单?

阿里云高级解决方案架构师 杨旭世界最大混合云的总架构师,4年前,开始作为双11阿里云技术负责人,负责搭建全球最大的混合云结构,把 "双11"的电商业务和技术场景在阿里云上实现,并保障这个混合云在双11当天能够满足全球客户的购物需求. 正文: 众多项目研发过程中为了调试观察应用运行时表现,修改常量配置的场景下往往需要频繁地对应用代码及配置项做打包发布进行应用版本更新甚至回滚代码.基于该场景,任何的应用配置项变更都需要将整个应用重新打包发布,整个过程非常繁琐,且容易出错.非常典型且具有代表

百度开放云首席架构师徐串:架构师必须理解程序员的痛

在2016中国云计算技术大会(CCTC 2016,专题报道)上,百度开放云首席架构师徐串发表了题为<企业IT基础架构在云端如何变革>的主题演讲,并接受CSDN记者专访,深入分享了他对架构及设计的认识,对架构师工作和技能的理解,以及百度开放云架构满足大数据和人工智能等不同应用需求的实践经验. 徐串表示,云计算环境下的架构,除了高吞吐.可扩展性.稳定性的需求,灵活性的实现也很重要.架构师的工作就是在各种矛盾之间坚持或妥协,如高吞吐和低延迟的矛盾,优雅架构和紧迫需求的矛盾.保证业务的需求,是设计架构

新浪微博技术架构分析-微博首席架构师杨卫华

新浪科技讯 11月16日下午消息,由新浪微博主办的中国首届微博开发者大会在北京举行,这是国内微博行业的首场技术盛宴.作为国内微博市场的绝对领军者,新浪微博将在此次大会上公布一系列针对开发者的扶持政策,以期与第三方开发者联手推动微博行业的整体发展.视频:中国首届微博开发者大会杨卫华演讲媒体来源:新浪科技 以下为演讲实录: 大家下午好,在座的大部分都是技术开发者,技术开发者往往对微博这个产品非常关心.最晚的一次,是12点多收到一个邮件说想了解一下微博底层是 怎么构架的.很多技术人员对微博的构架非常感

百度开放云首席架构师徐串:架构师对架构的理解 云 架构 架构师 百度

在 2016中国云计算技术大会 (CCTC 2016,专题报道)上,百度开放云首席架构师徐串发表了题为< 企业IT基础架构在云端如何变革 >的主题演讲,并接受CSDN记者专访,深入分享了他对架构及设计的认识,对架构师工作和技能的理解,以及百度开放云架构满足大数据和人工智能等不同应用需求的实践经验. 徐串表示,云计算环境下的架构,除了高吞吐.可扩展性.稳定性的需求,灵活性的实现也很重要.架构师的工作就是在各种矛盾之间坚持或妥协,如高吞吐和低延迟的矛盾,优雅架构和紧迫需求的矛盾.保证业务的需求,是

阿里P8级架构师浅析秒杀架构设计实践思路

一.前言 一提到秒杀,都会想到高性能.高并发.高可用.大流量-.在电商体系中,交易系统占据了环节中的半壁江山.比如里面特别迷人的秒杀系统,那秒杀涉及到什么架构设计?会涉及到什么业务? 泥瓦匠自言自语:秒杀这个东西,一篇文章也说不完.我这一篇起个头,实践系列还在后面,敬请期待. 二.秒杀业务难点 秒杀业务难点,总结为两点 并发多读 并发少写 这不同于一些场景,优惠营销系统,只会是一个用户读多个数据,但也会大流量的读操作.但没有啥写操作. 并发多读,多用户并发读一个数据.比如华为手机只有一个库存,活

阿里云平台架构部署思路

先来简单的说一下阿里云服务器等收费的情况 阿里云ECS服务器(8核16G计算型)一年大概要6000左右 OSS对象存储(10TB)一年大概16000左右 SLB(按量付费)一年大概8000左右 WAF(web防火墙)按QPS收费一年5万到6万左右 阿里云CDN按流量包收费(一年10T)大概2000左右 通用型RDS数据库(8核32G最大存储空间2000G)一年大概34000左右.两台.配置主从 日志服务: 读写流量:每天读写流量 15/5(压缩后数据)* 2 (读+写) = 6 MB (压缩后)

阿里云文件存储(NAS)助力业务系统承载双十一尖峰流量

2018天猫双11全球狂欢节,全天成交额再次刷新纪录达到2135亿元,其中总成交额在开场后仅仅用了2分05秒即突破100亿元,峰值的交易量达到惊人的高度,背后离不开阿里云大数据计算和存储能力的支撑.在整个交易的链路上,账单业务是一个重要的环节,尤其对商家系统来说,需要定期对账,账单子系统出现一点点问题都会影响商家的运营,2018的双十一,承载账单的消息系统把全网卖家账单系统60%的流量托付给了阿里云文件存储.在11日0点的峰值交易时刻,账单消息系统的写入流量瞬间达到日常流量的60倍以上,阿里云文

基于阿里云Ubuntu14.04 64bit部署WordPress博客系统

环境:基于阿里云Ubuntu14.04  64bit服务器系统 1, 安装apache2+mysql5+php5+php5-mysql sudo apt-get install apache2 sudo apt-get install php5 sudo apt-get install mysql-server sudo apt-get install php5-mysql sudo /etc/init.d/apache2 restart 至此重启了apache后应该就已经配置好服务器了,对此先

阿里云服务器到期忘记续费,Ubuntu系统硬盘重新挂载

阿里云服务器到期忘记续费,服务器暂停服务,紧张. 随后续费,开机,发现网站,数据库等都无法启动. 因熟悉centOS,顺手就打service httpd start,发现服务器没用将这些安装成服务(PS:服务器之前是其他人安装,所有程序,路径等都不知) 之后去/etc/init.d查找,发现有httpd.mysql等,准备启动,结果发现红色的...开始以为权限不够,用ls -s查看权限都有,什么情况呢. 后来在朋友提醒下,用 ll命令试试?(PS:是两个小写的L),看到原来这个进程是个快捷方式,