基于微信云开发的秒杀类高并发场景架构设计建议
前言 抢购、秒杀是如今很常见的一个应用场景。电商平台上的各种秒杀就不说了,游戏中新卡池上线,餐饮平台抢代金券,甚至是疫情期间高峰期亮码,都可以归纳为秒杀类的高并发场景。高并发对于任何的服务后台来说,都是不小的技术挑战。 在传统模式下,一方面,要求业务的研发人员有一定的业务预见性,能够提前对业务峰值做相对准确的预估,过多则造成资源浪费,过少则影响业务效果。另一方面,要求研发人员对业务架构进行合理设计,提前部署大量资源,甚至要进行大量压测以确保可靠性。可以说,应对高并发问题,在传统开发模式下,需要耗费很多的人力物力,成本昂贵。 然而,这些高并发问题,在云开发模式下,相对确简单了很多。云开发基于serverless理念,架构具备足够的轻量和弹性。依托腾讯云的海量资源池,可以几乎无限地自动水平扩容,支持海量并发请求。对开发者来说,使用云开发就是典型的 NoOps 实践,将人力从低价值的资源运维中解放出来。随着请求量的不断增长,云开发可以进行自动扩缩容量,确保业务的高性能、高可用。同时,按需使用资源使得开发者不需要为了应对高并发而提前部署大量资源,大大节约了资源成本。 场景分析 业务流程图: [图片] 秒杀类场景主要解决的难题有以下3个: 高并发:高并发可以说是废话了,秒杀场景自带的标签就是高并发。特点就是时间极短、瞬间用户访问量极大 高流量:秒杀活动开始时,业务的入口流量会比平时高上10倍甚至是100倍,对系统入口承载能力是一个巨大的挑战 防刷:一般活动和秒杀都有较大的优惠,就免不了被一些特殊人群觊觎。羊毛党不得不防 云开发模式下的高并发场景设计 挑战点分析完毕,接下来就是各个击破了,整体架构如下图所示: [图片] 基于云开发的秒杀活动解决方案架构 👆 1. 高并发 通常高并发业务按并发量上涨模型来划分,可以分为以下两种形式: 业务量相对平缓上涨,并发量逐步上升,上升速度快但平缓,系统有充足的弹性伸缩时间业务并发量爆发上涨,并发量瞬间上升,上升速度很快,例如常见的秒杀类业务 对于第一种并发量以较均匀的速度上涨的业务,云开发默认的弹性伸缩能力就可以轻松应对。对于第二种呈爆发式上涨的业务,也就是秒杀场景下常见的挑战,通过一些策略优化也可以充分应对。那么怎么应对呢? 主要有以下几种方式: 量级预测:提前评估活动并发量及QPS等指标。例如利用活动预约的方式获取用户量,或者利用历史数据来综合评估等前端限频:例如禁止用户x秒内重复点击按钮,又或者抢购时需要先填写验证码,既可以缓解瞬间并发,又可以一定程度上阻挡羊毛党后端限频:将请求尽量拦截在系统上游。秒杀场景下,因为库存极为有限,所以99%的请求都是无效的。利用云函数自带的限频能力,可以有效的控制后台系统峰值的承压,保障后台系统问题,数据库不被突增流量压垮优化代码效率:因为函数的并发能力和函数的运行耗时相关,提升代码的效率能极大地提升能力。假设目前云函数的并发能力是1000,如果云函数的执行时间为 200ms,那么单个云函数可以达到1000 * 1000s / 200ms = 5000 QPS。而如果云函数执行时间优化到100ms,QPS能力直接番倍到1W QPS预热:云开发的云函数提供预热的能力,使云函数资源弹性拓展提前达到了活动开始时的预估值。可以在腾讯云控制台提交工单,或者通过压测工具用http触发云函数(可通过cloudbase cli或腾讯云后台配置云函数http服务)其他方式可自行发散压测:压测可以帮助发现很多业务逻辑上的处理效率问题,尤其是数据库相关的操作性能问题。可以利用开源的压测工具来压测服务,或者也可以利用云开发官方提供压测服务,参见https://cloud.tencent.com/document/product/876/47679 可以看到对于高并发的难点,云开发提供的能力已经足够满足核心需要。如果想省事可以专注业务逻辑的开发后,全部交托云开发来负责支撑。 PS:注意评估云开发的套餐是否能满足业务需求,或者切换为按量计费,避免因套餐限制影响业务并发能力。 2. 高流量 高流量主要是两个部分的压力。一是静态资源下载流量,二是动态请求的往返流量。 静态资源:利用云存储自带的CDN能力来支撑动态请求:对于传统模式来说,可能还需要担心高流量的问题,入口是否可以顶得住业务的流量。而云开发天然能扛住亿级流量压力。利用好云开发的限频能力,绝大部分的流量都不会走到业务系统中。利用云开发,高流量压力这里可以说是最省心的。 3. 防刷 防刷目前主要有两个措施: 链路安全:通过小程序来作为活动入口,一来小程序容易裂变传播,二来可以利用云开发和微信之间的私有链路来保障链路安全。使用微信私有数据传输协议,对数据进行加密传输,并且小程序云开发服务采用内网数据传输,共同保证传输过程的数据安全隐藏秒杀入口:链接如果提前暴露出去,可能让羊毛党利用程序化抢购来获得优势。利用云开发实时推送的能力,在秒杀开启的时候再推送秒杀入口可以有效避免链接提前暴露 总结 除了抗秒杀业务压力外,云开发还提供CMS系统可以帮助快速构建后台运营管理系统,辅助活动资源的图文编辑和库存数据管理等。还有监控、告警和日志系统提供业务运营支撑。 利用云开发的高性能、高并发能力,能够帮助业务低成本高效的构建秒杀系统。同时还能极大得减轻资源运营成本。实战中经验来看,开发一套活动系统,效率可以从2-3周提升至2-3天。