Tarantool:分析师外观

大家好!我叫安德烈·卡普斯汀(Andrey Kapustin)。我在Mail.ru Group担任系统分析师。我们的产品为用户形成了一个单一的生态系统,其中的数据生成了许多独立的基础架构:出租车和食品订购服务,邮政服务,社交网络。如今,我们可以更快,更准确地预测客户的需求,我们可以更快,更准确地向客户提供我们的产品。

现在,许多系统分析师和工程师都在提问:

  1. 如何设计用于实时营销的触发平台架构?
  2. 如何组织符合与客户互动的营销策略要求的数据结构?
  3. 如何确保这种系统在非常高的负载下稳定运行?

这些系统基于高负载处理和大数据分析。我们在这些领域积累了丰富的经验。并且,作为一个真实故事的示例,我将向您介绍我们使用Tarantool进行实时营销领域的分析和解决方案开发的方法。

一旦大型电信运营商向我们寻求帮助。

任务是这样的:

我们有超过1亿用户。我们对它们了解很多:当前余额,流量,关联服务,旅行,最喜欢的地方。我们尽可能地使用信息:我们白天收集数据,将大量信息放入存储库(DataLake)中。我们在晚上启动处理程序,在早晨我们制作广告活动并发出报价。

我们希望实时地做同样的事情!

为什么?因为电信运营商处理信息的速度越快,他们可以赚到的钱就越多。例如,在冲动购买中:用户在午餐时间走过一家咖啡馆,然后手机打折,因此他选择了这个特殊的咖啡馆。也就是说,您需要在适当的时间“仅”提供适当的产品,并以方便的方式帮助立即响应该提议。



解决业务问题所需的条件:

  • 您可以通过客户资料确定需求。
  • 根据人类生活事件确定时刻。
  • 刺激反馈-选择最佳的沟通渠道。

这称为实时营销。对于电信行业,可以在适当的时间向订户发送相关的个性化消息,并具有立即响应报价的能力。可以为目标群体和特定用户形成建议,而在任何情况下都应实时处理请求。

从技术角度来看,我们必须解决以下问题:

  • 保持超过1亿订户的最新数据;
  • 负载为30,000 RPS的实时事件流处理;
  • 在满足非功能性需求(响应时间,可用性等)的情况下,向订户提供目标报价并进行路由;
  • 订户无缝连接新的异构数据源。

在这种情况下,“实时”是指在30秒内处理信息。再也没有意义了,错过了那一刻,客户走了。最可悲的是,在这种情况下,我们不清楚为什么(?)-我们提出了错误的建议还是没有及时处理?

获得此问题的答案对于产品开发非常重要:

  1. 产品的市场推广:检验假设,增加收入。
  2. 我们吸引潜在客户:我们投资广告,占领市场。
  3. 我们连接其他服务或服务:我们扩展产品线。

在每个阶段都容易出错。错误的代价是巨大的。我们必须迅速而准确地击败!为此,客户信息必须是完整且最新的。在这种情况下,信息确实物有所值!

毕竟,我们对客户的了解越多,我们就会赚到更多。这意味着将每个新参数添加到客户端配置文件可以提高定位的准确性。但这是一个持续的过程,因为:

  1. 客户群在不断增长。
  2. 服务范围正在扩大。

在这种情况下,细分客户群非常有效。在这种情况下,决定使用分层机制-订户的多元分类。

简而言之,我们通过无限数量的属性的值范围来区分特定的订户组(层)。在这种情况下,用户应在属性值过渡到相应范围后立即自动更改层。

下图是从童年开始的三维分层模型的示例。球是订户。



对于每个客户,我们可以计算出他们在吸引他上花了多少钱,赚了多少钱以及如何赚钱。也就是说,我们知道多少信息成本,如果不更新,就会损失多少信息

他们计数并决定-有必要进行更新!并立即出现问题:总是缺少某些东西。在每个项目中,来自客户的新需求都与传统知识,体系结构,彼此以及...常识相矛盾。每天保持数据完整性和相关性变得越来越困难。新的信息来源带有新的属性,这些属性不清楚在哪里存储以及如何处理。

