阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

苏宁 11.11: 如何 hold 住大促红包

夏成

  • 2018-11-03
  • 本文字数:2120 字

    阅读完需:约 7 分钟

苏宁11.11:如何 hold 住大促红包

红包,这几年最火的营销系统。各大厂,无论双 11、春节都花费了大力气,五花八门的产品竭力吸引眼球。

那么如何设计一个能抗住亿级并发的红包系统了。这恐怕对任何一个团队来说,都是一个很大的挑战。经过这几年的大促红包开发(AR 小狮子,红包雨等),我们苏宁团队也在系统架构设计上积累一些经验。

架构设计

核心业务系统架构设计做到大系统小做,各个服务之间做到高内聚低耦合,服务之间做到异步化,突发事件的时候能够做到对非核心业务进行降级,保证核心功能可用,最大程度保证用户体验。

系统主要分前台和后台两个模块。

  • 后台:主要负责活动信息、奖项信息配置,并实时下发前台系统。
  • 前台:主要提供了活动资格校验、奖项配额扣减、概率服务、奖项列表服务等。

后台配置管理

后台配置管理维护活动信息及奖项信息,通过 MQ 下发给前台系统。前台系统将配置刷入本地缓存中。

准入验证

活动开启时间的,用户级别、是否实名认证,每天活动期间抽奖次数验证。

奖项配额管理(库存扣减)

在大规模的流量下,我们要做到奖项数量不多发、不少发,还有合理的奖项发放能力和发放速度。保证整个活动按照产权预期效果执行。

强大的奖项处理能力。通过概率服务计算完之后,奖项数量通过 redis 做扣减,异步落 DB 和异步发放。

异步发奖

通过 MQ 的形式,通知下游系统(促销中心,易付宝),发放券和现金红包。和下游系统完全解耦,在大流量并发场景下,保护下游系统,不被外部系统拖死。

数据实时计算

为了前端准确展示和数据决策的需要,我们需要知道准备的已发放的红包数和现金数。基于多个 IDC 的多集群部署,我们需要多 IDC 的数据汇聚进行统计,我们通过数据库 Binlog 抽数单向复制汇聚主机房,然后写入 kafka,通过 spark 的流式计算获得秒级数据,写入缓存。

流量控制与防刷

如何顺利扛过流量洪峰,我们通过客户端过载保护、流量清洗、流控控制、风控防刷、单机保护来保证系统平稳的运行。而且在过载保护和流控的时候,我们通过客户端的预埋逻辑来展示未中奖的彩蛋,保证用户体验。

  • 客户过载保护:在客户端层面进行流量拦截,在系统处于过载状态的时候,通过客户端的预埋逻辑,获取实时配置,根据实时配置来限制流量往后发送。通过长连接推送和拉的形式来实现配置实时下发。
  • 流量清洗:通过 CDN 和应用防火墙 WAF 进行流量清洗,有效的防止 CC 和 DDOS 等流量恶意攻击。
  • 集群限流策略:通过 WAF 层来实现流量控制,总量通过令牌桶算法限制总量,通过其他行为策略(单 IP,单 UA)来限制异常流量。
  • 单机限流策略:限制单台机器的总访问 QPS, 对超过阀值的流量进行限流。限制单机接口粒度的访问 QPS,对超过阀值的流量进行限流。
  • 风控防刷策略:通过用户账号质量,用户行为,用户属性(各种认证),恶意 IP 等策略来进行风控防刷。

资源管理

单元化部署

路由层(CDN 层上实现)根据用户的会员号,按照规则算法(取模等),垂直上下切分,形成各个独立的集群。将流量分散到各个集群中,互不影响。而且不同集群可以部署到不同的机房。

故障切换

通过单元化的部署,在某一个 IDC 出现网络问题或不可预测的问题,可以短时间修改路由规则将流量切换到其他 IDC 集群。

弹性扩容

服务层扩容: 利用苏宁云的 Docker 的快速部署服务,当流量峰值超过预期的时候,通过 Docker 自动化操作集群,对服务层进行弹性扩容。

数据库扩容: 数据库部署为 1 主 2 备。预先设计好多个分表(比如 512 个表)并分配好主备对应的分表。在需要对数据库层进行水平扩容时,将备库切为写库,同时一键切换 MYCAT 的配置。

链路压测

任何系统设计再完美,也不能保证在线上能够完美达到预期,我们需要对系统在线上生产环境进行性能压测。通过整个链路的压测,我们能够清晰的了解我们各个服务间的能力和瓶颈(主机、数据库、网络、带宽等),能够针对瓶颈有效指定降级方案。

内部预热和流量模型修正

前期在产品设计阶段,我们通过往年数据和计划引流方案,估算到各个页面和各个系统的流量模型,通过模型来预估我们的系统容量。

