写于 2019-10-01。
- 任务分发在软件系统的很多地方会出现,如
- 服务调用,服务调用方给服务提供方的调用请求
- 网关,向后端服务器路由请求
- ……
- 对于上面情况,(抽象的)任务即是请求。
- 因为一般都是集群,
LB
会涉及 多个任务分发方 来多个任务接收方。 - 对于上面的分布式场景下请求分发,一般请求分发出去了,不会再对请求进行重新分配(任务分发后接收者就确定不变了)。
- 因为一般都是集群,
- 在软件系统中,这个分发功能常称为
Load-Balance
(简称LB
)。
任务分发/LB
的均匀性是一个需要考虑的问题,如果不均匀:
- 有些任务接收者,导致不必要的过载甚至宕机。
- 如果对
LB
后的QPS
做限流(即任务分发时作限流,常常称为前置限流),以保护系统不过载:- 对于收到的任务更多机器,会开始限流;
- 对于收到的任务更少机器,不会限流;
- 限流功能 对于用户看来,总的限流
QPS
就不准确,整体的限流QPS
是有偏差的。- 即整体配置的限流
QPS
1万,但来1万QPS
(甚至不到1万QPS
),就已经出现限流了。 - 这样的情况,常常称为『提前限流』。
- 即整体配置的限流
下面的内容,量化分析:
LB
(即任务分发)的不均匀性- 前置限流
QPS
偏差(下面分析的目标内容)- 面向业务效果和为业务能提供的能力进行量化分析。
- 有这个量化分析,前置限流由『提供技术功能的方式』向『提供面向业务的解决方案方式』演进。
前置限流由『提供技术功能的方式』向『提供面向业务的解决方案方式』演进。目标是
- 对于整体系统:
- 提升的整体系统(含网关、各个业务应用)的稳定性 与 确定性。
- 对于网关产品:
- 尽可能地拓展网关(前置限流)的 业务 范围。
- 提升网关的 业务 能力心智。
这里解释一下什么是『面向业务的解决方案方式』。
- 深入理解业务场景与问题,提供解决业务问题的效果与承诺。
- 业务方无需关注技术系统的内部实现细节。
下面其实就是 对业务领域/问题的本身的理解(问题域),期望不涉及实现方案(实现域)。
业务关注的是,对于业务方评估出来的业务QPS
:
- 网关提前限流比例 是多少?
- 影响 业务目标达成;是业务使用『网关前置限流能力』带来负面影响。
- 即业务期望 提前限流比例越低越好。
- 网关最大通过
QPS
是多少?- 提供 业务系统稳定性保障;是业务期望从『网关前置限流能力』获得的正面收益。
- 业务期望 最大通过
QPS
超出业务QPS
越少越好。 - 如果 最大通过
QPS
过大,前置限流 实际上没有起到 前置限流的保护效果。
- 面向业务的关注点可以简化 业务方的理解与使用。
那么 解决业务问题的效果与承诺 就是,对于业务方给的业务QPS
:
- (提前限流比例, 最大通过
QPS
) 可以取哪些值? - 如何选择/平衡 (提前限流比例, 最大通过
QPS
) 两者的值?
- 业务影响可以接受的提前限流比例 是有 经验值 或 典型值的。
- 比如 千分之3 或 万分之1 这样的一个提前限流比例,往往都可以接受(相比上,下面前置限流带来的稳定性受益)。
- 想想,万分之1的提前限流比例 的话,
- 从系统整体上看,50万的QPS 只有50个让前置限流了,影响不大。
- 从用户微观上看,因为概率低,用户心理也不会有反应。
- 目前『提前限流比例』获取方式:
- 通过压测时发起来一个业务
QPS
的流量来获取。 - 其实这个过程很粗糙。
- 当然因为用户验证方式『粗糙』,对解决方案的要求程度实际上不高。
- 通过压测时发起来一个业务
最大通过QPS
这点很直接,大家都很明白,无需再多说明。
提前限流比例、最大通过QPS
两者关联影响(即成为一个元组),这是由限流器原理/规律决定。
- 对于一个给定的业务
QPS
,- 『提前限流比例』 与 『最大通过
QPS
超出业务QPS
』 不能都低。 - 如果一者调低了,另一者就变高了。
- 『提前限流比例』 与 『最大通过
- 对于小的业务
QPS
,要把『提前限流比例』调成一个较低值,则『上限通过QPS
』会非常大。- 这样情况下,为了满足业务要求(低『提前限流比例』),网关前置限流对业务没有收益了。
- 即网关前置限流对这样的场景不适用。
- 比如,要保证300
QPS
要高成功率,推导出 『上限通过QPS
』是3百万。
这就是说 没有稳定性保障的效果了。
- 上面只是定性地简单说明,2者的关联影响 在单独的量化分析文档中详细展开说明。
了解『提前限流比例 与 最大通过QPS
2者的关系』之后,关键的问题就变成了:
不同的业务场景下,如何选择/平衡 (提前限流比例, 最大通过QPS
) 两者的值?
既然如此,期望的『网关前置限流能力』使用/配置方式就是:
- 用户给出Ta的业务
QPS
- 根据网关情况,『网关前置限流配置界面』给出 (提前限流比例, 最大通过
QPS
) 可以取的值对(即确定性的参考数字)。- 『根据网关情况』就指涉及 现实细节的部分。
- 业务根据自己场景,挑出合适自己业务的 (提前限流比例, 最大通过
QPS
) 值对。- 上面是让用户自己权衡
- 可以更进一步,我们收集 典型的业务场景,给出合适典型场景的『提前限流比例』。
- 有了参照之后,用户常常就可能复用这些判断,而不用各个应用都做详细的业务适用分析。
- 放大比例 是 多少?(放大比例 是 操作/实现细节,非业务需求)
- 放大比例 是指,比如 业务目标是限流到1万
QPS
,为了避免出现提前限流,配置成1.2万QPS
,这里放大比例是 1.2。
- 放大比例 是指,比如 业务目标是限流到1万
- 网关集群的大小
- 网关在不同单元/机房的流量是不是独立的?
- 如果有互相的影响,还涉及单元/机房这一层面的分析。
- 单元/机房这一层面这一层面的难度不高,下面的分析这个层面,以保持分析的聚焦简单。
- ……
- 通过量化分析,可以给已经使用的业务方提供确定性的能力承诺。
- 无需业务自己来反复测试来能力效果的确定性。
- 整理与总结出,不同典型业务场景
- 业务使用/配置的具体数值
- 面向业务场景的整理与总结,可以进一步方便/简化业务方理解与使用
- 通过确定的量化数据,给出面向业务的合适/不合适的可解释的原因(确定性的能力),确定、发现与扩展产品在业务上的适应范围。
透出的用户的是
- 业务
QPS
- 放大比率,比如
1.2
。- 如上文所说,放大比例是实现细节;期望不向用户透出『放大比率』。
- 期望表达成(提前限流比例, 最大通过
QPS
)2个效果数值的平衡选择。
- 但这样的作为一个业务方没有确定性的业务效果说明:
1.2
会减少提前限流的情况,但预期会减少多少?- 这个业务最关心的效果,并没有说明。
结果会是:
- 因为没有量化的参考指标,业务要自己去做反复去验证。
- 增加业务的操作成本。
- 弱化网关作为产品的能力,用的是一个网关有的一个限流功能。
- 而对于业务方,往往没有时间/资料去做量化分析,往往量化分析意识也会更差些。
- 进一步的结果会是
- 前置限流的业务效果/稳定性保障的确定性不能有效提升。
报告是Jupyter Notebook
,使用Python
完成量化数据分析。
- 网关前置限流的量化分析,参见Notebook 基于泊松分布量化分析网关前置限流的限流
QPS
偏差比例- 概念展开、计算公式推导与代码实现,参见 Notebook 基于泊松分布量化分析网关前置限流所需要的公式推导与代码实现
- 关于泊松分布,参见 Notebook 泊松分布的简介、代码实现与概率分布图像
有了基于模型的量化分析,需要与线上实际的测试数据验证匹配程度,需要继续分析。
NOTE:
快速安装
Jupyter Notebook
/Python
的数据分析运行环境,可以参见:
数据分析实践/开发环境搭建 - github.com/data-science-practice
Python
已经成为数据分析/机器学习的首选实践/开发环境。