苏宁大促高并发要求下的售后服务运营能力承诺服务系统架构实战

2018 年 11 月 09 日

苏宁大促高并发要求下的售后服务运营能力承诺服务系统架构实战
前言


苏宁售后服务运营能力承诺服务系统(简称“ASAP”)是物流研发中心建设的针对苏宁售后服务的时效承诺管理和服务运营能力管理的核心支撑系统,ASAP 系统经历两年多的线上考验与技术迭代,目前服务着成万级商家,亿级 SKU。


系统定位及核心业务场景分析


首先介绍一下系统的定位,苏宁售后服务运营能力承诺服务系统(ASAP,下称“系统”),是售后服务能力的“库存系统”,主要为售后服务的服务时效承诺和运营服务能力提供管理,与易购商城及线下门店的商品销售及售后服务履约相关联,系统定位为苏宁易购核心销售链路上的核心服务之一。在商品销售和售后服务履约过程,为消费者、苏宁客服、苏宁自营售后服务商、厂家售后服务商和平台售后服务商提供能力服务支撑,为售后服务能力均匀有序的释放提供了系统支撑,从而保障了售后服务质量


然后介绍一下系统的主要功能及业务模式,系统主要提供服务承诺和服务能力的实时接口查询,服务能力的实时增加和扣减接口服务。从业务模式上又分为苏宁自营售后服务、厂家售后服务、平台服务商售后服务,其中苏宁自营售后服务是指由苏宁自营的帮客公司提供的售后服务业务,厂家售后服务是指由商品的原厂商(比如海尔、华为)提供的售后服务业务,平台服务商售后服务是指由平台服务商(比如闪修侠)提供的售后服务,针对这三种业务类型,系统提供全面支撑。


系统的特点


库存系统主要面临以下几个挑战:


  1. 高并发,热点争抢 

  2. 涉及商品四级页的时效针对同一个商品,比如秒杀、团购、打折促销等活动商品,如何支撑高并发时效能力查询与扣减服务。

  3. 尽可能减少能力超扣,保证数据一致性

  4. 区别与实物商品库存,售后服务能力主要是为了减小下单环节的依赖,能力控制可以放宽限制,服务的能力异步扣除,允许并发情况的少量超扣,但从服务上要保证扣完后的实际能力与查询能力保持一致性,这是底线原则。

  5. 系统扩展性 

  6. 如何建设出可无限扩展的架构,在系统扩展过程中,各部署节点都需要具备无限扩展能力,而常见的瓶颈如数据库的连接数、队列的连接数等。


架构设计目标



应用架构



业务流程


1)服务商的运营人员针对服务类型进行服务承诺和服务能力的维护


2)消费者在苏宁易购 APP 或是网站上选购商品,打开商品四级详情页,调用 SOLP 进行时效查询


3)SOLP 调用 ASAP 提供的时效查询接口进行查询。


4)消费者完成下单支付,订单由订单中心下发到“售后服务接单管理系统”,由“售后服务接单系统”调用 ASAP 系统进行能力扣减。


5)如后续的售后服务订单有取消或另约服务时间请求,则会调用 ASAP 的能力的回滚接口进行能力回滚。


系统架构



ASAP 架构主要涉及:


1)ASAP 服务:主要提供能力的加减服务包括能力新增和能力扣减接口,


2)ASAP 后台:主要提供系统给运营人员进行承诺和时效服务的


3)中间件:主要涉及分布式服务框架 RSF、任务调度平台 UTS、消息队列 WindQ


4)数据层:主要用到了 Redis 集群,mysql 数据库集群。


5)基础服务:主要依托苏宁的基础 DEVOPS 工具链完成开发和运维工作。


技术框架



开发框架


系统采用苏宁 SNF 技术框架开发,苏宁 SNF 框架基于 MAVEN 项目管理,提供各种的骨架组件。在这些骨架组件中,基本的依赖和基本设置都在模板中做好,无需各项目重复工作。本框架也包括了基本的项目框架结构和各种基本设置,同时也集成了苏宁框架组统一的日志记录、异常捕获、数据访问等苏宁自己的基础组件。


