视频网站 / ablincoln
用于设计在线实验的PHP库
Requires
- php: >=5.4.0
- monolog/monolog: ~1.0
- psr/log: ~1.0
Requires (Dev)
- phpunit/phpunit: 4.1.*
This package is not auto-updated.
Last update: 2024-09-10 02:41:34 UTC
README
ABLincoln是Facebook的PlanOut的PHP实现,PlanOut是一个在线现场实验框架。ABLincoln使得部署和维护复杂的随机实验变得简单,同时满足大规模互联网服务的约束,服务众多用户。
开发者通过定义实验来集成ABLincoln,这些实验详细说明了如何将输入(例如用户、cookie ID)映射到条件上。为了设置一个同时随机化按钮文本和颜色的实验,你可以创建一个这样的类
use \Vimeo\ABLincoln\Experiments\SimpleExperiment; use \Vimeo\ABLincoln\Operators\Random as Random; class MyExperiment extends SimpleExperiment { public function assign($params, $inputs) { $params->button_color = new Random\UniformChoice( ['choices' => ['#ff0000', '#00ff00']], $inputs ); $params->button_text = new Random\WeightedChoice( [ 'choices' => ['Join now!', 'Sign up.'], 'weights' => [0.3, 0.7] ], $inputs ); } }
然后,在应用程序代码中,你查询Experiment对象,以找出当前用户应该映射到的值
$my_exp = new MyExperiment(['userid' => 42]); $my_exp->get('button_color'); $my_exp->get('button_text');
查询实验参数会自动生成一个暴露日志,我们可以将其指向我们选择的任何位置
{"name": "MyExperiment", "time": 1421622363, "salt": "MyExperiment", "inputs": {"userid": 42}, "params": {"button_color": "#ff0000", "button_text": "Join now!"}, "event": "exposure"}
基本的SimpleExperiment
类默认记录到本地文件。更高级的行为,例如Vimeo的方法(如以下所述),可以很容易地引入,以更好地与现有的日志堆栈集成。
安装
ABLincoln作为一个独立的PHP Composer 包,托管在 Packagist 上。将其包含在您的 composer.json
文件中,以实现优雅的自动加载和依赖关系管理
{
"require": {
"vimeo/ablincoln": "~1.0"
}
}
与PlanOut参考实现的比较
ABLincoln和PlanOut原始Python发布版本在功能和用法上都非常相似。这两个包都实现了Experiment和Namespace类的抽象和具体版本,参数覆盖以方便测试,暴露日志系统,以及经过测试和验证的随机分配操作符,可以产生相同的输出。
两个版本之间的显著差异包括
- ABLincoln具有通过包含的PHP日志特性将日志记录到本地文件或任何PSR兼容堆栈的原生支持
- ABLincoln目前不包括PlanOut语言的解析器。
在生产环境中的使用
ABLincoln被移植并设计时考虑了可扩展性。以下是Vimeo选择扩展它以满足我们的测试过程需求的一些方法
应用于现有的日志堆栈
该端口提供的实验 日志特征,可以方便地在现有的系统中以最便捷的方式记录曝光数据。只需快速实现可插拔的 FileLoggerTrait 和使用 tail -f
查看日志文件,即可实时监控参数曝光。另外,PSRLoggerTrait 允许与现有符合PSR规范的日志代码进行更可定制的集成。在这里,Vimeo使用基本的 Monolog处理器 来强制执行PSR-3规范,并允许PlanOut与我们的现有日志基础设施良好地交互。
URL重写
ABLincoln 已支持 参数重写,可以快速检查难以测试的实验效果。将重写参数作为查询参数传递到您的端点是一种简单地将此行为与实时网站集成的办法。
http://my.site/home.php?overrides=button_color:green,button_text:hello
然后解析查询中的重写参数,并在实例化后传递给PHP实验API的重写方法,这是一个相对简单的任务。
感谢
PlanOut 是ABLincoln移植的软件,最初由Eytan Bakshy,Dean Eckles和Michael S. Bernstein开发,目前由Facebook的Eytan Bakshy维护。通过阅读他们的论文《设计和部署在线现场实验》(http://www-personal.umich.edu/~ebakshy/planout.pdf),了解更多关于大规模测试的良好实践。