大流量下前端页面静态化处理提升服务整体qps

来源:14-6 大流量下前端页面静态化处理提升服务整体qps

singwa

2020-06-04

      随着用户不断的增多,无可避免的会导致我们的web服务访问越来越慢,受限于带宽和服务器同一时间的请求次数的限制,我们往往需要对我们的系统进行代码优化和服务器配置的优化。然后动态页面静态化是解决此性能方式之一,页面静态化在实际web系统领域用的很广,一些大公司,比如京东,淘宝,新浪等都会使用此项技术。

理论知识请查看我免费课程

PHP实现页面静态化 :  https://www.imooc.com/learn/330

 

http://img1.sycdn.imooc.com/szimg/5ed90b7e094be3ed04640562.jpg 

 

后台 -> 自动生成自动化页面 index.html  =》后端机器某一个目录 -> 异步任务 下发到 真实前端机器上。 100 台。

定时每5分钟 10分钟  index.html  -> 异步下发


   如下架构图

http://img1.sycdn.imooc.com/szimg/5ed915f209e436a515640718.jpg

如上图我们生成页面静态化的页面有3种情况:

1、如果是商品详情页的 当我们新增商品或者更新商品操作的时候,当我们新增或者更新操作完毕之后, 把商品ID加入kafka消息队列中,然后异步任务去读取kafka里面的ID,PHP根据这个ID查询商品详情页面所需要的数据, 利用页面静态化思想生成纯静态化的页面,这个页面放到单实例机器某一个特定的目录下, 然后 利用Linux的async 把这个目录的文件同步到远程前端机器。

思考一个问题: 有同学就会问了,为什么商品新增或者更新完毕之后 不马上来生成页面静态化呢? 

答案: 因为这样你是做同步操作,万一这种方式生成页面静态化慢 那就会影响新增或者更新商品的体验,所以我们需要做异步处理,那就可以利用kafka消息队列来做。 ID放到卡夫卡里面,然后消费者端直接读取他 进行后续的操作

2、第二种方案, 比如需要生成类似首页这种静态化页面,可以在后端增加一个人工操作功能,后端用户只需要点击某一个按钮,就可以生成,如上图2操作流程


3、第二种方案如果用户不愿意去点击,我们还可以借助Linux定时任务来做,比如设置每5分钟 或者 每10分钟定时来生成,具体设置多少时间根据自身业务来定。



写回答

1回答

singwa

提问者

2020-06-04

请关注。

2
1
qq_糊涂仙_0
针对生成静态化页面的第一种方案,放在kafka用异步的方式生成,出现数据不一致的情况该怎么办呢? 商品数据修改了,但是异步任务还没有执行,此时前端访问到的数据是未修改的。 我想的是商品数据修改成功后把之前的相关静态化页面删掉,不知道是否正确?或者有没有更好的做法?
2020-09-14
共1条回复

全流程开发 TP6.0实战高并发电商服务系统

一课就能掌握TP6.0基础及运用,打造完整高并发的电商后端项目

1463 学习 · 1332 问题

查看课程