如何设计一套好用的自适应流控方案?
自适应流控是指根据当前流量对象的数据特征及预定义的规则,自动调整方法、顺序、参数或条件,以期与预定义目标相适应的过程。
什么是自适应流控?
流控,是流量控制的简称。在不同的领域有不同的含义,如航空流量控制,网络流量控制等。
自适应,就是在处理和分析过程中,根据处理数据的数据特征自动调整处理方法、处理顺序、处理参数、边界条件或约束条件,使其与所处理数据的统计分布特征、结构特征相适应,以取得最佳的处理效果的过程。
简言之,自适应流控是指根据当前流量对象的数据特征及预定义的规则,自动调整方法、顺序、参数或条件,以期与预定义目标相适应的过程。
根据上述定义,你是否对自适应流控的概念有了基本的认识呢?Don’t worry,我们将在下文,用案例的方式帮助你理解。So, Take It Easy!
为什么要自适应流控?
1. 引言
在互联网领域,我们常听说的诸如:“主站用户流量太大,需做子页面分流设计”、“大促请求洪峰将至,需提前做好限流措施”、“数据库请求量太大,需将查询请求切流至从库”等等,都是在讨论流控问题,只不过关注的视角和对象不同而已。
- 产品、运营可能更多的是关注用户流量;
- 研发可能更关心的是服务请求流量;
- DBA(数据库管理员)在意的可能是数据库请求量。
职责不同,则视角不同;视角不同,则关注对象不同。
可见,流量控制在互联网领域应用十分广泛且广受关注。
2. 流控的必要性
然而,为什么要进行流量控制呢?我们设想一个典型的流控场景:
假如周杰伦即将在鸟巢开个人演唱会,据官方大数据预测:预计将有10万观众入座,届时会场将座无虚席。而你有幸担任本次演唱会的安保工作,负责保障观众及时有序地入场和出场。
挑战:假如有以下三种方案,你将采取哪种方案,以保障观众及时有序地入场和出场呢?
- 方案一:设置一个会场入口,观众可凭入场券由此入场。
- 方案二:设置一个会场入口,在入场电子指示牌(或入场券上)上标明入场券编号及对应的入场时段,各个手持入场券的观众按入场券编号及对应的时段有序入场。
- 方案三:设置多个会场入口,在入场电子指示牌(或入场券上)上标明入场券编号及对应的入场口编号(如A口、B口、C口、D口等),各个手持入场券的观众按入场券编号及对应的入场口有序入场。
方案一,没有进行任何流控的干预
优势是节省安保及秩序维护的人力或设施成本,劣势尤为突出:
- 观众排队严重,甚至因为排队时间长而错过入场,用户体验极差;
- 极易造成拥堵,甚至踩踏事件,造成安全事故。
方案二,主要按时间顺序(类似“错峰出行”),对观众进行流控
优势是节省安保及秩序维护的人力或设施成本,劣势也显而易见:
- 观众排队现象有所减轻,但观众入场时间被严格限制,时间不自由;
- 对于未按时间进场的观众而言,要么错失进场机会要么无奈等待,抵触情绪上升;
总结一句话:用户体验差。
方案三,主要按空间分布,对观众进行流控
虽然需要更多的安保及秩序维护的人力或设施,但优势也非常明显:
- 轻微拥堵,观众可根据自己的时间安排灵活快速出入场,用户体验佳;
- 不易产生踩踏等安全事故。
另外,方案三的优势还体现在当演唱会结束时,可以快速完成观众的有序出场。
根据各方案的比较后,我相信聪慧过人的你一定会选择方案三。这也是现实场景中被主流选择的流控方案。
3. 流控的适用场景
结合上述“演唱会”的场景,我们总结下:在什么场景下需要进行流量控制呢?
一般而言,流量控制被用于具有如下特征的场景:
- 在短时间内汇聚了巨大的流量;
- 汇聚流量的各个个体需得到妥善处理。
线上的典型场景,包括秒杀,抢购,限时大促等,如天猫京东双11大促、唯品会定时秒杀等,需尽量保障每个用户都能正常访问网站或APP,而不是简单粗暴地拦截或拒绝访问。
线下的典型场景,包括重大会议(运动会、演唱会、展销会等)出入场等,每个有入场券的观众,都有被合理安排入场和出场的权利,不能随意拒绝观众入场或出场。
4. 关于自适应的理解
如何理解自适应流量控制呢?
回到“演唱会”例子中的方案三,我们是否有欠考虑的地方呢?想象一下如下特殊场景:
- 对于某些特殊群体如VIP、孕妇、行动不便等,一般会提供特殊通道,保障其优先出入场;
- 对于入口而言,若出现故障,则需启用备用出入口,以保障观众有序出入场。
以上场景是否似曾相识?这就是我们所说的“自适应”,即:能够根据特殊观众个体或入口故障等数据特征,自动调整走特殊通道或启用备用通道的处理方法,以匹配完成观众有序快速出入场相适应的目标。
总体而言,“自适应”主要用于:需要根据待处理对象的数据特征,或根据待处理对象所处环境的变化,而匹配相适应的处理方式、条件、规则等的应用场景。
物竞天择,适者生存。世界上唯一不变的就是变化本身。
由此可见,拥抱和适应变化就显得格外重要,“自适应”的重要性也就不言而喻了。
有自适应流控的典型实践吗?
现在,举一个互联网电商领域短信自适应流控的案例。
一年一度的双11大促期间,消费者们购物的激情,被大促节日和网购所烘托的氛围所点燃和释放,特别是在双11当天,亿级的消费者几乎在同一时段内抢购自己心仪的商品。
与此同时,各类短信也在此期间竞相迸发,如登录验证、支付验证、预售提醒、活动推广等,这些短信将在短时间内产生巨大的流量洪峰。如何使这些短信及时可靠下发,成为了是否能保障双11顺利进行的关键。
1. 短信下发原理
为了便于理解,在介绍短信自适应流控之前,先简要介绍短信下发的原理:
如上图所示,短信下发的原理,可按以下步骤进行简要概述:
- 由各业务源头生成短信内容,如注册登录、预约预售、活动推广等;
- 由短信网关按短信类型,将短信内容放入不同的待发送队列;
- 由短信网关经过分发层,投递至短信通道商;
- 由通道商转发至运营商,并最终下发至用户手机终端。
2. 自适应流控的设计思路
关于短信的自适应流控,设计思路体现如下:
(1)划分短信类别,定义优先级
将短信按行业规则划分为验证码、通知短信、推广短信。
- 验证码,具有验证用户身份或确认用户操作的作用,包括但不限于APP/网站注册、安全登陆、支付认证、身份认证、密码找回、账号绑定等应用场景。
- 通知短信,用户在使用或订阅了企业相关服务后,为使服务履约闭环而由企业程序触发的通知,包括但不限于提货通知、订单通知、支付通知、物流通知、生活服务类通知等应用场景。
- 推广短信,为了推广和宣介产品或服务等,由企业主动触发的短信,包括但不限于用户调研、抽奖邀请、新品试用、新品宣传、会员关怀、商品促销、活动邀请等应用场景。
通过上述对各类型的短信介绍,我们可以判别:
通常来说,用户对验证码短信的时效性要求最为苛刻,需要秒级到达;其次是通知短信;最后才是推广短信。
因此,我们将优先级的顺序定义为:验证码>通知短信>推广短信。优先保障验证码的及时下发,其次保障通知短信的下发,最后保障推广短信的下发。
(2)多通道商备份,制定自适应切换规则。
一般而言,作为备份,会采购多个通道商的短信通道,以确保某个通道商出现故障时的快速切换,最终保障短信的可靠下发。在通道发生故障时,如何快速切换以保障短信及时下发呢?
我们首先想到的是:人工值守和人工切换的方式。当然,这是一种可行的解决方案,但存在切换不及时、非工作时段无法及时响应(特别是在夜间)等诸多弊端。
所以,需要找到更优的解决方案,通过评估分析,我们最后采用了自动化的方式来做通道故障时的快速切换,原理可简要描述如下:
注:对于不可用通道,我们采用了“尝试发送”机制进行探活检测,如果检测到某故障通道经过修复后达到可用标准,则将其从不可用通道队列放入可用通道队列。
3. 度量指标
为了度量该设计方案是否有效,我们定义了2个关键的指标:
- 下发延时,下发延时=短信下发至通道商的时间点-收到短信下发请求的时间点;
- 切换耗时,切换耗时=通道切换时间点-通道不可用的识别时间点。
从线上运营数据来看,以上两个指标的实测数据皆达到项目预期的目标。
总结
本文简要讲述了自适应流控的相关背景、概念、价值及典型实践,旨在帮助大家建立起对自适应流控的适用场景及必要性等基本认识,其中的自适应短信流控案例来自互联网厂商,具备一定的借鉴意义,仅供大家参考和探讨。
另,受限于作者写作水平及保密要求等相关原因,有陈述不尽之处,敬请谅解。
本文由 @南瓜哥 原创发布于人人都是产品经理。未经许可,禁止转载
题图来自Unsplash,基于CC0协议
- 目前还没评论,等你发挥!