项目组在 SNF 框架的基础上,进行少量的裁剪和扩充就可以进行开发,既能统一项目设置和架构,又能大量节省开发人员搭建框架的时间。


开发环境


STS+Maven+SVN +JDK1.7+JBoss。


分布式服务框架 RSF


系统提供的核心的服务接口均采用苏宁自研的 RSF 框架实现,RSF 框架 解决了分布式系统间的服务调用问题,提供一种透明的、高性能的 RPC 服务调用方案。


主要功能


  1. 支持同步、异步Future、异步Callback三种客户端调用模型;

  2. 支持TCP协议及Hessian、JSON、KRYO序列化机制;

  3. 服务节点的自动注册和发现;

  4. 多种负载均衡方式;

  5. 服务路由;

  6. 容错重试机制;

  7. 流控,熔断等机制;

  8. 统一的服务配置管理,支持配置的动态修改。


总体架构



系统面临的挑战及应对


虽然系统采用了 SNF 框架,基于苏宁组件和基础设施,搭建了高并发的分布式架构,但随着苏宁易购电商业务高速发展,订单屡创新高的背景下,系统依然面临一些挑战:


  1. 扩展痛点:受限于数据库的连接数瓶颈、Redis服务器的连接数瓶颈等因素,导致应用集群无法无限扩展;

  2. 机房容灾及机房容量:机房断电,电缆被挖,造成整个苏宁易购交易系统瘫痪;单个机房容量受限,无法创建更多的服务器;

  3. 热点瓶颈:虽然通过构建缓存化支持能力服务,但单个商品的并发查询和扣减仍然存在上限


为了解决上述问题,我们启用了应用的本机分布式缓式,并在公司规划下正在进行多活架构构建。


应用服务器内存缓存


我们通过 Ehcache 框架,对于一些配置主数据和能力总量在应用服务器进行内存缓存,从生产压测情况来看效果明显,在不新增服务器的条件下 tps 成倍增加,redis 热点消失。


后续也计划对于已约数量等实时能力数据,通过分布式缓存实现共享,以进一步提升单个商品并发查询和扣减的热点瓶颈。


多活架构


目前 ASAP 系统在公司统一部署下实现了多活的支持,在多个机房之间建立数据库和 Redis 缓存数据的准实时同步,支持多个机房间的流量切换,当 A 机房出现故障,可由 B 机房完全接管,具体多活的生产应用还在联调中。


双 11 等大促活动保障


经过两年多的大促实战,基本形成了事前、事中、事后完整的大促保障工作机制,工作项标准化,越来越细致,组织上有专人牵头负责具体工作项事务,形成了完整的闭环。



容量和性能评估


对公司双 11 大促的 活动预告及销售目标进行详细评估和分解,转化成 ASAP 系统的核心服务的 SLA,确定库存系统的核心服务的 TPS 目标。


性能压测达标


大促前,我们会进行多轮的生产压测,最重要的是单系统的接口压测和端到端全链路压测。通过单系统服务接口压测,我们排除接口潜在的性能瓶颈并针对性的优化,能够清楚认识负责系统的单接口所能支持的并发上限;通过生产真实流量回放的端到端全链路压测平台,进行全链路的生产压测,发现真实流量下的系统压力情况,和资源情况,提前发现性能瓶颈和潜在的系统风险。性能测试是大促筹备最为关键的一环。


系统健康体检


提前对系统的各方面进行全面的健康检查,比如 db 磁盘的容量、连接数、topsql,缓存的内存使用率、并发命令数和连接数,消息队列的连接数,各节点的 cpu 负载情况,排除单点故障,排除虚拟机的资源争用问题,排除高可用问题(同一物理机多应用节点)等。


机器扩容


基于容量预估出来的各服务接口的 TPS 目标,根据压测结果评估系统的服务器是否需要扩容,比如 jboss 集群是否需要扩容,redis 集群是否需要扩容,数据库服务器性能是否有足够等。


