在aws lambda上运行自己的a/b测试后端

gimel的Python项目详细描述


万向节

构建状态pypi

可缩放的a/b测试后端,大约100行代码(和免费*)

这是什么?

使用aws lambda/api gateway+redis的a/b测试后端

主要功能:

  • 由于aws lambda的特性,它具有高度的可扩展性
  • 使用redis hyperloglog实现高性能和低内存占用
  • 经济有效
  • 使用gimel deploy轻松部署。无需与AWS打交道。

寻找贡献者

单击此处了解更多信息

吉梅尔是什么意思?

吉美尔(gimel)是希伯来语字母表中的第三个字母。字母(_)在视觉上也类似于希腊字母lambda (α)</P>

安装/快速启动

您需要一个可以从aws在线访问的redis实例。然后运行:

$ pip install gimel
$ gimel configure
$ gimel deploy

 src=

它将自动配置您的aws lambda函数、api网关,并生成一个js片段以供使用 用于跟踪您的实验。

架构

 src=

客户机

我建议查看alephbet以获取更多详细信息,但在较高级别上,客户端运行在最终用户浏览器上。它将随机选择一个变量并执行一个javascript函数来"激活"它。当达到某个目标时——用户执行某个操作,这也包括在实验中参与的伪目标——然后将事件发送到后端。事件通常看起来像"实验ABC,变量红色,用户参与"或"实验XYZ,变量蓝色,已达到签出目标"。

alephbet可能会发送重复的事件,但是每个事件都应该包含一个uuid以允许后端对其进行反复制。更多信息请参见下文

数据存储-redis超级日志

数据存储会记录进入系统的每个事件。能够对唯一事件进行计数(重复数据消除)对于保持精确计数非常重要。一种方法是将每个事件存储在条目/数据库行/文档中,然后对其运行某种唯一的计数。或者,我们可以使用一个叫做超级日志的漂亮算法。hyperloglog允许您在不存储每个项目的情况下计算唯一的计数。

在存储空间方面,redis hyperloglog为每个计数器提供12k的固定大小。这为我们提供了足够的空间来存储低内存占用率的实验数据。

后端-AWS Lambda/API网关

后端必须处理一些简单类型的请求:

  • 跟踪一个事件-用一些json数据(实验名称、变量、目标和uuid)接收一个(http)请求,然后将其推送到redis。
  • 提取特定Experime的计数器nt,或者所有可以在仪表板上显示的json的实验。

仪表板

新!使用gimel仪表板访问仪表板

 src=

跟踪是如何工作的?

查看alephbet

命令参考

  • gimel--help-打印帮助屏幕。
  • gimel configure-打开编辑器以便编辑config.json文件。使用它更新您的redis设置。
  • gimel preflight-运行飞行前检查以确保您可以访问aws、redis等。
  • gimel deploy-自动部署代码并配置到aws。

高级

自定义API终结点

如果您想使用不同的api端点,可以在config.json文件中添加自己的extra_wiring(例如使用 gimel配置)。

例如,这将添加一个指向gimel轨迹的../prod/my_tracking_端点url

{"redis":{...},"extra_wiring":[{"lambda":{"FunctionName":"gimel-track","Handler":"gimel.track","MemorySize":128,"Timeout":3},"api_gateway":{"pathPart":"my_tracking_endpoint","method":{"httpMethod":"GET","apiKeyRequired":false,"requestParameters":{"method.request.querystring.namespace":false,"method.request.querystring.experiment":false,"method.request.querystring.variant":false,"method.request.querystring.event":false,"method.request.querystring.uuid":false}}}}]}

请参见接线

隐私、广告屏蔽(GDPR等)

gimel为a/b测试实验数据提供了后端。这些数据是聚合的,不包含任何个人信息。它只存储与其他操作相比具有特定变化的操作总数。

因此,gimel应满足gdpr和类似隐私法规的隐私要求。

然而,重要的免责声明:

  • 我不是律师,这完全取决于你是否和如何决定使用吉梅尔。请与当地法规核对,并获得法律建议,自行决定。
  • 一些广告拦截器是额外的活力,并会阻止在url中使用track关键字的请求。因此,默认情况下,对gimel的跟踪请求可能会被阻止。作为图书馆的作者,我没有试图掩盖这样一个事实,即运行A/B测试需要某种形式的跟踪,即使我相信这是尊重隐私的。
  • 决定使用gimel的用户可以,如果他们愿意的话,分配一个不同的端点,这个端点可能会通过广告屏蔽,但这完全取决于他们。有关如何实现这一点,请参见自定义API端点
  • 与几乎任何工具一样,它可以用于善或恶。一些A/B测试可以被视为操纵、不公平或其他非法行为。同样,用你自己的道德指南针来决定是否可以使用A/B测试或特定的A/B测试。

许可证

gimel是根据mit许可证发行的。所有第三方库和组件都在 各自的许可条款。

Copyright (C) 2016 Yoav Aner

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
HTTP标头的java InputStream未终止   java测试SpringWebListener   具有定义的替换编号Java的regex ReplaceAll   在java中使用contains()方法   java在选择查询中使用JoinColumn字段   具有用户的java Start-stop demon不是以给定用户启动   java glBufferData生成GL\u无效\u操作   java中循环代码的循环   Java位无符号移位(>>>>)会产生奇怪的结果   java HQL使用点分隔符从select获取结果   条纹、弹簧、玩耍(或?):使用哪种高性能Java框架?   广播接收机中的java停止服务   java回收器视图占据整个屏幕。不在上面显示我的UI元素   java使MySQL查询更快   java MappedByteBuffer查询   java递归算法问题