Quints

为 Quints 平台开发联盟营销软件

互联网上充斥着各种赌博场所和 iGaming 业务,从赌场到体育博彩,应有尽有。 每天都有数以千计的玩家穿梭其中,下注和进行其他活动。 玩家不是自己来到这些赌场和博彩服务,而是通过分发链接的中介,通常是通过互联网上的横幅广告。

如果玩家通过第三方个人或公司在赌场注册,那么玩家消费金额的一定比例将支付给中介。 创建 Quints 的目的是为博彩公司提供联盟跟踪解决方案,以管理他们关于玩家和玩家邀请者的全部信息。

Quints 的在线赌博联盟统计服务主要有三个参与者:

  • 客户 - 网上赌场经纪人、博彩代理,甚至网店。
  • 玩家 - 在网上赌场玩游戏、向博彩公司下注或进行网购的个人。
  • 联盟成员 - 主要通过广告将玩家带给客户的中介。 客户会雇佣不同的联盟成员以将玩家推荐给他们,联盟成员会由此获得奖励。

然而,为了向各个联盟成员支付奖励,客户需要知道每个联盟成员带来了多少玩家,以及这些玩家的最终消费金额。 作为一家在线博彩软件提供商,这就是 Quints 的专业领域。

Quints 是介于客户和联盟成员之间的一层。 它是一个收集联盟营销统计数据的系统,并使用各种图表、报告等来处理这些数据。 客户和联盟成员都会使用 Quints,因此它有两种不同类型的客户账户。

开始

Quints 为联盟成员生成特殊的链接,联盟成员将其插入自己的广告中。 当玩家点击链接时,他们首先会被定向到 Quints。 系统会捕获这一数据并将其进一步重定向到客户。

联盟营销平台接收到一组数据后,会使用特定的公式来计算每个玩家的联盟付款额。 因此,Quints 本质上是一种博彩统计数据的聚合器或计算器。

Quints 的所有者向 Evrone 提供了一款已经开发了两年的产品,用于联盟成员报告和客户管理。 这个应用存在相当多的老旧功能,大约 70%-80% 的功能已经存在。 然而,在我们共同开展此项目的过程中,大部分工作已经完成并得到了改进。 现在,我们的团队正在致力于新功能的优化和实现,以使项目变得更加成功。

任务

Quints 的主要挑战是,它不是单一的项目,而是针对每个客户的许多个具有各自特点的不同项目。 项目的核心部分已经开发完毕,但当有新的客户连接时,就为他们制作一个单独分支。 然后会以这个分支为基础,为该特定客户开发一个单独的应用。

简而言之,对于 10 个客户,我们就有 10 个来自核心的分支,这在本质上会变成 10 个不同的项目。 而且,将来每个客户都会希望能够自己改进或修改各自的项目。 结果,我们收到了 10 个项目,而不是一个需要开发和支持的项目,随着 Quints 继续吸引新客户,这个数字预计还会增长。

部署新功能非常困难,因为所有项目彼此之间都略有不同。 而且在部署时,必须考虑到这些具体的差异。 由于 Quints 需要吸引新客户,这种架构的前景似乎势不可挡,但每一个新客户都意味着更多的工作。

解决方案

当我们加入这个项目时,我们开始做的第一件事就是改变架构的方式。 我们开始(现在仍在)朝着统一的项目前进。 我们希望确保所有客户都具有相同的代码,仅在配置和设置方面有所区别。 这样我们就可以只开发一个项目,而不是为每个客户开发一个项目。

我们还在项目的生命周期中得出了一个结论,即它在客户和应用本身之间缺少一层。 因此,我们创建了一个服务,允许客户向我们发送原始数据,而我们会使用 DWH 服务收集这些数据,并按照 Quints 所需的格式对其进行准备。 这样一来,客户就不需要在自己那侧的聚合上花费时间。 这是一个会交换大量数据的高负载服务,现在它工作得很好。

我们与 Quints 团队一同起草了关于该项目工作的文档。 最初,该应用没有任何文档。 我们还试图使项目中的所有测试达到正确的状态。 总的来说,该项目正在对功能进行密集的重构。

技术栈

这个项目不是单体应用,而是分为前端和后端部分。 后端用 Ruby on Rails 编写,前端是 Angular.js。 前端和后端是独立的应用,两者通过后端提供的 API 进行通信。

基础架构和技术栈:

  • 基础架构:Kuber, DO, Prometheus (自托管), ELK (自托管), Amazon, CloudFlare
  • 前端: SPA (单页应用) on Angular.js 
  • 后端: Ruby 2.3, Rails 4.2, Postgres 9.x, ClickHouse, Sidekiq Enterprise
  • 其他: Gitlab (自托管), Jira, Confluence, Sentry (自托管), Mailgun, Testrail, Quints VPN

最初,该项目是通过 Capistrano 部署到服务器上的,但逐渐地,我们转向了 Docker 和 Docker-Compose,后来又转向了 Kubernetes。 我们参与了制定战略招聘决策,并创建了单独的 DevOps 方向。

为了监控应用的状态,我们使用了以下工具:

  • Sentry - 监视应用中的异常
  • Grafana - 用于服务器资源监控

