高并发问题

  • 商品详情页(商详页)一定是整个系统中DAU(日均访问次数)最高的页面之一。不难理解,用户购买前一定会货比三家。如果在设计时没考虑高并发的问题,大促的时候,商品系统必然是第一个被流量冲垮的系统。

商品规模问题

  • 数量多、重量大
  • 为什么数量多,国内一线电商SKU(库存单元,在电商行业可以理解为商品)的数量大约在几亿到几十亿,当然实际没这么多种商品,这里面有很多原因,比如同一个商品有不同版本型号,再比如,商家为了促销需要,可能会反复上架同一个商品或者给同一个商品配不同的马甲
  • 为什么重量大,一个商品详情页,包含大量文字、图片和视频,甚至还有AR/VR玩法。

商品系统需要保存的数据

  • 灰色部分来自于电商的其他系统,暂且不管。彩色部分都是商品系统需要存储的内容。
  • 内容如何保存呢,是否可以设计一张商品主表,把数据放进去,一张表存不下就再加几张表?不好意思,这样不行
  • 这样做的好处就是糙快猛,简单可靠且容易实现,但是撑不了多少数据量,撑不了多少并发。如果要低成本快速构建一个小规模电商,这是种合理选择
  • 规模再大的话,就不能这么干了,不能用数据库,且任何单一一种存储方式都没办法满足,需要分而治之
  • 可以把商品系统需要存储的数据按照特点,分成基本信息,商品参数,商品介绍和图片视频几个部分,分别进行存储

商品基本信息如何存储

  • 包括商品的主副标题、价格、颜色等商品最基本的属性,这些属性是固定的,不太可能因为需求或者不同的商品而变化,而且这部分数据也不会太大,可以在数据库建一张表来保存商品基本信息。
  • 此外,还需要在数据库之前,加一个缓存,抵挡大部分读请求,可以使用Redis或Memcached,这两种都是``基于内存的KV存储`。
  • 缓存具体使用方法:处理商品信息读请求时,先查缓存,找到就直接返回,没找到再查数据库,把数据库中的信息返回给前端,顺便把数据放到缓存中。更新商品信息时,在更新数据库同时,删除掉缓存中的数据。`
  • 这种缓存更新策略,称为Cache Aside,是最简单实用的一种策略,适用范围也最广泛,此外还有Read/Write ThroughWrite Behind等。
  • 设计商品信息基本表时,有一点需要注意,一定要保留商品数据的每一个版本,因为商品数据是随时变化的,但是订单中关联的商品数据是下单时刻的数据,这很重要。可以为每一个历史版本的商品数据保存快照,可以创建一个历史表存储,也可以保存到kv存储中

使用MongoDB保存商品参数

  • 参数就是商品特征,比如电脑内存、手机屏幕尺寸等。不同类型商品参数完全不同
  • 由于不同种商品参数维度不同,所以不方便用固定表结构来存储,而MongoDB最大的特点,表结构不需要事先定义,其实,是根本没有表结构。支持把任意数据放入同一张表。
  • MongoDB的每一行数据,存储层就是BSON格式(一种更紧凑的JSON),当然这样的灵活性是有代价的,不支持SQL,多表联合查询和复杂事务比较弱
  • 对于商品参数信息,数据量大,结构不统一的特点,MongoDB都可以很好满足。

使用对象存储图片视频

  • 图片视频占用空间比较大,一般存储方式是数据库只保存图片和视频的ID或URL,实际的图片视频以文件的方式单独存储。
  • 首选方式是保存在对象存储(Object Storage)中。各大云厂商都提供对象存储服务,比如七牛云或者开源的MinIO等。对象存储可以简单理解为无限容量的大文件KV存储
  • 访问图片视频时,也不需要经过商品后端服务,页面直接通过对象存储提供的URL来访问,几乎所有对象存储云服务都自带CDN(Content Delivery Network)加速服务,响应时间比直接请求业务服务更短。

商品介绍静态化

  • 商品介绍在详情页中比重最大,包含大量带格式的文字图片视频,图片视频使用对象存储,文本一般随着详情页静态化,保存在HTML中。
  • 静态化是相对于动态页面来讲,部署到Tomcat中的Web系统,返回的都是动态页面,也就是在Web请求时,动态生成的。比如详情页,发送请求获取各种数据,动态拼接页面返回给浏览器。不过现在基本不这么做,因为每个SKU的商详页,每次动态生成的页面内容时完全一样的。生成多次不仅浪费服务器资源,速度还慢,关键Tomcat能抗的并发照Nginx差远了
  • 商品介绍是不怎么变的,那不如把页面事先生成好,保存成一个静态的HTML,访问时直接返回这个HTML,这就是静态化
  • 静态化之后,不仅仅可以节省服务器资源,还可以利用CDN加速,把商详页放到离用户最近的CDN服务商,提高访问速度。
  • 商品价格、促销信息等需要频繁变动的,不能静态化,可以使用AJAX请求商品系统动态获取。

总结

  • 商品系统的存储需要提供基本信息、商品参数、图片视频和商品介绍。
  • 基本信息存在Mysql中,可以加缓存。
  • 商品参数,不同种商品参数结构不同,可以使用MongoDB。
  • 图片视频采用对象存储,还可以使用CDN加速。
  • 商品介绍,对于不变部分可以静态化,即先把页面生成好。变的部分采用实时AJAX请求,比如价格和促销。

