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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 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
相关文章
|
14天前
|
Ubuntu Linux
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
124 3
|
2天前
|
Cloud Native Java 编译器
将基于x86架构平台的应用迁移到阿里云倚天实例云服务器参考
随着云计算技术的不断发展,云服务商们不断推出高性能、高可用的云服务器实例,以满足企业日益增长的计算需求。阿里云推出的倚天实例,凭借其基于ARM架构的倚天710处理器,提供了卓越的计算能力和能效比,特别适用于云原生、高性能计算等场景。然而,有的用户需要将传统基于x86平台的应用迁移到倚天实例上,本文将介绍如何将基于x86架构平台的应用迁移到阿里云倚天实例的服务器上,帮助开发者和企业用户顺利完成迁移工作,享受更高效、更经济的云服务。
将基于x86架构平台的应用迁移到阿里云倚天实例云服务器参考
|
15天前
|
设计模式 存储 前端开发
揭秘.NET架构设计模式:如何构建坚不可摧的系统?掌握这些,让你的项目无懈可击!
【8月更文挑战第28天】在软件开发中,设计模式是解决常见问题的经典方案,助力构建可维护、可扩展的系统。本文探讨了.NET中三种关键架构设计模式:MVC、依赖注入与仓储模式,并提供了示例代码。MVC通过模型、视图和控制器分离关注点;依赖注入则通过外部管理组件依赖提升复用性和可测性;仓储模式则统一数据访问接口,分离数据逻辑与业务逻辑。掌握这些模式有助于开发者优化系统架构,提升软件质量。
30 5
|
11天前
|
微服务 API Java
微服务架构大揭秘!Play Framework如何助力构建松耦合系统?一场技术革命即将上演!
【8月更文挑战第31天】互联网技术飞速发展,微服务架构成为企业级应用主流。微服务将单一应用拆分成多个小服务,通过轻量级通信机制交互。高性能Java Web框架Play Framework具备轻量级、易扩展特性,适合构建微服务。本文探讨使用Play Framework构建松耦合微服务系统的方法。Play采用响应式编程模型,支持模块化开发,提供丰富生态系统,便于快速构建功能完善的微服务。
22 0
|
14天前
|
消息中间件 Java RocketMQ
微服务架构师的福音:深度解析Spring Cloud RocketMQ,打造高可靠消息驱动系统的不二之选!
【8月更文挑战第29天】Spring Cloud RocketMQ结合了Spring Cloud生态与RocketMQ消息中间件的优势,简化了RocketMQ在微服务中的集成,使开发者能更专注业务逻辑。通过配置依赖和连接信息,可轻松搭建消息生产和消费流程,支持消息过滤、转换及分布式事务等功能,确保微服务间解耦的同时,提升了系统的稳定性和效率。掌握其应用,有助于构建复杂分布式系统。
31 0
|
15天前
|
消息中间件 缓存 Java
如何优化大型Java后端系统的性能:从代码到架构
当面对大型Java后端系统时,性能优化不仅仅是简单地提高代码效率或硬件资源的投入,而是涉及到多层次的技术策略。本篇文章将从代码层面的优化到系统架构的调整,详细探讨如何通过多种方式来提升Java后端系统的性能。通过对常见问题的深入分析和实际案例的分享,我们将探索有效的性能优化策略,帮助开发者构建更高效、更可靠的后端系统。
|
16天前
|
缓存 监控 架构师
缓存数据一致性 - 架构师峰会演讲实录
缓存数据一致性 - 架构师峰会演讲实录
|
16天前
|
缓存 架构师 数据库
缓存系统稳定性 - 架构师峰会演讲实录
缓存系统稳定性 - 架构师峰会演讲实录
|
18天前
|
缓存 NoSQL Redis
【Azure Redis 缓存】Redission客户端连接Azure:客户端出现 Unable to send PING command over channel
【Azure Redis 缓存】Redission客户端连接Azure:客户端出现 Unable to send PING command over channel
|
14天前
|
缓存 NoSQL Java
Redis深度解析:解锁高性能缓存的终极武器,让你的应用飞起来
【8月更文挑战第29天】本文从基本概念入手,通过实战示例、原理解析和高级使用技巧,全面讲解Redis这一高性能键值对数据库。Redis基于内存存储,支持多种数据结构,如字符串、列表和哈希表等,常用于数据库、缓存及消息队列。文中详细介绍了如何在Spring Boot项目中集成Redis,并展示了其工作原理、缓存实现方法及高级特性,如事务、发布/订阅、Lua脚本和集群等,帮助读者从入门到精通Redis,大幅提升应用性能与可扩展性。
32 0

热门文章

最新文章