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

时间:2019-09-26 16:09

对于大型B2B或B2C网站,在解决由高流量或高流量内容引起的性能问题时,应考虑网站本身的用户数量和内容。
当然,对于一个非常成熟的公司,您可以使用数据库和分布式服务器,而负载平衡也可以解决问题。
我们使用最简单,最简单和最经济的实现,包括使用静态镜像站点。
服务器1:阿里云服务器(原站点)
服务器2:阿里云OSS存储服务(镜像站点)
配置镜像站点以分配给云中的服务器。访问云中服务器的每个页面会生成一个静态页面。如果存在静态页面,则直接读取。如果不存在静态页面,则动态生成静态页面。
之后,出现问题。如果网站的内容已更新但页面的静态文件已经存在,则用户将始终获取访问时生成的静态文件,并且无法读取最新页面的内容。
也许我会说这很简单,定期删除旧的静态文件并不好。
是的,我一开始就做到了,但我很快就发现有一个问题而且它没有用。
问题1:定期删除所有静态文件,然后删除静态文件创建期间。如果有大量用户访问权限,则会出现性能问题
问题2:网站内容庞大,静态文件的生成无法在短时间内完成,单台服务器并发性可以很低,几十万天就能完成需要完成动态页面
问题3:最大的问题是Ali OSS存储服务器读取原始站点页面的响应时间仅为3秒。如果页面响应时间有点长,您将收到文件未找到错误。
接下来,我将谈谈关键点。可以如下采用主动插入方法。
1
定义路由表以记录网站每个页面的路由地址的设置
2
定义路由参数表并记录参数名称和读取sql参数的值。sql支持时间点查询。
3
定义静态页面生成历史表。
记录每个特定页面的URL,路由名称,oss存储站点,页面生成状态,页面生成内容,生成时间
实现服务并每5分钟运行一次,读取路由参数表,并执行相应的SQL。相同的sql参数指定5分钟内的时间。
sql读取的参数与特定URL的根的URL组合,以比较参数更新时间和生成历史记录的时刻。如果参数更新时间晚于html生成时间,请在历史记录表的标记状态中插入记录。
同时,每个任务读取指定数量的未经请求的记录,开始构建HttpWebRequest请求的原始站点,并读取最新的html内容。
然后,更新历史表,同时确定响应状态为200(认为由于数据问题页面导致的错误被避免并且判断在oss站点的页面上发生错误),并且HTML内容与oss站点同步一直。
有时,如果您更改页面设计,则可能需要更新整个站点。更新将需要一些时间。
但是,如果维护人员更新产品数据,则必须先在5分钟内更新更新的数据。
因此,直接执行5分钟后读取的数据生成的URL记录的更改。
与此同时,事实证明这带来了另一个好处:自动测试。
当网站生成大量静态页面时,每个静态页面的生成状态和生成的内容都存储在数据表中。
您可以定期分析这些访问记录,验证引发异常的数据,并轻松验证和纠正项目代码错误。