大数据实例:高负载低延迟动态算法解析

简介:

本文讲的是大数据实例:高负载低延迟动态算法解析,这篇文章由Datasalt的创始人Ivan de Prado和Pere Ferrera提供,Datasalt是一家专注于大数据的公司,推出了Pangool和Spoilt SQL Big Data等开源项目。在这篇文章中,通过BBVA信用卡支付的例子详解了云计算中的低延时方案。

  以下为文章全文:

  使用信用卡进行支付的款项是巨大的,但是很明显,通过分析所有的交易,我们也可以从数据中得到内在的价值。比如客户忠诚度、人口统计数据、活动的受欢迎程度、商店的建议和许多其他的统计数据,这对商家和银行来说都是非常有用的,可以改进他们与市场的联系。在Datasalt,我们已经与BBVA银行合作开发了一个系统,该系统能够对多年的数据进行分析,并为网络应用程序和移动应用程序提供不同的方案和统计资料。

  我们除了需要对面处理大数据输入这个主要挑战外,还要面对大数据的输出,甚至输出量比输入量还要大。并且需要在高负载下提供更快捷的输出服务。

  我们开发的解决方案中有一个每月只需几千美元的基础设施成本,这要感谢使用的云(AWS)、Hadoop和Voldemort。在下面的内容中,我们将解释所提出的架构的主要特点。

  数据、目标和首要决定

  该系统利用BBVA的信用卡在世界各地的商店交易信息作为输入源的分析。很明显,为了防止隐私问题,数据是匿名的、客观的和分离的,信用卡号码被切割。任何因此而产生的见解总是聚集,所以从中得不出任何个人信息。

  我们计算每个店和每个不同的时间段的许多统计资料和数据。以下是其中的一些:

  ·每家店铺的付款金额的直方图

  ·客户端的保真度

  ·客户端人口统计

  ·商店的建议(在这购买的客户还购买了……)、过滤的位置和商店类别等

  该项目的主要目标是通过低延迟的网络和移动应用提供所有这些信息到不同的代理(商店、客户)。因此,一个苛刻的要求是要能够在高负载下能够提供亚秒级延迟的服务。因为这是一个研究项目,还需要在代码和要求需要处理方面有一个高度的灵活性。

  由于更新的数据只能每一次并不是一个问题,我们选择了一个面向批处理的架构(Hadoop)。并且我们使用Voldemort作为只读存储服务于Hadoop产生的见解,这是一个既简单又超快的键/值存储。

  平台

  该系统以Amazon Web Services为基础建立。具体地说,我们用S3来存储原始输入数据,用Elastic MapReduce(亚马逊提供的Hadoop)分析,并用EC2服务于结果。使用云技术使我们能够快速迭代和快速交付功能原型,而这正是我们需要那种项目。

  体系架构

  该架构具有三个主要部分:

大数据实例:高负载低延迟动态算法解析

  ·数据存储:用户保持原始数据(信用卡交易)和得到的Voldemort商店。

  ·数据处理:Hadoop的工作流程在EMR上运行,执行所有计算并通过Voldemort创建所需要的数据存储。

  ·数据服务:一个Voldemort集群从数据处理层提供预先计算好的数据。

  每一天,银行上传在那一天发生的所有交易到S3上的一个文件夹中。这可以让我们保留所有的历史数据——每天所有的信用卡执行的交易。所有的这些数据都被输入处理层,所以我们每天都会重新计算一切,之后再处理这些数据,我们就能够非常灵活。如果需求变更或如果我们找到一个愚蠢的错误,我们只需要在下一批中更新项目代码和所有的固定数据就可以了。这让我们作出了一个开发的决定:

  ·一个简化代码的基础架构

  ·灵活性和适应性的变化

  ·易于操作的人为错误(刚刚修复的错误,并重新启动的过程)

  每天,控制器都会在EMR上启动一个新的Hadoop集群以及启动处理流程。这个流程由约16组MapReduce工作组成,计算各种方案。最后的一部分流程(Voldemort索引)负责构建稍后会部署到Voldemort的数据存储文件。一旦流程结束,得出的数据存储文件就会上传到S3上。控制器关闭Hadoop集群,并发送一个部署请求给Voldemort。然后,Voldemort会从S3上下载新的数据存储,并执行一个热交换,完全取代旧的数据。


  技术

  Hadoop和Pangool

  整个分析和处理流程使用Pangool Jobs在Hadoop基础上。这给我们带来了良好的平衡性、灵活性和敏捷性。元组的使用使我们在流程之间使用简单的数据类型(int、string)传送信息,我们可以把其他复杂对象(如柱状图)与他们自己的自定义进行序列化。

  而且,因为Pangool仍然是一个低级别API,我们可以在需要时细调大量单个作业。

  Voldemort

  Voldemort是一个分布式键-值(Key-value)存储系统,是亚马逊Dynamo的一个开源克隆。

