电商整体架构
从组织架构到技术架构,当前各大电商系统基本趋于中台化。中台在2015由阿里提出,其实是一种企业架构而不是单纯的技术层面,
目前几乎各大电商都进行着中台化的建设。中台就是对 ”共享“ 理念系统化的归纳和总结。
- 重复功能建设和维护带来的重复投资
- 烟囱式建设造成系统壁垒,数据孤岛
- 业务沉淀促进可持续发展
- 大中台小前台快速响应市场的需要
上层业务:大中台,小前台,电商中直面用户的B2B,B2C等各个业务线
业务中台:基于公共服务的沉淀,需要收敛一些基础的业务服务,如商品、订单、会员、库存、财务、结算等等。
数据中台:数据中台不是一个平台,也不是一个系统。数据仓库、数据平台和数据中台是有区别的。简单的举例:
数据平台可以理解为数据库,数据仓库类比为报表,而数据中台更贴近上层业务,带着业务属性。
技术中台:与业务无关的基础沉淀,中间件,系统框架,监控,日志,集成部署等等
运维中台:不一定存在,系统运维相关的内容,硬件,机房,包括企业云平台的建设等可以划分为单独的运维中台
面临问题
考量维度
- 高性能:提供快速的访问体验
- 高可用:网站服务7*24正常访问
- 可伸缩:硬件弹性增加/减少能力(快速扩容与释放)
- 扩展性:方便地增加/减少新的功能/模块(迭代与服务降级)
- 安全性:安全访问和数据加密、安全存储等策略
- 敏捷性:快速应对突发情况的能力(灾备等)
内部瓶颈
- 木桶效应:水管最细的地方决定流量,水桶最低的地方决定容量(QPS压测调优为例)
- CPU:序列化和反序列化、高频日志输出、大量反射、大量线程的应用
- 内存:使用内存的中间件或服务,如redis,memcache,jvm大量对象堆积内存的应用等
- 网络带宽:大流量高并发环境下,双11用户访问量激增,造成网络拥堵
- 磁盘IO:文件上传下载,数据库频繁读写,不合理或大批量的日志输出
- 数据库连接数:应对双11,应用服务器连接池大批扩容,警惕底层数据库、Redis等连接数瓶颈
外部服务
- 短信:外部短信延迟与送达率问题,可以搭建短信平台,多家渠道做路由和切换分流(短信平台架构?)
- 支付:银行支付与回调延迟,搭建支付中心,对接多支付渠道
- 快递对接:快递服务对接(快递100)
- 外部云存储:云存储文件访问,流量扩容(大家所使用的存储?nfs的架构与事故)
- CDN:外部静态文件访问提速服务(使用过的项目?)
业务中台
订单中心
异步化:
大促期间新增许多需要获取订单状态的服务,比如应对双11而临时增加的数据中台订单大屏展示等;异步化,并对消息队列调优,多队列分流
过期订单:
扫表实现:通过定时任务轮询扫描订单表,超时的批量修改状态
java延迟队列实现:通过DelayQueue,每下一单,放入一个订单元素并实现getDelay()方法,方法返回该元素距离失效还
剩余的时间,当<=0时元素就失效,就可以从队列中获取到。启用线程池对数据监听,一旦捕获失效订
单,取出之后,调用取消逻辑进行处理。
消息队列实现:设置两个队列,每下一单放一条进延迟队列,设定过期时间。消息一旦过期,获取并放入工作队列,由
consumer获取,唤起超时处理逻辑
redis实现:利用redis的notify-keyspace-events,该选项默认为空,改为Ex开启过期事件,配置消息监听。每下一
单在redis中放置一个key(如订单id),并设置过期时间。
被动取消:在每次用户查询订单的时候,判断订单时间,超时则同时完成订单取消业务
支付中心
重复支付
异常订单:支付但未开单,未支付但已开单
回调延迟
支付路由
营销中心
价格分摊:满减或平台券等优惠,在多个商品下单时,涉及到金额的分摊。记账时在订单明细记录,将误差 金额 计入金额最大的明细
退单处理:退单后要同时恢复用户的权益,比如优惠券的再次使用,限购次数等。确保用户体验。
商品中心
限时商品的下架控制
库存管理
技术中台
数据库优化
缓存优化