脱离业务场景的技术设计都是耍流氓
总体架构图:
商品页面展示的数据很多,主要是商品的基本信息,比如名称颜色,商品介绍页,还有图片和视频展示,最要命的是不同类的商品的参数不同,比如电脑有内存,显卡,CPU等参数,衣服有尺码,男女等参数,口红有色号等参数
MongDB是面向文档的数据结构,很好的满足不同类型参数的数据结构,在Redis中可以使用哈希的数据结构缓存数据
这好比,直接把一坨json数据存到了MySQL的text列中非常不方便,存到MongoDB就方便很多,MongoDB支持按着属性查值,很好的满足了业务场景的需要,但是联表查询和事物就非常孱弱,不过没关系,配合存有商品基本信息的MySQL使用,返回给客户端,为了提高访问速度,用Redis的哈希结构作为缓存,减轻数据库压力
图片和视频大文件需要存储在单独的服务器上,而不能存到数据库中,现在各大云厂商都很好的支持图片或者视频存储,称之为对象存储,比如国内的七牛云,aws的S3,功能强大,简单方便,只需要APP或者小程序或者浏览器请求到对象存储的API就能返回图片或者视频,而且支持缩放转码,是真香,更牛的是可以设置CDN加速,这样得到响应的速度更快了
静态页面起初是通过Tomcat动态响应返回给前端,但是越来越多的商品详情需要展示,一股脑给返回显然不太恰当,可用使用Nginx代理静态页面,而哪些动态的商品参数数据,则通过Ajax从后台服务获取数据(前面提到的Redis作为缓存),很快就能获取到数据,这样就只有商品的个性化数据才需要从后台服务获取,减少了带宽和节省了资源
为了抗住流量,商品的基本参数存数据库,扩展参数存MongoDB,视频和图片存云厂商的对象存储服务中并且加上CDN加速,静态的页面可以让Nginx代理也上CDN,商品的具体参数可以通过前端页面Ajax从后台的数据库和MOngoDB获取值,为了提高响应速度,可以加上Redis作为前置屏障,缓存的策略使用Cache Aside的方式维护缓存,整体下来,只有少部分的流量会打到后台的服务器
也最广泛。如果你要缓存数据,没有什么特殊的情况,首先就应该考虑使用这个策略。
2.CDN 内容分发服务 Content Delivery Network,这是麻省理工学院的学生搞出的一套东西,挺实用
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。