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

世界最大混合云的总架构师,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

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

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

    摘要: 众多项目研发过程中为了调试观察应用运行时表现,修改常量配置的场景下往往需要频繁地对应用代码及配置项做打包发布进行应用版本更新甚至回滚代码.基于该场景,任何的应用配置项变更都需要将整个应用重新打 ...

  2. 阿里云王牌架构师一问开发者:系统要改造成微服务吗

    阿里云高级解决方案架构师 杨旭 世界最大混合云的总架构师,4年前,开始作为双11阿里云技术负责人,负责搭建全球最大的混合云结构,把 "双11"的电商业务和技术场景在阿里云上实现,并 ...

  3. 阿里云王牌架构师二问开发者:容器和虚拟化你会怎么选?

    阿里云高级解决方案架构师 杨旭 世界最大混合云的总架构师,4年前,开始作为双11阿里云技术负责人,负责搭建全球最大的混合云结构,把 "双11"的电商业务和技术场景在阿里云上实现,并 ...

  4. 阿里云王牌架构师一问开发者:我需要一个高并发的架构,我的系统要改造成微服务吗

    阿里云高级解决方案架构师 杨旭 世界最大混合云的总架构师,4年前,开始作为双11阿里云技术负责人,负责搭建全球最大的混合云结构,把 "双11"的电商业务和技术场景在阿里云上实现,并 ...

  5. 阿里云王牌架构师一问开发者:我需要一个高并发的架构,系统要改造成微服务吗

    摘要: 最近大家都在谈微服务,随着越来越多的在线业务需要提供更大并发的scale-up 和 scale out能力,微服务确实提供了比较好分布式服务的解决方案. 阿里云高级解决方案架构师 杨旭 世界最 ...

  6. 京东云首席架构师杨海明:京东云探秘,从实践者到服务者

    [CSDN现场报道]5月13日-15日,由全球最大中文IT社区CSDN主办的"2016中国云计算技术大会"(Cloud Computing Technology Conferenc ...

  7. 阿里云首席架构师唐洪:拥抱开源的云端更具生命力

    近日, 国际开源界顶级会议LC3(LinuxCon + ContainerCon + CloudOpen)首次在国内举行,阿里云首席架构师唐洪作为特邀嘉宾出席并发表主题演讲.唐洪首先从一组数字开始,回 ...

  8. 阿里云首席架构师解读开源和云端结合的三大优势

    本文讲的是阿里云首席架构师解读开源和云端结合的三大优势[IT168 云计算]6月20日,在LC3(LinuxCon+ContainerCon+CloudOpen)2017中国大会,在阿里云被宣布成为是 ...

  9. 阿里云解决方案架构师张平:云原生数字化安全生产的体系建设

    2022 年 6 月 17 日,阿里云用户组(AUG)第七期活动在合肥举办.活动现场,具有十多年安全生产经验的阿里云云原生团队解决方案架构师张平,向参会企业代表分享了阿里云安全生产的产品和服务体系.本 ...

最新文章

  1. 实现DataGridView中同一列不同行控件类型的不同
  2. Tomcat结合Apache、Nginx实现高性能的web服务器
  3. php 跨区域,如何构造PHP的内容包括在非安全(http://)和安全(https://)区域以及跨多个目录使用?...
  4. 围圈报数(信息学奥赛一本通-T1334)
  5. python调用系统命令_Python调用外部系统命令
  6. 参与社团活动的意义_大学参加社团活动有意义吗?
  7. 十七、String类型常用方法(二)
  8. 【数字信号调制】基于matlab GUI数字信号调制仿真系统【含Matlab源码 336期】
  9. 幂次方计算_4.初中数学:怎么求n的m次方的值?幂的运算,单项式相乘,基础常见考试题...
  10. flash linux安装教程 pdf,Flash基础入门之linux 下安装adobe flash的关键
  11. Markdown文本编辑器公式编辑在线工具
  12. 鲁班学艺 ---学三个月的,手艺扎根在眼里;学三年的,手艺扎根在心里
  13. ecs云服务器操作系统选择
  14. 【论文 | 复现】YOLO-landmark detection
  15. Quantopian教程源码解析及实战
  16. 重生之我是赏金猎人-漏洞挖掘(十一)-某SRC储存XSS多次BypassWAF挖掘
  17. 凉爽的夏天=凉爽的心
  18. 沪穗深百万地铁族担心:花生WiFi到底安全吗?
  19. 浅谈企业级物联网平台
  20. 音频-ffmpeg音频PCM文件截取某段声音

热门文章

  1. 计算机显示丢失d3dcompiler,无法启动此程序提示缺少d3dcompiler文件怎么解决
  2. 顶峰Android手机视频转换器,凡人Android手机视频转换器
  3. 如何挖掘Nginx日志中隐藏的金矿?
  4. ERROR: Unable to find method 'com.android.build.gradle.api.BaseVariant.getOutputs()Ljava/util/List;'
  5. java获取当前年月日历_java万年历,获取该年月日历表
  6. juju based openstack upgrade (by quqi99)
  7. 榆熙教育:拼多多平台考核如何达成系统考核指标
  8. 虚漠鸿蒙什么意思,好!妙哉妙哉!张济所作之诗不仅符合题意,更是言出了万物伊始乃...
  9. 乐华娱乐CEO杜华揭秘:捧红王一博 与孙一丁是配偶同居关系
  10. 服务器文件上传500报错,500 InternalServerError