应该记住的是,标准化程度越高数据,更多限制,目录,签入它们。任何试图“在旅途中”向表中添加几个字段的人都知道什么是“ smut”:它不适合当前的数据模型!客户如何解释说,如果您添加一个新字段,则必须重写一半的项目代码?我们在入口处“折叠”或“丢弃”“额外”分析,因此,我们无法形成相关报价。

西方同事称这种效应为“乱扔垃圾”。

结果,数据占用更多空间并且更难以处理。随着信息量的增加,这变得至关重要,因为事务处理速度降低了。我们的目标是处理每个请求不超过一分钟,每秒处理30,000个请求。

结论:用于实时营销,标准化不适合 100+百万订户。

我们以通用客户档案的形式提供了一个解决方案。它位于键值存储中,因此我们无法修复数据结构。每列都是一个键和值,可以是任何值。

我们得到以下组合:

  • 很少更新的静态属性(名称,护照,地址)。带ID的强制块。
  • 任意长度的动态尾部-经常更新数据,具体取决于源。每个源有几个独立的块。

这种方法称为非规范化。方便吗?

  1. “尾巴”可能没有验证。
  2. 我们将“原始”数据直接保存而不进行处理。
  3. 我们保存所有传入的信息,我们什么也不会丢失。
  4. ID , .
  5. ( 2-3 ), .
  6. : .


现在,您需要选择一个实施工具。通常由架构师根据分析师组装的要求来完成。找出NFT非常重要-预期的数据量和负载水平。这取决于我们将使用哪种数据存储和处理方法。

本章的标题暗示我们的服务将处理大量数据。很多-多少?让我们弄清楚。

如果用肉眼看不到它们之间的关系,则可以认为数据很大。

我们处理超过1亿个包含非结构化信息的不同客户档案,这些档案经常被更新和使用-这是真正的大数据。

您需要缓存当前的客户资料。不将热数据存储在RAM中,就无法实现实时处理。

高负荷


现在,我们将处理负载强度,即请求数。术语“高负载”用于描述设备停止承受负载的情况。

我们处理不同类型的事件,这些事件以每秒10到3万个请求的强度连续发生。在这种情况下,将使用复杂的业务逻辑,并且反应速度至关重要。显然,我们正在设计一个高负载的服务,该服务应根据即时负载动态扩展。

Tarantool作为加速器


Mail.ru Group的我们使用Tarantool解决此类问题。在Habré上,有关“引擎盖下”如何构建的说法很多,我不再赘述,我

只想提一下要点:Tarantool是一瓶中的内存DBMS和应用程序服务器。

当处理大量数据时,建议以两种方式使用它:

  1. 作为在RAM中缓存信息以加快访问速度的数据展示。
  2. 作为根据指定规则处理数据的应用服务器。

也就是说,业务逻辑存储在数据旁边,这对于高负载服务至关重要。在我们的项目中,我们将Tarantool用作具有内置业务逻辑的“智能”数据店面,根据该店面可以对传入的事件和信息流进行实时处理。

为什么Tarantool对RTM有效:

  1. 热数据缓存。客户端配置文件缓存在内存中,因此它始终是最新的。
  2. 复杂的实时计算。针对每个事件实时向客户提供个人报价。
  3. 容错和可扩展的解决方案:

我们的项目有两个明显的风险:

  1. , . — Tarantool c , .
  2. , . , . , . , . ,即 在几个分片之间分配客户端配置文件表的1亿条记录,以并行化查询处理,从而减少记录的负载。最简单的示例是将客户资料表除以ID值范围。为了解决此问题,Tarantool提供了水平缩放工具,有关更多信息,请参见文章“ Tarantool墨盒:将Lua后端分三行 ”。

结论


Tarantool不替代Oracle或其他分析存储库。同时,它对于实时处理大量数据非常有效。我们在约定的条款和项目预算范围内成功解决了客户的任务,因此我建议在创建高负载的服务时尝试使用此工具。

All Articles