在产品真正对外之前,发起几轮内部的预热,进行业务的演练,测试部分功能问题和体验问题。同时,通过页面埋点,根据真实的用户行为习惯,修正我们预估的流量模型,能够更好的来分配我们资源。

系统监控

当系统正式上线运行时,我们需要实时了解系统各个资源运行状态,流量大小,业务参数。充分的保障业务节点的可用性、性能可靠性。及时发现突发状况,按照预先准备的降级手段进行降级。

目前苏宁的监控手段还是比较丰富的,通过云迹 (日志)、调用链监控、ZABBIX 等平台,可以全面监控到:服务器负载监控、资源层负载监控、网络层监控、应用层接口监控、应用日志监控、应用服务器 jVM 层监控。

小结

每年的红包大战还在继续,越来越多的营销产品的不断迭代,对我们 IT 团队提出更高的要求。系统架构设计是没有最终完美的,我们需要根据不同产品形式和要求,不断迭代和重构我们的系统。未来,我们脚下的路还很长,苏宁 IT 人还在砥砺前行。

作者简介

夏成,苏宁易购 IT 总部消费者研发中心架构师,主要负责易购主站核心交易中心各系统的架构设计优化与大促保障工作。曾负责历次苏宁大促红包系统架构设计、苏宁小店系统开发、支付中台系统重构、流量控制组件开发。专注于打造高可靠、高性能、高并发服务系统的技术研究。

2018-11-03 23:592088

评论 1 条评论

发布
暂无评论
发现更多内容

@全体开发者, 华为云1024程序员节精彩开启!

华为云开发者联盟

华为云 企业号十月 PK 榜

数字化的一切都会在安全沙箱里面

FN0

云计算 安全性 沙箱

K8S 故障排错新手段:kubectl debug实战

BoCloud博云

容器 云原生 k8s

vue为什么v-for的优先级比v-if的高?

bb_xiaxia1998

Vue

Bonree ONE 2.0重磅发布,中国IT运维迈入数智融合3.0时代

博睿数据

可观测性 根因分析 博睿数据 ONE平台 智能运维AIOps

从零开始实现一个Promise

helloworld1024fd

JavaScript

C# Timer控件学习,使用Timer解决按钮幂等性问题

IC00

C# 学习 程序员 上位机 10月月更

如何修改已提交commit信息

Appleex

git

固定QPS异步任务功能初探

FunTester

长安链源码分析之网络模块 net-liquid(4)

js 和 css 是如何影响DOM树构建的?

CoderBin

CSS JavaScript 前端 DOM 10月月更

ThreadLocal 源码分析-扩容和get方法

zarmnosaj

10月月更

vue组件通信6种方式总结(常问知识点)

bb_xiaxia1998

Vue

进阶vue面试题总结

bb_xiaxia1998

Vue

质量切入点都在哪儿呢?

QE_LAB

质量保障 敏捷精益

数据结构学习,数组和数组矩阵的三种压缩

IC00

学习 数据结构 算法 学习笔记 10月月更

将 NGINX 部署为 API 网关,第 2 部分:保护后端服务

NGINX开源社区

nginx 安全 Backend Developer api 网关 模块

Vue组件入门(九)v-model 自定义修饰符

Augus

Vue 3 10月月更

社招前端经典手写面试题合集

helloworld1024fd

JavaScript

开源依赖管理的最佳实践

SEAL安全

开源许可证 开源安全 软件供应链安全 开源安全与治理 10月月更

云图说|AppCube零代码,开启无码新生活

华为云开发者联盟

低代码 零代码 华为云 企业号十月 PK 榜

时间复杂度与空间复杂度

lovevivi

c 数据结构 10月月更

MobLink Android 快速集成

MobTech袤博科技

Gradle sdk moblink

链表专项之环形链表

lovevivi

c 数据结构 10月月更

EasyNLP发布融合语言学和事实知识的中文预训练模型CKBERT

阿里云大数据AI技术

深度学习 开源 语言模型 企业号十月PK榜

从零手写react-router

helloworld1024fd

JavaScript

一句口诀教你辨别索引失效七大场景

华为云开发者联盟

数据库 后端 索引 华为云 企业号十月 PK 榜

前端培训学习好就业吗?

小谷哥

揭秘百度智能测试在测试评估领域实践

百度Geek说

测试 数据 企业号十月 PK 榜

需求吞吐量半年提升 65%,500强企业这样做|ONES 研发管理大师课

万事ONES

vcluster -- 基于虚拟集群的多租户方案

Se7en

Kubernetes 云原生

苏宁11.11:如何 hold 住大促红包_DevOps & 平台工程_InfoQ精选文章