在电商网站中,单页Web是非常常见的一种形式,比如首页、频道页、广告页等都属于单页应用。而这种页面是由模板+数据组成。传统的构建方式一般通过静态化实现。而这种方式的灵活性并不是很好,比如页面模板部分变更了需要重新全部生成。因此最好能有一种实现方式是可以实时动态渲染,以支持模板的多变性。另外也要考虑好如下几个问题:
1、动态化模板渲染支持;
2、数据和模板的多版本化:生产版本、灰度版本和预发布版本;
3、版本回滚问题,假设当前发布的生产版本出问题了如何快速的回滚到上一个版本;
4、异常问题,假设渲染模板时遇到了异常情况(比如获取Redis出问题了),如何处理;
5、灰度发布问题,比如切20%量给灰度版本;
6、预发布问题,目的是在正式环境测试数据和模板的正确性。
整体架构静态化页面的方案如下图所示:
直接将生成的静态页推送到相关服务器即可。使用这种方式要考虑文件操作的原子化问题(即从老版本切换到新版本如何做到文件操作原子化)。
而动态化方案的整体架构如下图所示,分为三大系统:CMS系统、控制系统和前端展示系统。
CMS系统
1、在CMS系统可以配置页面的模板和数据;
1.1、模板动态在CMS系统中维护,即模板不是一个静态文件,而是存储在CMS中的一条数据,最终发布到“发布数据存储Redis”中,前端展示系统从Redis中获取该模板进行渲染,从而前端展示系统更换了模板也不需要重启,纯动态维护模板数据;
2、原始数据存储到“元数据存储Mysql”中即可,比如频道页一般需要:前端访问的URL、分类、轮播图、商品楼层数据等;这些数据按照相应的维度存储在CMS系统中;
3、提供发布到“发布数据存储Redis”的控制,将CMS系统中的原始数据和模板数据组装成聚合数据(JSON存储)同步到“发布数据存储Redis”,以便前端展示系统获取进行展示;此处提供三个发布按钮:正式版本、灰度版本和预发布版本。
目前存在如下几个问题:
1、用户如访问