(2)商品模块---如何抗亿级流量访问

2023-09-27 23:54:49 浏览数 (1)

脱离业务场景的技术设计都是耍流氓

总体架构图:

商品详情页设计图商品详情页设计图

前言:商品模块首要考虑的问题是商品详情页的访问流量,所以接下来主要考虑商品详情页的设计问题

商品页面展示的数据很多,主要是商品的基本信息,比如名称颜色,商品介绍页,还有图片和视频展示,最要命的是不同类的商品的参数不同,比如电脑有内存,显卡,CPU等参数,衣服有尺码,男女等参数,口红有色号等参数

1.选用什么样的数据结构存储不同品类各异的商品参数呢?

MongDB是面向文档的数据结构,很好的满足不同类型参数的数据结构,在Redis中可以使用哈希的数据结构缓存数据

这好比,直接把一坨json数据存到了MySQL的text列中非常不方便,存到MongoDB就方便很多,MongoDB支持按着属性查值,很好的满足了业务场景的需要,但是联表查询和事物就非常孱弱,不过没关系,配合存有商品基本信息的MySQL使用,返回给客户端,为了提高访问速度,用Redis的哈希结构作为缓存,减轻数据库压力

2.图片和视频怎么存储

图片和视频大文件需要存储在单独的服务器上,而不能存到数据库中,现在各大云厂商都很好的支持图片或者视频存储,称之为对象存储,比如国内的七牛云,aws的S3,功能强大,简单方便,只需要APP或者小程序或者浏览器请求到对象存储的API就能返回图片或者视频,而且支持缩放转码,是真香,更牛的是可以设置CDN加速,这样得到响应的速度更快了

3.静态页面怎么快速响应

静态页面起初是通过Tomcat动态响应返回给前端,但是越来越多的商品详情需要展示,一股脑给返回显然不太恰当,可用使用Nginx代理静态页面,而哪些动态的商品参数数据,则通过Ajax从后台服务获取数据(前面提到的Redis作为缓存),很快就能获取到数据,这样就只有商品的个性化数据才需要从后台服务获取,减少了带宽和节省了资源

总结:

为了抗住流量,商品的基本参数存数据库,扩展参数存MongoDB,视频和图片存云厂商的对象存储服务中并且加上CDN加速,静态的页面可以让Nginx代理也上CDN,商品的具体参数可以通过前端页面Ajax从后台的数据库和MOngoDB获取值,为了提高响应速度,可以加上Redis作为前置屏障,缓存的策略使用Cache Aside的方式维护缓存,整体下来,只有少部分的流量会打到后台的服务器

铺垫:

  1. Cache Aside,是最简单实用的一种缓存更新策略,适用范围

也最广泛。如果你要缓存数据,没有什么特殊的情况,首先就应该考虑使用这个策略。

2.CDN 内容分发服务 Content Delivery Network,这是麻省理工学院的学生搞出的一套东西,挺实用

我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

0 人点赞