亿级流量商品详情页的多级缓存架构以及架构中每一层的意义(三级缓存架构)

 

 

很多人以为,做个缓存,其实就是用一下redis,访问一下,就可以了,简单的缓存

做复杂的缓存,支撑电商复杂的场景下的高并发的缓存,遇到的问题,非常非常之多,绝对不是说简单的访问一下redsi就可以了

采用三级缓存:nginx本地缓存+redis分布式缓存+tomcat堆缓存的多级缓存架构

时效性要求非常高的数据:库存

一般来说,显示的库存,都是时效性要求会相对高一些,因为随着商品的不断的交易,库存会不断的变化

当然,我们就希望当库存变化的时候,尽可能更快将库存显示到页面上去,而不是说等了很长时间,库存才反应到页面上去

时效性要求不高的数据:商品的基本信息(名称、颜色、版本、规格参数,等等)

时效性要求不高的数据,就还好,比如说你现在改变了商品的名称,稍微晚个几分钟反应到商品页面上,也还能接受

商品价格/库存等时效性要求高的数据,而且种类较少,采取相关的服务系统每次发生了变更的时候,直接采取数据库和redis缓存双写的方案,这样缓存的时效性最高

商品基本信息等时效性不高的数据,而且种类繁多,来自多种不同的系统,采取MQ异步通知的方式,写一个数据生产服务,监听MQ消息,然后异步拉取服务的数据,更新tomcat jvm缓存+redis缓存

nginx+lua脚本做页面动态生成的工作,每次请求过来,优先从nginx本地缓存中提取各种数据,结合页面模板,生成需要的页面

如果nginx本地缓存过期了,那么就从nginx到redis中去拉取数据,更新到nginx本地

如果redis中也被LRU算法清理掉了,那么就从nginx走http接口到后端的服务中拉取数据,数据生产服务中,现在本地tomcat里的jvm堆缓存中找,ehcache,如果也被LRU清理掉了,那么就重新发送请求到源头的服务中去拉取数据,然后再次更新tomcat堆内存缓存+redis缓存,并返回数据给nginx,nginx缓存到本地

2、多级缓存架构中每一层的意义

nginx本地缓存,抗的是热数据的高并发访问,一般来说,商品的购买总是有热点的,比如每天购买iphone、nike、海尔等知名品牌的东西的人,总是比较多的

这些热数据,利用nginx本地缓存,由于经常被访问,所以可以被锁定在nginx的本地缓存内

大量的热数据的访问,就是经常会访问的那些数据,就会被保留在nginx本地缓存内,那么对这些热数据的大量访问,就直接走nginx就可以了

那么大量的访问,直接就可以走到nginx就行了,不需要走后续的各种网络开销了

redis分布式大规模缓存,抗的是很高的离散访问,支撑海量的数据,高并发的访问,高可用的服务

redis缓存最大量的数据,最完整的数据和缓存,1T+数据; 支撑高并发的访问,QPS最高到几十万; 可用性,非常好,提供非常稳定的服务

nginx本地内存有限,也就能cache住部分热数据,除了各种iphone、nike等热数据,其他相对不那么热的数据,可能流量会经常走到redis那里

利用redis cluster的多master写入,横向扩容,1T+以上海量数据支持,几十万的读写QPS,99.99%高可用性,那么就可以抗住大量的离散访问请求

tomcat jvm堆内存缓存,主要是抗redis大规模灾难的,如果redis出现了大规模的宕机,导致nginx大量流量直接涌入数据生产服务,那么最后的tomcat堆内存缓存至少可以再抗一下,不至于让数据库直接裸奔

同时tomcat jvm堆内存缓存,也可以抗住redis没有cache住的最后那少量的部分缓存

推荐这些技术文章:

从单体架构到微服务架构演进

简介
随着互联网的发展,互联网企业的业务也在不断的飞速发展,进而导致系统的架构也在不断的发生着变化。总体来说,系统的架构大致经历了:单体应用架构—>垂直应用架构—>分布式架构—>SOA架构—>微服务架构的演变。当然,很多互联网企业的系统架构已经向Service Mesh(服务化网格)演变;

单体应用架构
在企业发展的初期,一般公司的网站流量都比较小,只需要一个应用,将...

多级缓存-OpenResty快速入门

需求:实现商品详情页数据查询,在OpenResty中接收请求,并返回一段商品的假数据。
步骤一:修改nginx.conf文件1.在nginx.conf的http下面,添加对OpenResty的Lua模块的加载:

