写点什么

苏宁 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:592216

评论 1 条评论

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

ES6中扩展运算符的8种用法

devpoint

数组去重 ES6 扩展运算符

阿里+头条+腾讯等大厂Android面试题分享,神操作!

欢喜学安卓

android 程序员 面试 移动开发

JAVA 设计模式系列——工厂模式

加百利

7月日更

08 | 指针系列(二):记住,指针变量也是变量

Nydia

华为前端工程师分享:查明网站访问故障原因,教你4招快速应对

华为云开发者联盟

高可用 网站 CDN 云安全 DNS故障

如何基于阿里云持久内存实例搭建高性价比Redis应用?

弹性计算百晓生

redis 阿里云 Redis 核心技术与实战 弹性计算

ONES 课堂:敏捷开发和迭代

万事ONES

项目管理 敏捷开发 ONES 迭代

【LeetCode】雪糕的最大数量Java题解

Albert

算法 LeetCode 7月日更

Java零基础学习路线图(2021版)

Java入门到架构

Java 书籍

流量为王时代的短视频平台如何确保内容质量?|【话题讨论】

老猿Python

技术 内容审核 流量为王 负能量

用 Docker 工具管理 WebAssembly 应用程序

WasmEdge

Docker rust 云原生 webassembly

阿里云ECS Cloudbuild开发者大赛重磅开启!40万奖金燃爆这个夏天!

弹性计算百晓生

云计算 阿里云 开发者大赛

架构实战营 模块七作业

netspecial

架构实战营

.NET CORE 对象池简述

喵叔

7月日更

Rust从0到1-Cargo-自定义构建

rust build cargo 构建

数据结构——树和二叉树

若尘

数据结构 二叉树

从零开始学习3D可视化之事件卸载、事件暂停

ThingJS数字孪生引擎

大前端 3D可视化 数字孪生 事件

云小课 | ModelArts Pro 自然语言处理套件:高效构建行业高精度文本处理模型

华为云开发者联盟

AI nlp ModelArts Pro 开发套件 文本处理模型

Redisson 分布式锁源码 01:可重入锁加锁

程序员小航

Java redis 源码 分布式锁 redisson

Ant蚂蚁挖矿系统软件开发资料

阿里+头条+抖音+百度+蚂蚁+京东面经,都是精髓!

欢喜学安卓

android 程序员 面试 移动开发

「项目管理100问」之一篇优秀的周报是怎样炼成的?

万事ONES

项目 周报 ONES

对象存储手把手教一 | 用户数据访问控制管理ACL

QingStor分布式存储

云原生 对象存储 分布式存储

Go 学习笔记之 命名

架构精进之路

Go 语言 7月日更

多项目并行,项目经理如何有效管理项目进度?

万事ONES

研发管理工具 ONES 项目经理 项目管理工具

如何用EasyRecovery找回已经删除的图片?

淋雨

EasyRecovery 文件恢复 硬盘数据恢复

Watt瓦特系统APP开发搭建

(VMware)ubuntu 环境下搭建 docker 镜像私服

逸少

Docker 镜像仓库

【Flutter 专题】98 易忽略的【小而巧】的技术点汇总 (六)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 7月日更

「免费开源」基于Vue和Quasar的前端SPA项目crudapi后台管理系统实战之联合索引(十一)

crudapi

Vue crud crudapi quasar 联合索引

Pi network/π币系统APP软件开发搭建

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