基于静态站点内容动态推送的方案

一个大型的B2B或者B2C网站,必然要考虑访问用户量和站点自身的内容量问题,如果解决高访问量和海量内容带来的性能问题呢。当然对于非常成熟的企业来说可以采用分布式数据库和服务器,通过负载均衡同样能解决问题。而我们采用的是最简单、最容易、成本最低的实现方式,那就是使用静态镜像站点。

服务器一:阿里云服务器(原站点)

服务器二:阿里云OSS存储服务(镜像站点)

配置镜像站点映射到云服务器,云服务器的每个页面的访问会生成静态页面,当静态页面存在时,则直接读取静态页面,若静态页面不存在则动态生成。

那么问题来了,当网站内容有更新时,但页面静态文件已经存在的时候,用户访问时get到的永远是已经生成的那个静态文件,而无法读取到最新的页面内容。

也许你会说这个很简单,定时将旧的静态文件删除了不就好了嘛。没错,一开始本君也是这样做的,但很快就发现有问题,这样做行不通了。

问题一:定时清除所有静态文件,那么新的静态文件生成的期间,用户访问量若大,则性能问题一样会出现

问题二:网站海量的内容,生成静态文件不是一时半刻就能完成的,单个服务器能承受的并发很底,几十万个静态页面都要好几天才能生成完

问题三:最头痛的是阿里OSS存储服务器读取原站点的页面只有3s的响应时间,如果页面响应时间久了一点,则会出现文件找不到的错误。

接下来本君要说重点了,我们可以采用主动推送方式,具体如下:

1. 定义一张路由表,记录网站各页面的路由地址配置

2. 定义一张路由参数表,记录参数名称以及参数值读取的sql,sql支持指定时间点查询

3. 定义一张静态页面生成历史记录表。记录每个具体的页面url、路由名称、存储oss站点、页面生成状态、页面生成内容、生成时间

实现一个服务,每5分钟执行一次,读取路由参数表,并执行相应的sql,同样sql参数指定时间点为5分钟内。将sql执行读取到的参数与路由的url组合成一组具体的url,比较参数更新时间和历史记录生成的时间,若参数更新时间晚于html生成时间,则将记录插入到历史记录表标记状态为未请求。

同时每次任务执行读取指定条数未请求的记录,开始构造HttpWebRequest请求原站点,读取到最新的html内容。

并更新到历史记录表,同时判断当响应状态为200时(状态判断是为了避免因数据问题页面出错,而到账oss站点页面出错),则同步html内容到oss站点。

有时候,如果我们对于页面的布局做了修改,可能需要整站更新,这就需要一定时间断之后才能更新完成。但是如果运维人员有更新产品数据,那么我们应该优先更新5分钟内有更新的这些数据。所以修改了5分钟内读取到数据生成的url记录会直接执行。

同时,我们会发现这样做还带来另一个好处,那就是自动化测试。当网站大量生成静态页面时,每个静态页面的生成状态,以及生成内容都会保存到数据表中。我们就可以定期分析这些访问记录,检查生成异常的这些数据,就可以轻易的检查到项目代码中存在的bug,进而去修正它。

时间: 2024-10-07 06:13:17

基于静态站点内容动态推送的方案的相关文章

Linux下使用ISC DHCP可以实现动态推送静态路由表

ISC DHCP可以实现动态推送静态路由表,先做个记号. 参考: https://gauvain.pocentek.net/docs/dhcpd-push-routes/ http://www.isc.org/downloads/dhcp/ https://ercpe.de/blog/pushing-static-routes-with-isc-dhcp-server 原文地址:https://www.cnblogs.com/EasonJim/p/8427223.html

安卓推送技术方案实现探讨

背景介绍 随着苹果产品的风靡,推送技术在国内也越来越热门.推送最开始用于邮件系统.随着iPhone 和 Android 手机的风靡,逐渐在手机上也越来越常见.不少手机客户端也时常推送一些消息. 推送技术的应用 推送技术在手机上的应用主要有两块:广告推送.SNS信息推送. l  广告推送:给目前有一定安装量但没有盈利模式的手机应用开发者带来了一定希望,但要注意推送的频度和内容选中,不然会因为推送的东西用户不感兴趣造成打扰. l  SNS信息推送:主要用于QQ空间.人人网.微博和天涯论坛等web2.

atitit.web 推送实现方案集合

atitit.web 推送实现方案集合 1. 俩中模式 Push/Pull 1 2. 须要实现的特性 2 2.1. 推送消息广播. 2 2.2. 推送定向消息. 2 2.3. 提供连接上线前.上线.下线前.下线.发送消息等多种可处理事件. 2 2.4. 消息缓存机制.确保长轮询工作模式下不丢失消息. 2 2.5. client正常下线,服务端可马上感知. 2 2.6. client异常停止工作,服务端可定时检查并感知. 2 2.7. 以注冊通道应用的方式.让开发人员对框架功能进行扩展.实现自己的

IM推送保障及网络优化详解(二):如何做长连接加推送组合方案

对于移动APP来说,IM功能正变得越来越重要,它能够创建起人与人之间的连接.社交类产品中,用户与用户之间的沟通可以产生出更好的用户粘性. 在复杂的 Android 生态环境下,多种因素都会造成消息推送不能及时达到客户端.另外,不稳定的移动网络也给数据传输的速率和可靠性增加了障碍. 本文详解了网易云信IM SDK在应对弱网环境.移动端硬件限制以及Android复杂的生态现状时的探索与心得.如何实现不影响用户体验的后台保活,改善的长连接加推送组合方案,以及在弱网环境大数据传输的优化实践. 相关阅读推

Python web实时消息服务器后台推送技术方案---GoEasy

Goeasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送!个人感觉goeasy推送更稳定,推送速度快,代码简单易懂上手快浏览器兼容性:GoEasy推送支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等.支 持不同的开发语言:   GoEasy推送提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过RestfulAPI来实现后台实时推送.

C(++) web实时消息服务器后台推送技术方案---GoEasy

Goeasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送!个人感觉goeasy推送更稳定,推送速度快,代码简单易懂上手快浏览器兼容性:GoEasy推送支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等.支 持不同的开发语言:   GoEasy推送提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过RestfulAPI来实现后台实时推送.

node.js web实时消息服务器后台推送技术方案---GoEasy

Goeasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送!个人感觉goeasy推送更稳定,推送速度快,代码简单易懂上手快浏览器兼容性:GoEasy推送支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等.支 持不同的开发语言:   GoEasy推送提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过RestfulAPI来实现后台实时推送.

Websocket web实时消息服务器后台推送技术方案---GoEasy

Goeasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送!个人感觉goeasy推送更稳定,推送速度快,代码简单易懂上手快浏览器兼容性:GoEasy推送支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等.支 持不同的开发语言:   GoEasy推送提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过RestfulAPI来实现后台实时推送.

PHP web实时消息服务器后台推送技术方案---GoEasy

Goeasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送!个人感觉goeasy推送更稳定,推送速度快,代码简单易懂上手快浏览器兼容性:GoEasy推送支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等.支 持不同的开发语言:   GoEasy推送提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过RestfulAPI来实现后台实时推送.