#####Windows版
#加载lua 模块
lua_package_path "D:/dev/openresty-1.19.9.1/lualib/?.lua;;";
#加载c模...

.net Redis缓存处理

1.下载Redis工具
下载地址:https://github.com/MSOpenTech/redis/releases  支持Windows32位和64位,选择适合自己的版本
 
2.安装成功之后在CMD启动Redis

 
然后再打开一个新的CMD命令窗口
cd C:\Users\Administrator\Desktop\redis\Redis3 打开地址C...

CPU缓存一致性协议(MESI)

计算机的缓存一致性
计算机在运行程序时,每条指令都是在CPU中执行的,在执行过程中势必会涉及到数据的读写。我们知道程序运行的数据是存储在主存中,这时就会有一个问题,读写主存中的数据没有CPU中执行指令的速度快,如果任何的交互都需要与主存打交道则会大大影响效率,所以就有了CPU高速缓存(Cache Memory)。CPU高速缓存为某个CPU独有,只与在该CPU运行的线程有关。 有了CPU高速缓存...

亿级流量架构,服务器如何扩容?写得太好了

为什么要扩容
说人话就是, 无论如何优化性能,能达到的最大值是一定的,对于一个用户量大的应用,可以对服务器进行各种优化,诸如限流、资源隔离,但是上限还是在那里,这时候就应该改变我们的硬件,例如使用更强的CPU、更大的内存,在前文中举了一个学生食堂打饭的例子,如果学生多了,可以通过令牌桶算法优先给高三学生令牌打饭,但是如果高三的学生还是很多呢?那就只有增加窗口或者食堂的数量,也就是硬件上的扩容。
...

千万级规模高性能、高并发的网络架构经验分享

千万级规模高性能、高并发的网络架构经验分享
 

主 题 :INTO100沙龙时间 :2015年11月21日下午地点 :梦想加联合办公空间分享人:卫向军(毕业于北京邮电大学,现任微博平台架构师,先后在微软、金山云、新浪微博从事技术研发工作,专注于系统架构设计、音视频通讯系统、分布式文件系统和数据挖掘等领域。)
架构以及我理解中架构的本质
在开始谈我对架构...

如何手动刷新整个站点的 页面缓存

问题
  求代码实现 我的站点访问量和更新速度都不高   缓存时间可以很长  轮询和推拉模式我感觉都不合适 ,我想要的只是在我更新玩数据库时 手动更新一下缓存就可以了, 再线等待!!!

最佳回答
在所有放入缓存的地方都会有缓存键对吧?在后台做一个按钮,按钮里执行更新这些缓存键的所有缓存。 ...

完成spring boot整合ehcache的搭建以支持服务本地堆缓存

接下来要做这个多级缓存架构,从底往上做,先做缓存数据的生产这一块
我们画图来简单介绍一下整个缓存数据生产服务的一个工作流程
1、商品详情页缓存数据生产服务的工作流程分析
(1)监听多个kafka topic,每个kafka topic对应一个服务(简化一下,监听一个kafka topic)(2)如果一个服务发生了数据变更,那么就发送一个消息到kafka topic中(3)缓存数据生产服务监听到了...

热点数据多级缓存方案实现(进行中)

热点数据多级缓存方案实现
集成CountMinSketch过滤器+本地缓存caffeine+redis缓存+数据库的多级缓存方案
涉及技术点:

caffeine本地缓存
redis:lua脚本、redis事务的原子性
CountMinSketch算法
设计思想:计算向数据端迁移

1,背景概述
我们系统在使用过程中,并非所有的数据都是时刻活跃的状态,一般情况下只有少部分的活跃数据占据大量的请求...

画图带你彻底弄懂三级缓存和循环依赖的问题

大家好。我们都知道,Spring可以通过三级缓存解决循环依赖的问题,这也是面试中很常见的一个面试题,本文就来着重讨论一下有关循环依赖和三级缓存的问题。
一、什么是循环依赖
大家平时在写业务的时候应该写过这样的代码。

 

其实这种类型就是循环依赖,就是AService 和BService两个类相互引用。
二、三级缓存可以解决的循环依赖场景
如上面所说,大家平时在写这种代码的时候...

文章标题:亿级流量商品详情页的多级缓存架构以及架构中每一层的意义(三级缓存架构)
文章链接:https://www.dianjilingqu.com/1608.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。
THE END
< <上一篇
下一篇>>