梳理流控与降级方案


所有服务接口需要设定合理的流控阀值,以确保系统不会挂死;梳理所有接口的调用系统和业务场景并明确业务的优先级,假设系统因为某服务导致性能出现瓶颈,根据业务优先级逐步调整流控阀值;业务流控或系统流控要实现用户的友好提示;对于依赖系统,如果出现超时或宕机,则定义降级策略,确保服务请求的快进快出。


作者:汪成伟,苏宁易购 IT 总部物流研发中心技术总监,目前负责苏宁物流研发中心售后相关系统的架构与开发管理工作,具有十多年互联网一线研发及管理经验。曾负责过 B2C 电商平台、移动新闻资讯平台,用户上网行为分析大数据平台及 O2O 社交应用的研发工作。是 DevOps 的践行者,在企业应用架构设计、高并发系统设计、大促保障、研发过程管理、稳定性治理、安全开发上有丰富的经验。


2018 年 11 月 09 日 17:283233

评论 1 条评论

发布
用户头像
文章写的跟流水账一样。。。
2018 年 11 月 11 日 01:49
回复
没有更多评论了
发现更多内容

快三十岁了,网上玩赌博输掉了四百万后的忏悔

geeker

网上赌博输了怎么办 赌博玩快三输了怎么回血

python——dict常用方法

菜鸟小sailor 🐕

直播倒计时|30分钟带你解锁“技术写作”新技能

小红豆

技术 写作 直播 技术创作 RTC征文大赛

网上赌博输了怎么办?上岸戒赌是唯一的选择

geeker

网上赌博输了怎么办 网上赌博玩快三输了怎办 网上玩快三输了怎么回血 网赌输了怎么戒赌

甲方日常 16

句子

随笔杂谈

宁静的可贵

谷鱼

宁静

招商2020第十三届(南京)智慧城市技术与应用产品展览会

InfoQ_caf7dbb9aa8a

Python基础知识(二)

Python基础

windows平台python3使用impyla连接hive问题汇总

誓约·追光者

hive python3.x Windows 10

IP网络

菜鸟小sailor 🐕

配置时间特性

小知识点

大数据 flink scal

食堂就餐卡系统设计

Geek_Albert

食堂就餐卡系统设计

字节高级工程师告诉我,想越过开发5年的“分水岭”这样做最适合

周老师

Java 编程 程序员 架构 面试

架构师训练营大作业

叮叮董董

Spring 5 中文解析数据存储篇-理解Spring事物抽象

青年IT男

Spring5 数据存储

升级Php Curl扩展遇到的坑

心平气和

php curl php扩展

架构师训练营大作业一

子豪sirius

oeasy教您玩转linux 010216 随机诗词 fortunezh

o

关于手机里的IP地址,你不得不知道的“秘密”

脑极体

第一周学习总结

Geek_Albert

JDK15真的来了,一起来看看它的新特性

程序那些事

Java JDK15 JDK15新特性 java15新特性

全屋智能2020第十三届(南京)国际智能家居展览会

InfoQ_caf7dbb9aa8a

架构师训练营 - 大作业(二)

张明森

为什么很多人不买iPhone?

北柯

关于java使用JDBC连接数据库

谷鱼

Java JDBC

【高并发】面试官:说说缓存最关心的问题?有哪些类型?回收策略和算法?

冰河

缓存 面试 引用 offer 回收

物流系统架构设计文档

莫莫大人

极客大学架构师训练营

拓扑排序就这么回事

码农田小齐

数据结构 算法 数据结构和算法

快讯2020第十三届亚洲国际物联网展览会-南京站

InfoQ_caf7dbb9aa8a

Electronjs

Neil

Java Electron 前端框架 前端教程 客户端开发

【高并发】面试官:Java中提供了synchronized,为什么还要提供Lock呢?

冰河

Java synchronized 同步 lock 锁机制

苏宁大促高并发要求下的售后服务运营能力承诺服务系统架构实战
-InfoQ