《苏宁易购:商品详情系统架构设计》读后感

原文地址:https://mp.weixin.qq.com/s/5z1XEweso5wtJoZI0Z7Cfw        

今天读了尹坚老师写的《苏宁易购:商品详情系统架构设计》,感受如下

        首先介绍什么是商品详情系统,是一个展示商品基本信息、参数等详情的系统,是商品购买的入口。它是电商平台中访问量最大的系统之一,苏宁易购大促期间PV量和UV量很大,这么大的访问量对系统的并发能力要求高。在业务上它与周边系统的关系是高耦合。依赖商品详情系统的的系统特别多,比如:促销系统、推荐系统、大聚惠、等众多营销系统、还有主数据系统、购物车、收藏夹等,业务复杂度高对系统设计提出更多的要求。

       总结了商品详情系统三要素:展示、数据处理、服务依赖。

        前台页面设计:1.动静分离。2.异步加载和懒加载。3.多级缓存策略。4.CDN缓存。5.Varnish缓存。6.精准缓存。

        后台设计:商品详情系统商品主数据通过MQ消息来源于外部系统,比如:商品基本信息、参数、参数模版、品牌、品类等。我们设计时把共性抽出来分成三部分:

 接受MQ消息并持久化通过Listener、解析报文、业务处理上简化为add、update、delete三个动作、异常组件以观察者模式实现,记录处理失败的MQ消息并对消息进行截取,并供下次再反向执行(一条MQ消息中会有一到多条参数、品牌,所以这里用截取)。

        接下来我们看一下架构演变:

1.0时代中规中矩,移动端完全移值PC的做法

我们使用中规中矩的部署方式Varnish+Apache+JBoss。

 

这种架构在针对中小系统没有什么问题,但像商品详情系统这种访问量巨大的系统会显的有点吃力。移动端对性能的要求更高。

2.0时代PC和移动端服务分离,移动端服务合并,性能优化

a. 服务分离与服务合并

PC和移动端的服务分离,以前是同一个接口支持多端,现在是每端都有独立的应用层服务,原子层服务共享。

移动端处理器和内存性能上的限制,采用服务的合并,且移动端用Nginx+Lua。

b. 公共服务

提出了一个公共服务,公共服务用来接受PC、WAP、APP公共的异步请求的服务。

c.分布式文件系统

商品详情页在回源过程中压力很大,基于其不可降级,我们提出了把商品详情页做为一个静态页放到分布式文件系统,当DB和Redis压力过大,直接调取分布式文件系统中数据

 

 

3.0时代重点优化移动端性能,接口合并颗粒度更细,增加聚合服务层

多端都使用Nginx+LuaNginx 的异步非阻塞型事件处理机制资源消耗少,并发能力高。

 

 

  1. 用Nginx+Lua做为整体的接入层
  2. 在Nginx接入层 加入三层缓存
  3. 只有聚合信息才会调用服务层,减少依赖关系
  4. 服务层数据通过Worker推送和刷新缓存,这亲服务层完全和DB隔离
  5. 移动端连接复用、链路复用、防劫持SDK开发等

        架构框架的改变加上,回源方案、多端融合以及分布式存储的应用都很好的使苏宁易购的商品详情系统运作的很完美。

        

        

        

    

原文地址:https://www.cnblogs.com/qilin20/p/10964101.html