Php+Nginx(分布式)+Mysql+Redis(集群)+lua 缓存架构

缓存架构

  1. 缓存: 是存储在计算机的一个原始数据的复制集,为了便于访问,缓存中的数据可能是提前计算生成好的结果;

  2. 使用场景: 主要解决高并发,大流量场景下的热点数据的性能,提供高性能的数据快速访问;

缓存架构方案:


       一. 初始架构(动态访问) : 每次访问服务器,都要要从数据库中查询数据,然后通过php模板引擎,最终返回HTML页面; 问题:每次都要请求访问数据库,性能差; 


       二. 页面全静态化:当用户第一次访问时,就调用相关依赖服务器,渲染生成一个HTML,然后利用rsync的方式同步推送到多台Nginx服务器上,当用户第二次访问时,任何一台服务器上都有全量的HTML静态页面可以放回,不请求后端服务器;

            问题:  

             1. 全量更新: 假设是商品详情页,如果某一个商品分类,商家等信息,变更了,那么商家的详情页面都需要重新生成静态HTML页面;

             2.更新速度过慢: 分类,店铺,商家信息数据越来越多,重新生成HTML的负载越来越高,rsync全量同步所有的Nginx,负载也越来越高,  从数据生成静态HTML,再到全量同步到所有的Nginx上,时间越来越慢;

             3. 扩容问题: 因为每个商品详情也都要全量同步到Nginx上,导致系统无法扩容,无法增加系统容量;


       三. 动态渲染技(Nginx+Mysql+Redis+Lua)

             优点:页面模块化,页面中的某个区域变化,只要更新这个区域中的数据即可;支持高性能访问;支持水平扩容的伸缩性架构;

             解决前面架构问题:

             1.更新问题: 不是在生成和推送HTML,数据直接更新到Redis中,然后走动态渲染,性能大大提高,访问时利用Lua从缓存中读取数据,动态渲染HTML模板;

             2.全量更新: 数据和模板分离,数据更新到Redis中,模板存放在Nginx上,模板变更只更新Nginx上的模板,第二次商品详情页访问,不需需要重新生成所有的HTML,直接走动态渲染,用最新的模块+最新的数据动态渲染最新的HTML;

             3.容量问题: 不需要依赖Nginx所有机器磁盘空间存储大量的HTML,将数据存放在Redis,HTML就存放模板,大大简书空间占用,且Redis集群,Nginx都可以扩容; 

             MyAnswer博客



二级缓存: 

1.Nginx内存缓存,使用lua的模块          后台更新数据后: 发送api请求删除缓存

2.Redis缓存


缓存大量失效: 在存储缓存时,设置随机缓存时间


MyAnswer博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论