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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 相信很多研发同学都有过引入缓存进入到应用架构设计中的经历,本文从几个角度阐述一些选型误区和使用误区以及高阶使用技巧等,供开发者参考。

_1_

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

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

正文

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

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

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

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

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

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

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

Figure 3来源阿里云ApsaraDB for Redis


3. 几种高阶使用场景介绍

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

一、 大流量下缓存前置架构以提高服务性能。比如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

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
29天前
|
监控 持续交付 API
深入理解微服务架构:构建高效、可扩展的系统
【10月更文挑战第14天】深入理解微服务架构:构建高效、可扩展的系统
78 0
|
11天前
|
人工智能 云计算 网络架构
阿里云引领智算集群网络架构的新一轮变革
11月8日~10日在江苏张家港召开的CCF ChinaNet(即中国网络大会)上,众多院士、教授和业界技术领袖齐聚一堂,畅谈网络未来的发展方向,聚焦智算集群网络的创新变革。
阿里云引领智算集群网络架构的新一轮变革
|
21天前
|
缓存 Java Shell
Android 系统缓存扫描与清理方法分析
Android 系统缓存从原理探索到实现。
46 15
Android 系统缓存扫描与清理方法分析
|
4天前
|
传感器 算法 物联网
智能停车解决方案之停车场室内导航系统(二):核心技术与系统架构构建
随着城市化进程的加速,停车难问题日益凸显。本文深入剖析智能停车系统的关键技术,包括停车场电子地图编辑绘制、物联网与传感器技术、大数据与云计算的应用、定位技术及车辆导航路径规划,为读者提供全面的技术解决方案。系统架构分为应用层、业务层、数据层和运行环境,涵盖停车场室内导航、车位占用检测、动态更新、精准导航和路径规划等方面。
29 4
|
10天前
|
人工智能 运维 网络架构
阿里云引领智算集群网络架构的新一轮变革
11月8日至10日,CCF ChinaNet(中国网络大会)在江苏张家港召开,众多院士、教授和技术领袖共聚一堂,探讨网络未来发展方向。阿里云研发副总裁蔡德忠发表主题演讲,展望智算技术发展趋势,提出智算网络架构变革的新思路,发布高通量以太网协议和ENode+超节点系统规划,引起广泛关注。阿里云HPN7.0引领智算以太网生态蓬勃发展,成为业界标杆。未来,X10规模的智算集群将面临新的挑战,Ethernet将成为主流方案,推动Scale up与Scale out的融合架构,提升整体系统性能。
|
14天前
|
前端开发 安全 关系型数据库
秒合约系统/开发模式规则/技术架构实现
秒合约系统是一种高频交易平台,支持快速交易、双向持仓和高杠杆。系统涵盖用户注册登录、合约创建与编辑、自动执行、状态记录、提醒通知、搜索筛选、安全权限管理等功能。交易规则明确,设有价格限制和强平机制,确保风险可控。技术架构采用高并发后端语言、关系型数据库和前端框架,通过智能合约实现自动化交易,确保安全性和用户体验。
|
22天前
|
存储 数据管理 调度
HarmonyOS架构理解:揭开鸿蒙系统的神秘面纱
【10月更文挑战第21天】华为的鸿蒙系统(HarmonyOS)以其独特的分布式架构备受关注。该架构包括分布式软总线、分布式数据管理和分布式任务调度。分布式软总线实现设备间的无缝连接;分布式数据管理支持跨设备数据共享;分布式任务调度则实现跨设备任务协同。这些特性为开发者提供了强大的工具,助力智能设备的未来发展。
73 1
|
29天前
|
缓存 弹性计算 NoSQL
新一期陪跑班开课啦!阿里云专家手把手带你体验高并发下利用云数据库缓存实现极速响应
新一期陪跑班开课啦!阿里云专家手把手带你体验高并发下利用云数据库缓存实现极速响应
|
1月前
|
存储 监控 负载均衡
|
1月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
74 6