电商单品页面
学习借鉴自:https://blog.csdn.net/l_215851356/article/details/54631505
京东手机单品页在每次大促时承载所有流量的入口,它被天然赋予的一个标签就是抗压,对系统的稳定性、性能方面要求极其苛刻,另外单品页本身业务复杂度较高,单品页有几十种垂直流程业务,并且展示上都要求个性化的单品页,加上依赖有50+的基础服务,稍有抖动,对整体服务质量都会有比较大的影响,因此之前大促也出现过各种问题,不断打磨,持续优化升级,当前系统架构可支撑接近百万的QPS瞬时访问,并且今年双11表现非常平稳,借此机会一块和大家做一次分享。
一、先聊聊APP接口开发的特点
- 手机网络、流量受限
手机单品页提供给APP的API受限于运营商的网络,手机的信号时有时无、时好时坏极其不稳定,为了减少客户端和后端建连握手的过程,因此接口下发内容大而全,涵盖了页面上的所有内容,没办法像浏览器BS的结构可以有大量的ajax请求;API接口依赖了几十个基础服务,任何接口的抖动对整体接口性能影响很大,因此必须是并发请求依赖,减少接口抖动叠加的影响;单品页有大量的图片信息,商品主图、插图、推荐商品、手机配件商品、排行榜等等图片信息量比较大,单个图片的大小对手机流量影响较大,所有下发的图片采用是webp格式,极大减少网络传输流量。 - 手机不同分辨率、网络环境、系统版本的适配
不同环境下用户的体验存在差异,比如在弱网、低版本、分辨率差的手机会保持最基本的购物车流程,会减少一些增值的体验;图片的展示尺寸也会根据网络环境、分辨率大小进行适配。 - APP版本兼容
新业务需求变更尽可能兼容老版本,但有些业务很难兼容老版本,因此系统里面存在很多版本适配的逻辑,增加了系统的复杂度;
客户端如果出现重大bug并且没办法进行hotfix的情况下,需要服务端针对特定版本进行打补丁,也增加代码复杂度以及后期的维护成本。
因此APP的接口开发逻辑复杂度和后续的维护成本被放大很多。
二、单品页业务系统架构
这是当前单品页系统的整体架构图,其他的核心交易流程,比如购物车、下单等也都基本类似,单品页系统主要有三个进程:OpenResty、Tracer-Collect、Tomcat,以及包含几个旁路系统。OpenResty是ngin