大数据实例:高负载低延迟动态算法解析

  Voldemort背后的主要想法是在组块中分隔数据。每个组块都被复制,并担任Voldemort集群的节点。每个Voldemort守护进程都能够路由查询节点,以保持一个特定的键值。Voldemort支持快速读取和随机写入,但在这个项目中,我们使用Voldemort作为只读数据存储,在每个批处理过程取代所有数据组块。因为数据存储预先由Hadoop生成、查询服务不受部署过程影响。这是使用这种只读、批处理方法的优点之一。我们也改变集群拓扑结构的相当简易的方法,并可在需要的时候重新平衡数据。

  Voldemort提供了一个Hadoop的MapReduce作业,创建数据存储在一个分布式集群。每数据块仅仅是是一个Berkeley DB的B树。

  Voldemort的接口是TCP,但我们想使用HTTP服务数据。VServ是一个简单的HTTP服务器,它将传入的HTTP请求转换为Voldemort TCP请求。负载均衡器负责所有VServs之间的共享查询。

  计算的数据

  统计

  部分分析包含计算简单的统计数据:最大值、最小值、平均值、标准偏差、独特的技术等。他们都使用众所周知的MapReduce方法来实现,但我们也计算一些柱状图。为了有效地在Hadoop实现它们,我们创建了一个自定义的柱状图,可以在一次遍历中计算。此外通过各个业务相应的柱状图,我们只需要一步MapReduce,就可以为所有的业务做任何周期的简单统计。

  为了减少柱状图所使用的存储量,并改善其可视化,原来的计算柱状图中许多小的项目被转化成几个大的不同宽度的项目。下图显示了一个特定的柱状图转化的最佳方案:

大数据实例:高负载低延迟动态算法解析

  使用随机重启爬山近似算法对最佳柱状图进行计算。下面的图显示了每个爬山迭代上可能的变动:

大数据实例:高负载低延迟动态算法解析

  该算法已被证明是非常快速、准确的:相比一个精确的动态算法,我们已经实现了99%的准确率,这是高速增长的因素之一。

  商务建议

  建议使用同现(co-ocurrences)计算。也就是说,如果有人A和B这两个商店都买了东西,那么A和B之间存在一个同现。只有一个同现考虑,即使客户在A和B购买了好几次。

  但同现这一简单想法被使用还需要一些改进。首先,最受欢迎的商店都使用一个简单的频率删减过滤掉,因为几乎每个人都会在他们那购买,所以没有价值再推荐它们。按位置、按商店类别或同时进行过滤推荐,也改善了建议。基于时间的同现会产生较热建议与“总是正确”的建议之间的较量。在可能出现并发行为的地方(用户在购买后看见推荐商品又买了第二件)限制时间。

  尽管一些挑战不容易克服,但Hadoop和Pangool仍然是计算同现和生成建议的完美工具。特别是如果一个买家在许多商店进行支付行为,这个信贷调用将显示同现的数量二次增长,使分析不是成线性比例。因为这种情况极少出现,所以我们只限制每张卡的同现的数量,只考虑那些买家在哪买的最多。

  成本和一些数字

  在Voldemort统计的,在西班牙使用的BBVA信用卡一年的交易信息量270GB。整个处理流程将在一个24“m1.large”集群上运行11个小时。整个基础设施,包括EC2实例所需要的服务所产生的数据将每月花费3500美元。

  虽然仍有优化的空间,但考虑到解决方案是敏捷的、灵活的并且在云中,这个价格还是相当合理的。系统运行在一个内部基础设施的成本会便宜很多。

  结论与未来

  幸好有了像Hadoop、Amazon Web Services和NoSQL数据库这样的技术,才可以以合理的成本,迅速发展可扩展的、灵活的解决方案。

  未来的工作将涉及通过Splout SQL替代Voldemort,将允许部署hadoop生成的数据集,扩展了低延迟的键/值到低延迟的SQL。这将减少分析时间并“实时”执行许多聚合的数据量。

