![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
高可用缓存架构讲解
文章平均质量分 90
liu1002880404
这个作者很懒,什么都没留下…
展开
-
Redis知识点综述
Redis集群的几个注意事项Redis集群使用CRC16对key进行hash,集群固定使用16384对hash出来的值取模。因为取模结果一定在16384之内,所以集群中的sharding(分片)实际就是如何将16384个值在n个主节点间分配如何分配取决于你的配置。Redis生产级集群需要容灾,为此,一般部署为n个主+n*m个从。n大小主要取决于单机性能,m大小主要取决于机器稳定性。Redis集群是弱一致性的,此处的一致,主要指主从之间的数据一致性。主要是因为redis在做数据更新时,不要求主从数据同原创 2022-03-08 14:01:15 · 465 阅读 · 0 评论 -
商品详情页依赖服务
商品详情页的数据,都是从各个服务来的商品服务、价格服务、库存服务、促销服务、广告服务、推荐服务等,商品服务,管理商品的数据 分类管理:增删改查 品牌管理:增删改查 商品基本信息管理:增删改查 商品规格管理:增删改查 商品属性管理:增删改查 商品介绍管理:编辑 价格服务SKU一个商品根据属性的不同会有不同的价格,如:土豪金、白色、深空灰,土豪金的价格就比其他颜色的手机要贵一点还有多件套餐出售,价格也是多种多样库存服务.原创 2020-07-23 08:47:56 · 145 阅读 · 0 评论 -
商品详情页架构中的队列架构
消息队列很多时候并不是简单的使用一个 MQ 就可以的,为了应对复杂的场景,需要设计一套复杂的队列几种队列解释有以下几种队列: 任务等待队列 任务排重队列(异构 Worker 对一个时间段内的变更消息做排重) 失败任务队列(失败重试机制) 优先级队列,刷数据队列(依赖服务洗数据)、高优先级队列(活动商品优先级高) 这些队列服务于某一种业务场景而存在的,如下图,已经很复杂了 依赖服务 数据变更信息投递到 消息等待队列 中 ...原创 2020-07-22 08:50:04 · 143 阅读 · 0 评论 -
商品详情页缓存介绍
项目缓存介绍 nginx 本地缓存:抗热点数据,小内存缓存访问最频繁的数据 各个机房的 redis 集群: 抗大量离散数据,采用一致性 hash 策略构建分布式 redis 缓存集群 tomcat 中的动态服务本地 jvm 堆缓存 支持在一个请求中多次读取一个数据,或者与该数据相关的数据 作为 redis 崩溃的备用防线 固定缓存一些访问频繁更改较少的数据,比如分类、品牌等数据 对缓存过期时间为 redis 过期时间的一原创 2020-07-22 08:42:15 · 812 阅读 · 0 评论 -
商品详情页整体架构介绍
商品详情分为三部分,整体架构如下图: 依赖服务(源) -> MQ -> 动态渲染服务 -> 多级缓存 负载均衡 -> 分发层nginx -> 应用层nginx -> 多级缓存 多级缓存 -> 数据直连服务 负载均衡 + 多机房模板渲染 + 1、2 级缓存 当自己缓存失效时,请求数据直连服务 数据直连服务 + 三级缓存 找自己本地缓存,不存在时从主集群获取信息, 如果主集群也没有,则直接从源服务获取信..原创 2020-07-22 08:31:34 · 5201 阅读 · 0 评论 -
商品详情页面展示的多元化
商品详情页介绍商品详情页的多模板化多套模板:比如聚划算商品详情、天猫超市商品、淘抢购、电器城不同模板的元数据大部分是一样的,只是展示方式不一样, 不同的业务,商品学详情页的个性化需求很多,数据来源也很多商品详情页结构拿一个淘宝详情页来举例时效性比较低的数据一个详情页包含了各种各样的数据 商品维度:标题、图片、属性 等等 主商品维度:商品介绍、规格参数 等等 规格 : 颜色与尺码的笛卡尔积组成了不同的 sku, 一般来看商品介绍、规则参数等都是公用的,而...原创 2020-07-21 19:14:05 · 1193 阅读 · 0 评论 -
高并发高可用复杂系统中的缓存架构(二十五) 高并发缓存穿透加大mysql压力及其解决
什么是缓存穿透?如上图所表述, 简单来说:一个 key 在所有缓存中都不存在,并且在 mysql 中也不存在,叫做缓存穿透根源就在于不存在的 key,考虑一个场景,如果大量不存在的 key 穿透到 mysql,恐怖的事情就来了,很有可能 mysql 被压死缓存穿透解决方案我们的缓存穿透解决方案,其实非常简单:每次从源服务(商品服务)查询到的数据为空,就说明这个数据根本就不存在,需要往 redis 和 ehcache 等缓存中写入一条空数据。另外再配合缓存变更监听推送事件,能让缓存中...原创 2020-07-21 08:37:28 · 222 阅读 · 0 评论 -
高并发高可用复杂系统中的缓存架构(二十四) 缓存雪崩及处理
什么是缓存雪崩?简单说:由于缓存不可用,导致大量请求访问后端服务,可能 mysql 扛不住高并发而打死, 像滚雪球一样,影响越来越大,最后导致整个网站崩溃不可用至于为什么会像滚雪球一样?整个与整个系统的架构有关; redis 集群彻底崩溃:不可用 缓存服务在请求 redis 时,会有大量的线程阻塞,占用资源 超时请求失败之后,会去 mysql 查询原始数据,mysql 抗不住,被打死 源头服务由于 mysql 被打死,对源服务的请求也被阻塞,占用资源 缓原创 2020-07-20 09:56:42 · 249 阅读 · 0 评论 -
高并发高可用复杂系统中的缓存架构(二十三) hystrix 与高可用系统架构
怎么保证高可用性:在各种系统的各个地方有乱七八糟的异常和故障的情况下,整套缓存系统还能继续健康的 run 着有一些将高可用的知识:HA、HAProxy 组件,主备服务间的切换,这就做到了高可用性, 主备实例,多冗余实例只是高可用最最基础的东西接下来会讲解在什么样的情况下,可能会导致系统的崩溃?以及系统不可用,针对各种各样的一些情况, 然后我们用什么技术,去保护整个系统处于高可用的一个情况下高可用有很多方式,在这里使用 hystrixhystrix 提供了高可用相关的各种各样的功能,确保在 h原创 2020-07-20 09:26:34 · 184 阅读 · 0 评论 -
高并发高可用复杂系统中的缓存架构(二十二) 新系统上线 redis 彻底崩溃导致数据无法恢复
068. 缓存冷启动问题:新系统上线 redis 彻底崩溃导致数据无法恢复什么是缓存冷启动?简单说就是缓存中没有数据,考虑下面两个场景 新系统第一次上线,此时在缓存里可能是没有数据的 系统在线上稳定运行着,但是突然间重要的 redis 缓存全盘崩溃了,而且不幸的是,数据全都无法找回来 系统第一次上线启动,系统在 redis 故障的情况下重新启动,在高并发的场景下就会出现所有的流量 都会打到 mysql(原始数据库) 上去。可能导致 mysql 崩溃以下是图示:「冷启.原创 2020-07-18 22:26:50 · 431 阅读 · 0 评论 -
高并发高可用复杂系统中的缓存架构(二十一)缓存热点数据 预热、热数据 storm讲解
接下来,这个商品详情页缓存架构,缓存预热问题和解决方案,缓存热点数据可能导致整个系统崩溃的问题,以及解决方案缓存相关的「热」:预热、热数据在解决方案和架构设计中,会引入大数据的实时计算的技术 storm。为什么要引入这个 storm,难道必须是 storm 吗?我们后面去讲解那个解决方案的时候再说缓存架构和 storm 的关系因为有些热点数据相关的一些实时处理的一些方案,比如快速预热,热点数据的实时感知和快速降级,全部要用到 storm因为我们可能需要实时的去计算出热点缓存数据,我们的业原创 2020-07-18 21:50:21 · 1038 阅读 · 0 评论 -
高并发高可用复杂系统中的缓存架构(二十) 分布式缓存重建并发冲突问题以及 zookeeper 分布式锁解决方案
什么是分布式缓存重建并发冲突问题?很简单,多个缓存服务实例提供服务,发现缓存失效,那么就会去重建,这个时候回出现以下几种情况: 多个缓存实例都去数据库获取一份数据,然后放入缓存中 新数据被旧数据覆盖 缓存 a 和 b 都拿了一份数据,a 拿到 12:00:01 的数据,b 拿到 12:00:05 的数据 缓存 b 先写入 redis,缓存 a 后写入。 以上问题有多重解决方案,如: 利用 hash 分发 相同商品分发到同一个服务中,服务中再用队列去重建 但是这就原创 2020-07-18 15:55:16 · 309 阅读 · 0 评论 -
高并发高可用复杂系统中的缓存架构(二十) 基于“分发层 + 应用层”双层 nginx 架构提升缓存命中率
缓存数据生产服务那一层已经搞定了,相当于三层缓存架构中的本地堆缓存 + redis 分布式缓存都搞定了就要来做三级缓存中的 nginx 那一层的缓存了缓存命中率低如果一般来说,你默认会部署多个 nginx,在里面都会放一些缓存,就默认情况下,此时缓存命中率是比较低的如上图,被均衡分发了,所以命中率很低。如何提升缓存命中率?方案:分发层+应用层,双层 nginx分发层 nginx,负责流量分发的逻辑和策略,这个里面它可以根据你自己定义的一些规则, 比如根据 product.原创 2020-07-18 10:42:45 · 429 阅读 · 0 评论 -
高并发高可用复杂系统中的缓存架构(十九) kafka在此项目中的应用
多级缓存的架构主要用来解决的问题是:时效高低数据的维度存储时效性不高的数据,比如一些商品的基本信息,如果发生了变更,假设在 5 分钟之后再更新到页面中, 供用户观察到,也是 ok 的,那么我们采取的是异步更新缓存的策略时效性要求很高的数据,如库存,采取的是数据库 + 缓存双写的技术方案,也解决了双写的一致性的问题上面这两条可能直接看觉得好像差不多的,这里忽略了一个解释,对于页面来说,需要静态的生成页面, 这个过程可能稍微耗时一些,而对于双写来说则快太多了,它不负责页面渲染等工作,只需要把缓存数据原创 2020-07-18 10:09:12 · 436 阅读 · 0 评论 -
高并发高可用复杂系统中的缓存架构(十八) 缓存服务数据流转流程分析,redis LRU清理算法
一,多级缓存架构,从底往上做,先分析缓存数据的生产数据库底层这一块如上图 监听多个 kafka topic,每个 kafka topic 对应一个服务 简化一下,监听一个 kafka topic 如果一个服务发生了数据变更,那么就发送一个消息到 kafka topic 中 缓存数据生产服务监听到了消息以后,就发送请求到对应的服务中调用接口以及拉取数据,此时是从 mysql 中查询的 缓存数据生产服务拉取到了数据之后,会将数据在本地缓存中写入一份,就是 e.原创 2020-07-18 09:19:26 · 244 阅读 · 0 评论 -
高并发高可用复杂系统中的缓存架构(十七) 实时性要求不高的数据缓存更新问题
整个缓存的技术方案,分成两块 实时性较高数据 比如说库存,销量之类的这种数据,我们采取的实时的缓存+数据库双写的技术方案,双写一致性保障的方案 实时性要求不高的数据 比如说商品的基本信息,等等,我们采取的是三级缓存架构的技术方案,就是说由一个专门的数据生产的服务,去获取整个商品详情页需要的各种数据,经过处理后,将数据放入各级缓存中,每一级缓存都有自己的作用 我们先来看看一下,所谓的这种实时性要求不高的数据,在商品详情页中,都有哪些电商网站中的商品详情页的数据结构分析商品的原创 2020-07-17 23:02:39 · 340 阅读 · 0 评论 -
高并发高可用复杂系统中的缓存架构(十六) 实现缓存与数据库双写一致性保障方案
再来回顾下之前的思路: 数据更新:根据唯一标识路由到一个队里中,「删除缓存 + 更新数据」 数据读取:如果不在缓存中,根据唯一标识路由到一个队里中,「读取数据 + 写入缓存」 投入队里之后,就等待结果完成,由于同一个标识路由到的是同一个队列中, 所以相当于加锁了。下面就来实现这个思路,分几步走: 系统初启动时,初始化线程池与内存队列 两种请求对象封装 请求异步执行 service 封装 两种请求 Controller 封装 读请求去重优化原创 2020-07-17 22:53:30 · 194 阅读 · 0 评论 -
高并发高可用复杂系统中的缓存架构(十五) 缓存架构讲解,如何保证缓存数据库一致性
前面讲解完了 redis 如何支撑海量数据、高并发读写、高可用服务的架构redis 架构,在我们的真正类似商品详情页读高并发的系统中,redis 就是底层的缓存存储的支持从现在开始,我们正式开始做业务系统的开发商品详情系统旁白亿级流量以上的电商网站的商品详情页的系统,真实的系统中包含大量的业务,十几个人做一两年才堆出来复杂的业务系统。如果只是纯粹的架构,那么就是一个骨架,所以必须有少量的业务,有血有肉,把整个项目串起来,在业务背景下去学习架构,效果才会理想讲解商品详情页系统,主要讲解原创 2020-07-17 22:34:28 · 622 阅读 · 0 评论