智能和愉快的客户体验,非常考验交互式应用程序的性能,这就要求高性能数据库能够以最低的复杂性和成本处理各种应用程序场景,并且性能不受影响。Redis 就是这样一个数据库,大量的 Redis 企业用户使用它进行实时分析。
高性能的业务驱动因素
实时分析
日常工作和生活中,当用户使用应用程序时,处于用户交互前沿的新一代应用程序通常会告诉用户:“我们注意到你喜欢 x,我们认为你会喜欢 y。”或者当用户看到下一步或下一次购买的选择时,他们会得到这样一条信息:“我们的许多用户在选择 a 时选择 c 似乎最开心。我们认为你应该知道。”或者有时候,“你刚刚预订了 Q,这里有一些关于 R 的评论,你可能之后想看看 R。”
这些精明的应用程序会在用户的其他行为/决定的背景下,在他们还很热情的时候,向用户提供优惠,并准备好增强他们的体验。这样的报价通常比几天后通过一封冷冰冰的电子邮件或一个冷冰冰的电话发出的报价要有力得多。
应用程序中的这种额外的智能还可以带来令人愉快的用户体验,一个刚刚预订了“芝加哥第二城”演出门票的用户可能想在演出之前预订晚餐,并且很高兴看到附近的企业提供折扣或交易。最后,这种类型的智能具有大量的商业意义,因为竞争企业可以很容易地抓住忠实的客户,如果他们提供更好的体验。
衡量应用程序的“聪明度”还可以包括检测奇怪或不寻常的行为,这些行为标志着不同类型的欺诈,从游戏欺诈到身份欺诈或滥用促销。为了有效,需要在用户结束其欺诈活动之前完成对当前行为的分析处理和对此类欺诈行为的检测。这些类型的应用程序可以使用来自多个不同来源的数据,并与当前用户行为进行比较,以检测和防止滥用。
随着廉价计算能力、数据处理工具和学习框架的日益普及,将“智能”整合到应用程序中变得越来越容易实现。然而,在不影响应用程序的性能或响应性的情况下添加这种智能是至关重要的。
特别是面向客户的应用程序必须在 100 毫秒内响应用户,以满足用户体验的期望。由于 Internet 往返延迟通常高达 50ms,因此必须在 50ms 内生成应用程序处理、数据访问和响应。
要大规模实现这一点,所使用的数据库必须能够在任何负载条件下提供亚毫秒级的响应时间。再加上实现智能的需要,这意味着您对实时数据的分析操作需要以相同的速度和相同的操作来完成。换句话说,数据库内分析对于满足性能和功能需求至关重要。
图1所示:端到端应用程序响应时间需求
Redis 的分析能力
Redis 是一个内存数据库平台,以其高性能、数据结构的极端通用性和对任何数据处理、分析或存储用例的模块化可扩展性而闻名。
在性能方面,Redis 已经经过基准测试,在一个普通的亚马逊云的实例下,以亚毫秒的延迟处理 100 万次操作/秒。当涉及到端到端应用程序吞吐量和延迟时,Redis 以最少的资源轻松胜过市场上所有其他 NoSQL 数据库。
但是当涉及到分析时,真正的性能提升是由它的数据结构提供的,包括集合、排序集、哈希、列表、字符串、位图和 Hyperloglog。数据结构不仅提供了存储可变结构数据的机制,还提供了内置操作,可以在内存中对数据执行复杂的数据库内分析。
下面,我们以 Redis 的 Sorted Set 结构为例。
有序集合按分数对其成员排序。通过分数范围检索成员对于排序集操作来说是微不足道的,并且使它们自然适合于时间序列数据,实时投标管理,按订单数量购买,最多观看的文章,最高分数等。
排序集是在 Redis 中构建的,它的机制提供了高性能的排序、排序、范围操作、范围计数等操作,以及生成交集、联合等集合操作,这些操作都以尽可能高的效率和简单性执行。使用排序集进行分析,如时间序列数据分析,使用 Redis 通常比使用任何其他常规键/值存储或基于磁盘的数据库快一两个数量级。
图2:排序集表示
类似的分析操作可以内置到其他数据结构中。地理数据结构包括分析地理空间数据和计算距离、成员之间的特定距离以及更多的命令。Hyperloglog 不需要存储添加到集合中的实际项目,就可以重新转换概率基数估计,从而在有数百万个项目时最大化内存空间效率。
这些分析操作与列表、哈希、集合等数据处理结构、Pub- lish/Subscribe等功能以及键过期、按值递增/递减、从列表中推送和弹出等命令并存,允许开发人员在其应用程序中使用不同的数据结构,如乐高积木。
图3:Redis数据结构就像积木
Redis 还支持一种嵌入式脚本语言 Lua,它通过简单的语法、方便的数据结构和功能强大的基础库,扩展了你可以对数据执行的复杂分析的范围。
Redis 模块在分析方面进一步扩展了 Redis 的功能。
最近的模块包括:
neural-redis:一个简单的前馈神经网络作为Redis的原生数据类型
Redis- ml:将 Redis 扩展为机器学习模型的服务层
redresearch:允许 Redis 用于全文索引和搜索
redson:Redis 的 JSON 引擎
reddisgraph:实现图形数据库的 Redis 模块
Topk:跟踪流中 k 个最频繁的元素
countminsketch:以最小的内存使用量近似地计数项目
reBloom:实现可扩展的计数 bloom 过滤器
Redis 功能应用于事务和分析场景
考虑到 Redis 的分析能力所带来的高性能和可扩展性,智能应用已经开始将其中一些作为其关键功能的基础。
图5:现代交易和分析场景
场景一:个性化建议
个性化通常包含两个方面:第一、用户配置文件,可以包括他们的历史,位置,人口统计,声明的偏好;第二、与向用户提供优惠相关的业务规则,如转换目标、优惠细分、相关行为背景、参考销售。
当用户与应用程序交互时,Redis 经常被用作事务性存储,在捕捉用户正在进行的行为的同时,为用户配置文件提供高速更新。同时,它也被用来生成分析,如计数,得分,排名等,触发正确的报价呈现。此外,它的数据结构(如 Sorted Sets )可用于以极快的速度处理相似度分数,以亚毫秒的延迟计算并提供正确的建议。
Redis 在这种情况下的优势在于它可以同时以极快的速度更新和分析内存中的数据,所以“智能”不是与“性能”相权衡的。
场景二:机器学习预测
当检测用户内部的片段或行为的相似/不同的能力需要复杂的算法来提取动态的相关性时,机器学习通常用于梳理连接。开源框架如 Apache Spark , Tensorflow, Torch 等通常用于在大型数据集上运行机器学习以收集预测算法。到目前为止,整合基于机器学习的模型主要是离线或批量操作。像 Apache Spark 这样的框架处理大量松散相关的数据,以自动检测模式并生成模型,作为实现“智能”的算法方法。
这些模型存储在磁盘上,并作为批处理过程更新。通常,它们只能从用相同语言编写的应用程序中检索、更新或执行,因为以其原生格式存储这些模型的数据库不存在。但更重要的是,复杂的模型在标准机器学习平台的规模下无法提供足够快的服务。如果使用简化模型,结果通常不够准确。复杂的模型通常太大,无法在应用层容纳。在 50 毫秒内用自己开发的方法快速提供这些服务需要太多的服务器。
Redis 的机器学习模块 Redis- ml 允许存储机器学习模型,例如由随机森林算法生成的决策树,以本机格式存储在内存中。这允许以内联处理所需的规模和速度在内存中存储、检索、执行和更新这些模型,并且资源很少。与 Redis 一样,Redis-ML 也是用 C 语言编写的,并且以最少的开销和资源使用提供ML服务。它继承了 Redis Enterprise 的高可用性和规模,可以执行复杂的操作,比如用简单和高性能替换随机森林中的决策树。附加的优势包括能够处理多种不同类型的机器学习模型,如随机森林、逻辑回归、梯度增强树,并允许用不同编程语言编写的应用程序同时使用它们。
对于不需要处理视觉数据,只需要简单前馈神经网络的机器学习场景,neural -Redis 是一个开源的 Redis 模块,可以在内存中实现这种神经网络。
这种内置机器学习能力的优势是巨大的。随着预测智能在生产中得到实现,机器学习模型的准确性和使它们保持最新的能力决定了厌恶和快乐的区别。凭借 Redis 的强大性能及其本地服务和更新机器学习模型的能力,应用程序可以快速准确地处理成百上千的即时决策。
图6:典型的机器学习生命周期
场景三:欺诈检测
欺诈检测通常依赖于统计技术或人工智能机制,以及人为干预,同时梳理大量数据和交易。Redis 在欺诈检测场景中的使用通常是由于它能够以极低的延迟处理大量数据。
欺诈检测系统通常需要消耗数以千万计的数据点,并且通常与许多客户事务内联,以达到最有效的效果。Redis 的高性能,加上它通过发布/订阅功能和数据结构(如列表)处理流数据的能力,使其成为快速数据摄取的最佳选择。
图8:Redis企业功能使其成为实现欺诈检测最有效的数据库
内置的分析,如集合基数和基于 Hyperloglog 的计数器,使其成为实现欺诈估计功能的有效方法。原生数据结构,如 Geo 和 Sorted Sets,以及处理 JSON、Graph 和其他数据的模块,有助于加快基于位置、时间、关系和其他参数的分析。
Redis 处理高速事务(读取与写入一致)的能力,以及使用其列表数据结构进行作业和队列管理以及使用其Hash数据结构快速更新用户会话数据的能力,使其成为在线欺诈检测的通用选择,其中应用程序延迟需要在 100ms 范围内,需要数据访问和处理需要 Redis 的亚毫秒响应时间。内置的作业&队列和消息传递功能有助于在检测到欺诈交易时触发警报或通知。
机器学习(如上所述)可以同时实现——这给了 Redis 一个巨大的优势,而其他数据库需要在应用程序层面实现大量的功能,或者需要部署各种专业数据库来处理应用程序的不同需求。
“在我们的欺诈检测服务中使用 Redis 企业包是我们组织的一个绝佳决定。它使我们能够轻松地管理每天数十亿笔交易,跟上我们指数级增长的速度,并加快对所有客户的欺诈检测。”——Ravi Sandepudi 工程主管,SIMILITY
场景四:交互式报告
当用户以交互方式为数百万个数据点创建有意义的报告时,数据提取的响应时间预期在10ms 范围内,分页时间预期在 3ms 范围内。大多数大型数据存储库无法处理如此低的延迟需求,通常使用 Redis 作为中间数据存储。Redis 排序集,其优化的预排序能够满足极低的延迟要求,即使有数百万条记录要报告。
Redis 通常用于 RDBMS 以及基于大型磁盘的 NoSQL 存储库(如 HBase、Cassandra 等),以提供用户所需的高吞吐量和低延迟。
如何在 Redis 中管理 tb 级数据
Redis 在内存中运行,与大量数据相关的两个问题通常会出现。第一个是关于如何扩展 Redis ,第二个是关于如何以高性能和低成本管理大量数据。
扩展 Redis 与高可用性
Redis 是单线程的,一次只能使用一个处理核心。它可以通过创建额外的实例或分片在内存中进行扩展。Redis 可以在持久模式下作为一个成熟的数据库使用,并具有跨机架/区域/数据中心/区域甚至云的内存复制的额外可用性选项。
使用 Redis Enterprise software 可以以自动化的方式在一组服务器上创建共享内存池,这样用户的 Redis 数据集就可以在单个服务器上的最大可用内存之外无缝地增长。
Redis 还提供 Redis 企业云,它运行在所有不同的 IaaS 公共云上,包括AWS、Azure、GCP、IBM Softlayer以及PaaS云,如Heroku、OpenShift、CloudFoundry。用户与 Redis 交互,就好像它是一个单独的实例,而 Redis 负责供应,扩展,分片,重新分片和重新平衡操作。
图9:Redis企业软件的无共享动态集群架构
Redis Enterprise 内置了一个完整的高可用性套件,包括持久性、跨机架、区域、数据中心、区域甚至云的内存内无磁盘复制。Redis 实例被持续监控,在瞬间触发故障转移,避免数据丢失的可能性。Redis 已经进行了基准测试,为 Redis 部署提供了最强大的高可用性。
Redis Enterprise 包括一个分布式直通代理,一个无共享的集群架构,节点和集群级别的监管机构不断监控和优化 Redis 部署。大量的性能优化确保了稳定、可预测的性能基准。
在提供高性能的同时优化成本
闪存的代际变化延长了性能,但价格却没有相应的变化。Redis on Flash 利用了这种高性能替代方案,提供接近 RAM 的性能,成本降低高达 70%。闪存被视为 RAM 的扩展(而不是用于持久存储)。异步和多线程访问 Flash 确保最佳性能。
但真正的性能优势是通过采用分层方法来实现的键和热值存储在 RAM 中,冷值存储在闪存中。即使在使用 Flash 和 RAM 组合的极高吞吐量的情况下,这也可以实现亚毫秒级的延迟。最近的基准测试证明了 Redis 在 Flash 上的性能在 RAM 和 Flash 比例为 10:90 的情况下,其性能高达3M ops /秒,延迟为 1 毫秒。
在 Flash 上使用 Redis 的分析场景包括一所著名大学的基因组数据分析,在那里 Redis 完成了急需的分析,即使使用 30TB 的原始数据,Redis 的性能也非常快。
图10:在使用AWS实例的情况下,Flash上的Redis与RAM上的Redis的成本比较
总结
随着世界以商业的速度向分析方向发展,Redis 等支持技术被越来越多地采用,以提高应用程序中“智能”的有效性。在处理操作任务的同时实现这些分析需要内存数据库的强大高性能和低延迟,而同时交付分析需要 Redis 数据结构中的内置分析操作和 Redis 模块的通用数据处理能力。
Redis 的功能提供了巨大的性能提升和应用程序复杂性的降低。Redis 模块将 Redis 扩展到许多分析场景,而 Flash 上的 Redis 使运营成本降低了80%以上。相较于高昂的技术成本,用户直接使用 Redis 企业软件,更具有性价比,且可以充分发挥 Redis 的潜力:令人惊喜的速度,满足企业需求的合规性、可靠性和无与伦比的弹性。