作者:  王旭东 

来源: IT168

原文标题:大数据实例:高负载低延迟动态算法解析


相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
相关文章
|
5月前
|
算法 搜索推荐 大数据
当“爆款书”遇上大数据:出版业的老路,正在被算法改写
当“爆款书”遇上大数据:出版业的老路,正在被算法改写
500 8
|
5月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
6月前
|
机器学习/深度学习 人工智能 搜索推荐
从零构建短视频推荐系统:双塔算法架构解析与代码实现
短视频推荐看似“读心”,实则依赖双塔推荐系统:用户塔与物品塔分别将行为与内容编码为向量,通过相似度匹配实现精准推送。本文解析其架构原理、技术实现与工程挑战,揭秘抖音等平台如何用AI抓住你的注意力。
1502 7
从零构建短视频推荐系统:双塔算法架构解析与代码实现
|
6月前
|
机器学习/深度学习 自然语言处理 算法
大数据选举预测:算票的不只是选票,还有算法
大数据选举预测:算票的不只是选票,还有算法
241 0
|
6月前
|
机器学习/深度学习 存储 算法
动态规划算法深度解析:0-1背包问题
0-1背包问题是经典的组合优化问题,目标是在给定物品重量和价值及背包容量限制下,选取物品使得总价值最大化且每个物品仅能被选一次。该问题通常采用动态规划方法解决,通过构建二维状态表dp[i][j]记录前i个物品在容量j时的最大价值,利用状态转移方程避免重复计算子问题,从而高效求解最优解。
691 1
|
6月前
|
算法 搜索推荐 Java
贪心算法:部分背包问题深度解析
该Java代码基于贪心算法求解分数背包问题,通过按单位价值降序排序,优先装入高价值物品,并支持部分装入。核心包括冒泡排序优化、分阶段装入策略及精度控制,体现贪心选择性质,适用于可分割资源的最优化场景。
412 1
贪心算法:部分背包问题深度解析
|
6月前
|
机器学习/深度学习 边缘计算 人工智能
粒子群算法模型深度解析与实战应用
蒋星熠Jaxonic是一位深耕智能优化算法领域多年的技术探索者,专注于粒子群优化(PSO)算法的研究与应用。他深入剖析了PSO的数学模型、核心公式及实现方法,并通过大量实践验证了其在神经网络优化、工程设计等复杂问题上的卓越性能。本文全面展示了PSO的理论基础、改进策略与前沿发展方向,为读者提供了一份详尽的技术指南。
粒子群算法模型深度解析与实战应用
|
6月前
|
机器学习/深度学习 资源调度 算法
遗传算法模型深度解析与实战应用
摘要 遗传算法(GA)作为一种受生物进化启发的优化算法,在复杂问题求解中展现出独特优势。本文系统介绍了GA的核心理论、实现细节和应用经验。算法通过模拟自然选择机制,利用选择、交叉、变异三大操作在解空间中进行全局搜索。与梯度下降等传统方法相比,GA不依赖目标函数的连续性或可微性,特别适合处理离散优化、多目标优化等复杂问题。文中详细阐述了染色体编码、适应度函数设计、遗传操作实现等关键技术,并提供了Python代码实现示例。实践表明,GA的成功应用关键在于平衡探索与开发,通过精心调参维持种群多样性同时确保收敛效率
机器学习/深度学习 算法 自动驾驶
1136 0
|
6月前
|
机器学习/深度学习 人工智能 资源调度
大语言模型的核心算法——简要解析
大语言模型的核心算法基于Transformer架构,以自注意力机制为核心,通过Q、K、V矩阵动态捕捉序列内部关系。多头注意力增强模型表达能力,位置编码(如RoPE)解决顺序信息问题。Flash Attention优化计算效率,GQA平衡性能与资源消耗。训练上,DPO替代RLHF提升效率,MoE架构实现参数扩展,Constitutional AI实现自监督对齐。整体技术推动模型在长序列、低资源下的性能突破。
705 8

推荐镜像

更多
  • DNS