此外,该项目严重依赖于 Gitflow。 对于每个客户,会从主项目中生成一个代码分支。 我们还编写了一个特殊脚本,由分支继承人从主存储库中拉取所有更改。 然而,这非常不方便,我们正在努力摆脱这样的实现。

该项目记录了多次 DDoS 攻击。 因此,我们添加了 rack-attack gem,并针对节流和暴力密码破解进行了配置。 它目前负责防止 DDoS ​​攻击。

我们正在逐步实施新的客户体验优化解决方案。 因为应用中的数据计算在代码和 SQL 查询中都比较模糊,所以优化会同时影响这两个方向。 在优化时,我们使用了标准工具,例如 RSpec-benchmark、RubyProf、StackProf 和 MemoryProfiler。

考虑到从顾客那里导入数据,我们实现了与各种数据源的交互。 默认情况下,该应用使用的是 SFTP,但现在它可以使用 Google 云存储,还可以直接从客户 API 获取数据。

主要挑战

我们面临的问题之一是统计数据的计算不正确,这要么是由于来自客户的数据不正确,要么是由于应用中的内部问题。 例如,去年年底,一些子项目的活动大幅增加。 它的增长速度快到应用跟不上计算。 我们必须全天监控应用的运行,并在紧急情况下手动解析收到的信息。

此外,正如我们前面提到的,Quints 会定期遭遇 DDoS ​​攻击。 然而,我们的 DevOps 和团队领导很快就解决了这些颠覆该项目的企图,项目从未出现过不可用的情况。 我们还遇到过由一名黑客引起的问题,他在系统中进行了注册,并开始发送自动生成的流量。 但是,我们很快就发现了这一点,并禁止了这项活动。

流量分配系统

最初,Rails 单体应用很难处理 600 RPS 的广告流量负载(点击量和横幅广告浏览量)。 此外,Postgres 数据库在不断变大,它处理大量数据很困难,甚至分区也没有多大帮助。

Quints 的一个关键企业客户对功能和负载提出了新的要求。 新功能应该包括根据不同的路由规则灵活配置流量重定向。 例如,根据 IP 请求、广告宣传周期和其他设置确定的最终用户区域,有必要重定向到特定资源。 因此,我们决定实施流量分配系统 (TDS),作为网站间买卖流量的中间人。

我们希望该系统能够承受至少 2000 RPS 的工作负载,并决定将 TDS 作为单体应用之外的一个独立系统来实现。 部分架构选项是从头开始设计的,其中一些功能从单体应用转移到了新的系统。 我们使用 Roda (Ruby) 微框架在微服务架构的基础上实现了 TDS。 为了点击量和浏览量原始流量数据的存储,我们使用了 Clickhouse DBMS,它能够处理每条记录的海量数据,并以闪电般的速度执行数据聚合的分析查询。 我们集成了 Kafka,用于将数据传送到 Clickhouse。 Kafka 还用于将聚合数据传输到主 Quints 单体系统。

结果,我们实现了以下功能:

  • 实现了 TDS 功能
  • 使任何 TDS 组件都可以水平扩缩容
  • 使其能够在一个节点上承受 4000 RPS 的负载(我们可以进一步在水平方向增加节点数,提升系统的吞吐量)
  • 将部分功能从单体应用移到了更易于修改、维护和扩展的新系统
  • 降低了主要单体式应用的负载
  • 降低了主 Postgres 存储的负载

成果

除了开发和支持该系统本身外,我们还参与了以下内容的构建:

  • 软件产品的技术文档包
  • 预测功能和项目发布的交付时间的流程
  • 面试和招聘新员工的流程
  • 成熟的入职流程,包括用于学习文本和视频文档、指导和反馈的路线图
  • 离职流程
  • 为最终客户创建月度报告的流程

我们在构建开发和交互流程上投入了大量的时间和精力。 我们正在与 Quints 一起努力建立专业知识的共享和记录保存。

这个项目取得了很好的效果,我们的贡献给客户留下了深刻的印象,他们决定提高 Evrone 在该项目中的参与度。 现在,Quints 项目的 Evrone 团队包括 12 名后端开发人员、3 名 QA 工程师、一名客户经理和一名直接参与项目团队整体管理的项目经理,团队中包括 20 多名专家。

如果您正在寻找自动化联盟业务,或者您想了解更多关于在博彩公司管理中使用聚合器的信息,请随时使用下面的表格联系我们。

在我的整个职业生涯中,我与许多不同的开发团队进行过合作 - Evrone 团队成员都是非常出色的专业人士。 我喜欢他们解决任务的自信方式。 无论面对什么问题,他们总能找到解决方法。 项目经理会随时让我们及时了解项目细节,同时高质量地构建了开发过程。 所有任务都添加了标签;很好地确立了业务流程。
Roman Bout
Quints.io CEO
联系我们
已有项目构想?
我们一起来实现它吧
添加附件
文件必须小于 8 MB
允许的文件类型:jpg jpeg png txt rtf pdf doc docx ppt pptx
本网站受 reCAPTCHA 保护,并适用 Google 隐私政策服务条款