antikirra / probability
2.0.0
2024-02-12 14:18 UTC
Requires
- php: ^5.6 || ^7.0 || ^8.0
README
安装
composer require antikirra/probability:^2
基本用法
使用此机制主要有两种策略。您可以使用 probability 函数调用来有预测性地影响某些事件的激活概率。例如,当每秒处理大量请求时,记录所有请求可能会很昂贵。相反,您可以选择仅收集15%(随机选择)的传入流量来监控系统状态。
<?php use function Antikirra\probability; require __DIR__ . '/vendor/autoload.php'; if (probability(0.15)) { $logger->info($payload); }
这真是太棒了!然而,使用这种方式,我们无法保证绝对稳定性。换句话说,在少量迭代后,算法可能看起来没有正常工作。实际上,通过运行合成测试,您可以看到,在1000次迭代中,您可能得到142、153或165个积极的激活。但无需担心,因为在大规模重复的情况下,均匀分布将发挥其作用。这一点应该始终牢记!
为了在稳定运行和期望的概率分布水平之间取得平衡,例如在您的网站上对新功能进行A/B测试时,您可以使用独特的用户属性,例如标识符或IP地址,来设置所需的分布级别并将其绑定到该参数。平均而言,只有15%的网站观众会看到更改。当您对同一用户进行后续函数调用时,它将在每次迭代中返回相同的值。这非常方便,因为它允许您避免存储和重新平衡功能发布列表的需求。
<?php use function Antikirra\probability; require __DIR__ . '/vendor/autoload.php'; if (probability(0.15, $_SERVER['REMOTE_ADDR'])) { // or probability(0.15, (string)$userId) $app->feature('#1337')->enable(); }
这个例子生动地说明了机制的运作原理,但在实践中存在一个缺陷。问题是函数的参数组合总是会返回相同的值,并且对于同一用户将启用不同的功能。为了克服这种行为,您需要自定义关键参数,使其对每个特定功能都是唯一的。这样,每个实验将在不同的用户组上随机进行。
<?php use function Antikirra\probability; require __DIR__ . '/vendor/autoload.php'; if (probability(0.15, 'feature_#1337_for' . $_SERVER['REMOTE_ADDR'])) { $app->feature('#1337')->enable(); } if (probability(0.15, 'feature_#2517_for' . $_SERVER['REMOTE_ADDR'])) { $app->feature('#2517')->enable(); }
请记住,只有在大量数据或长时间内才能观察到显著结果。明智地使用此方法并评估其使用的风险。如果您仍有疑虑,请对这一功能进行简单的合成测试,以了解其机理。
祝您好运!