电商系统:商品详情页相关推荐

  1. Java电商系统商品详情页存储方案设计

    先考虑好两个 1 核心问题 1.1 并发 不管什么电商系统,商品详情页一定是整个系统中日均访问次数最高的页面之一.不难理解,用户购物,看商品详情不一定买,一定会看好多商品详情页货比三家.如果在设计存储 ...

  2. 电商APP商品详情页设计套路(分层PSD模板)!透析UI/UE必须懂的营销设计思维!

    电商APP重点在于商品详情页,打造一个优秀的商品详情页,完全能够提高转化率! UI设计.交互体验.文案撰写.产品的商业模式来聊一聊电商app商品详情页是怎么"套路" 设计app商品 ...

  3. 微信小程序电商项目商品详情页开发实战之数据绑定与事件应用

    各位CSDN的朋友,我们都知道,现在微信小程序电商平台特别火爆,所以我将以一个生鲜电商项目为例,为大家讲述微信小程序的实战化开发,价值几万元的成熟项目,你可千万不要错过哦. 大家直接通过视频链接直接看 ...

  4. 电商详情页系统实战(2) -小型电商网站商品详情页的页面静态化架构及缺陷

    商品详情页的系统架构 => 缓存架构 => 高并发 => 高可用 电商网站里,大概可以说分成两种 小型电商 简单的一种架构方案,页面静态化的方案 大型电商 复杂的一套架构,大电商,国 ...

  5. 电商项目商品详情页架构设计

    当用户进入京东首页,点击搜索手机进入搜索页面,点击一款手机进入商品详情页面,主要展示商品的信息,主要分为三块信息: 1:基本信息:展示商品的基本信息,包括sku价格等基本信息. 2:商品描述(商品详情 ...

  6. 61分布式电商项目 - 商品详情页

    需求分析 运用 Freemarker 技术来实现商品详细页的静态化.通过地址栏输入某地址,如下形式 http://localhost:9101/gen_item.do?goodsId=14918784 ...

  7. 电商项目-商品详情页的实现

    1. 需要做的事情 l 商品详情页实现 1.商品查询服务事项 2.商品详情展示 3.添加缓存 2. 实现商品详情页功能 2.1. 功能分析 1.Taotao-portal接收页面请求,接收到商品id. ...

  8. mysql表设计 不同价格_电商网站商品详情页,要能选择商品属情如大小,颜色,型号等,对应不同价格,数据库应该如何设计?...

    首先电商中的商品信息存储至少要2个表,第一张表:商品的基本信息,这个信息是在你刚进入商品 详情页面看到的数据,而你选择了商品规格(尺码,颜色等),此时展示的商品信息为具体的商品 下的规则信息,我们称之 ...

  9. 启益电商:商品详情页排版布局怎么做

    在制作宝贝详情页的时候,当然要以客户的需求为中心,主要是让客户看完详情页后产生购买产品的想法.而详情页错误的布局,不仅不能激发客户的潜在需求,还会让客户觉得凌乱.详细的页面布局如何事半功倍? 1.属性 ...

  10. 电商系统商品中心产品设计

    由于商业性质决定了电商业务支撑系统必须具备稳定性.可扩展.安全性强等特点,PM在设计产品架构时,应充分考虑到业务发展需要,尽量将各模块隔离,商品模块建个商品中心,订单模块建个订单中心. 只有在产品设计 ...

最新文章

  1. Serializer反序列化使用之验证和保存
  2. 集成Lua到你的Android游戏 - 转
  3. JS判断数组里面是否包含指定的数
  4. TypeScript 素描 - 函数
  5. 用神经网络分类里和外
  6. u-boot2013.10引导linux3.10.30记录
  7. 【详细讲解】某书店有一个收银员该书店最多允许n个购书者进入。将收银员和购书者看作不同的进程,其工作流程如下图所示。利用PV操作实现该过程,设置信号量S1,S2和Sn,初值分别为0,0,n.则图中a1
  8. ECCV 2020 oral | 基于语义流的快速而准确的场景解析,在Cityscapes上达到80.4%mIoU,26 FPS...
  9. mount的api使用笔记
  10. eclipse里source的快捷方法_Eclipse快捷键大全
  11. Java——异常和断言
  12. qttabbar文件浏览器突然坏掉了!
  13. labwindows的学习资料、方法、安装包
  14. 校长办公室管理系统c语言,【锦城故事】学软硬结合理论做智慧超群系统是锦城电子的必经之路...
  15. DDD中的值对象和实体
  16. 几个可以提高工作效率的Python内置小工具
  17. python 识别登陆验证码图片(完整代码)
  18. 嵌入式linux安装dropbear
  19. Caused by: java.lang.ClassNotFoundException: Cannot find class: com.lisisi.myframework.entity.Insert
  20. 如何用matlab快速判断级数敛散性

热门文章

  1. XSS和CSRF攻击
  2. KCTF_MISC:神秘的图片
  3. 2020最新互联网数据调查显示,Kotlin-势必取代-Java?,java从入门到精通下载
  4. Ophone手机死机问题
  5. 转载:IT项目管理-看板管理
  6. 用html怎么做动态立体图形,使用CSS创建一个炫酷的球体动画效果
  7. 精编,精讲,精练,精益求精---AP微积分第10版在精雕细琢反复打磨中与你相遇
  8. 系统设计思想之网络应用系统架构(思想+解决方案)——从单体到分布式系统和系统设计技术点
  9. 基于粒子群算法的混合储能容量配置matlab 以风光互补发电储能系统为背景,以年运行成本最低为目标
  10. 配置windows失败计算机,W7电脑系统提示配置Windows Update失败还原更改如何解决