Amazon ElastiCache 的高级数据建模

Amazon ElastiCache 的高级数据建模

关键字: [Amazon Web Services re:Invent 2024, 亚马逊云科技, Valkey, Advanced Data Modeling, Amazon Elasticache, High-Performance Caching, Open-Source Engines, Real-Time Analytics]

导读

本次会议深入探讨了使用专门设计的Valkey数据类型进行Amazon ElastiCache数据建模的复杂性,以优化应用程序性能和可扩展性。探索如何使用字符串、集合、有序集合、哈希、位图和地理空间索引来建模复杂关系,并解决诸如缓存、会话存储、特征存储、实时分析、地理空间应用和速率限制器等用例。

演讲精华

以下是小编为您整理的本次演讲的精华。

Yaron首先介绍了Amazon ElastiCache,这是一项完全托管的服务,可以简化在云上部署、运行和扩展内存数据存储,通过允许微秒级响应时间,为应用程序带来显著的性能提升。他表示,ElastiCache目前支持三种开源引擎:Redis开源版、Memcached和最近宣布的Valkey开源版。Yaron强调,ElastiCache支持多个核心功能,包括多可用区、容错、服务水平协议、安全性、合规性以及与其他亚马逊云科技服务的无缝集成。

Yaron指出,客户利用ElastiCache用于多种用例,如缓存、会话存储、实时分析和机器学习。他强调:“现在,客户在使用Elastic Cache时会使用许多不同的用例。因此,乍一看,您会发现它们之间没有太多共同之处,这实际上是正确的。但是,由于Valkey和Redis开源版提供商提供了丰富的API和数据结构,我们能够为所有这些用例提供支持,并且能够非常有效和快速地实现这一点。”

深入探讨Valkey,Yaron透露今年Amazon ElastiCache和MemoryDB宣布支持第三个开源引擎Valkey。他描述Valkey是一个高性能的键值数据存储,也是Redis开源版7.0的社区替代品,由Linux基金会托管以确保其保持开源。Yaron断言,在性能、可靠性和效率方面,Valkey走在前列,亚马逊云科技团队为开源社区贡献了两项重大增强功能。第一项贡献通过新的线程模型实现了每秒100万个请求,现已在开源版本中提供。第二项贡献是一种高效的架构,可减少高达20%的内存使用量。

为了说明高级用例,Yaron构建了一个假设场景,其中与会者是系统架构师、软件工程师或DevOps工程师,他们被一家新成立的初创公司雇佣,该公司最初投资有限,但希望建立一个灵活且可扩展的基础设施,以容纳即将到来的工作负载和加入其市场的其他客户。他说:“因此,今天我们将跟随这家初创公司的旅程,了解在使用Elastic Cache时您可能如何选择正确的用例。”

Yaron演示了如何使用缓存策略来提高性能并降低基础设施成本。假设应用程序运行在EC2上,Amazon RDS持久存储数据,他解释说,虽然RDS使用磁盘存储数据,在获取项目时会引入延迟,但在一定工作负载水平下可以完美工作。随着工作负载增加,可以选择扩大RDS实例大小或通过添加更多读/写副本进行扩展。但是,在某些时候可能会达到上限,需要进一步扩展基础设施。

Yaron建议使用Amazon ElastiCache,它明确将数据存储在内存中,比磁盘快20倍。虽然RDS有一个缓存层,但涉及跨多个表的复杂SQL查询可能需要从磁盘获取数据,从而引入延迟。相比之下,ElastiCache只能存储结果集,实现微秒级响应时间。他说:“一旦我们将项目填充到缓存中,我们就可以立即开始从缓存中读取数据,从那时起,我们可以提高查询响应时间并实现亚毫秒级延迟,并减轻后端的一些压力。我们还可以通过允许后端缩减来优化我们的成本。”

Yaron回顾了缓存策略,从延迟加载开始,首先从缓存中读取数据。如果项目存在,查询将在微秒内完成;如果不存在,则从源(在本例中为RDS)读取,可能需要9到59毫秒或更长时间,具体取决于查询的复杂性。一旦检索到,该项目将在缓存中更新,以供后续请求使用。

第二种方法是写入,涉及更新源(数据库)中的项目,然后更新缓存,在两者之间复制数据。

Yaron专注于将延迟加载用于从缓存读取数据,将写入用于在需要使项目失效时更新缓存。他演示了实现过程,首先从缓存读取数据,然后从DynamoDB读取,随后在缓存中更新该项目。为确保缓存中不存在陈旧项目,Yaron利用DynamoDB的触发功能触发Lambda函数,异步标记缓存为无效并删除该项目。

对于即将到期的热门项目,Yaron展示了使用多命令将多个命令排队,并在服务器端作为一个事务原子执行。他提供了一个示例,从缓存中获取一个项目,使用TTL命令检查其过期时间,并根据客户端定义的5秒阈值,在过期之前从数据库重新填充该项目。

解决雷声羊群问题,即多个进程试图同时进行,导致高度争用或资源压力,Yaron演示了使用屏障构建同步机制。这允许只有一个客户端发出请求并在缓存中重新填充该项目,而其他客户端则等待直到操作完成后再从缓存读取并享受微秒级响应时间。

Yaron强调,ElastiCache可以缓存S3对象,通过避免对S3的I/O并直接访问缓存来提高性能并降低成本。他说:“Elastic使用Valkey和Valkyrie是二进制安全的,所以您几乎可以在Valkey上序列化和读取任何内容,所以开放告诉您,您可以序列化的一切,您都可以将数据存储为Elastic Cash上的现金,并享受高性能和降低成本。”

转向客户端缓存以获得更低的延迟,Yaron解释了两种方法:生存时间过期,即在过期时间过后项目变为无效;以及订阅频道以获取关键更新通知,从而使项目失效。他指出,Valkey为客户端缓存失效提供了两种模式:默认模式,服务器记住客户端-键映射并将对感兴趣键的更改通知特定客户端(消耗服务器内存);以及广播模式,客户端订阅前缀并接收匹配键更新的通知。

Yaron阐述了实现细节,他说:“您可以看到,我有一个客户端应用程序和一个连接池,我们总是建议使用。我们建议使用连接池的原因是,与典型的Valky命令(例如get和set命令)相比,TCP连接是一种代价高昂的操作,如果我们使用现有连接,速度要快一个数量级。”

在会话存储方面,Yaron解释了需要为连接到市场的每个客户端存储会话,包括购物车、用户偏好、身份验证和其他相关数据。他指出,挑战在于拥有一个低延迟、高并发的数据存储,以处理快速移动、短暂的会话数据。Yaron建议使用ElastiCache作为分布式内存存储,支持无状态微服务并提供无缝用户体验,即使在添加或删除服务器时也是如此。他说:“因此,客户通过负载均衡器连接到后端,负载均衡器在后端服务器之间平衡连接,所以我们可以看到每个微服务都包含一系列用户会话。但是我们最终会在elastic ash上恢复所有会话,因为这里是分布式内存或分布式缓存,所以当服务器被删除或添加时,所有会话在分布式缓存或elastic cache上保持有效,这为我们的客户提供了无缝体验,并允许我们在无状态模型中运行我们的微服务环境。”

Yaron演示了使用哈希数据结构存储会话数据,他说:“使用哈希数据结构存储会话数据是很常见的,我们使用哈希数据的方式是,我们首先有哈希键,它是哈希的标识符,然后我们有键和值,分别将id映射到值本身,为了构建这个,我们可以使用h set命令和哈希的id,然后我们可以有一个哈希本身的键值对列表。”

对于实时分析,Kevin McGee举例说明如何在Valkey中使用有序集合来实现排行榜并跟踪市场中每张照片的独立用户。他解释说,有序集合结合了两种数据结构:一个将用户(图像)映射到分数(查看计数)的哈希,以及一个按分数维护排序顺序的跳过列表。Kevin演示了使用’zadd’命令将项目添加到有序集合中,使用’zincrby’增加现有值,并使用’zrange’查询排行榜,检索按分数排序的键值对。

Kevin随后讨论了跟踪每张照片的独立用户,将存储用户ID的集合(线性空间复杂度)的简单方法与使用位图和Valkey中的’BITFIELD’命令的更有效技术进行了对比。他展示了初始化位图、为独立用户设置位以及检索计数,实现了与用户数量无关的恒定时间复杂度。

Yaron提出将ElastiCache与机器学习基础设施集成,将其用作在线特征存储,以实现超快速特征计算和实时预测。他说:“我们将使用Amazon RDS作为离线特征存储,Elastic Cache作为在线特征存储,为在线推理和使用信用评分模型进行实时预测提供超快响应时间的特征服务。”Yaron演示了使用YAML文件定义特征存储,指定Valkey作为在线特征存储引擎,并提供了ElastiCache端点和RDS凭据用于离线存储。

Kevin继续探讨使用Valkey的脚本功能进行速率限制。他使用Lua脚本实现了一个简单的速率限制算法,为每个用户初始化一个计数器,并根据预定义的限制允许或拒绝请求。Kevin随后演示了一种更高级的令牌桶算法,为每个用户维护一个哈希表,其中包含当前令牌数、补充率和上次更新时间。该脚本根据自上次更新以来经过的时间重新填充令牌,如果有可用令牌,则允许请求,并从桶中扣除令牌。

本次会议最后总结了使用ElastiCache和Valkey的最佳实践和运营概览。Yaron和Kevin强调将缓存视为临时数据存储,而不是数据库的持久替代品,他们说:“缓存不是持久的。它们不能替代数据库。因此,当您使用Elastic Cache时,最好将其用于临时数据,我的意思是,尽管我们对多可用区缓存提供99.9%的可用性SLA,但系统将优先考虑可用性,即能够继续接受读写操作,而不是数据的一致性。”

他们强调通过显式删除、设置生存时间(TTL)并添加随机抖动来避免雷声效应问题,以及驱逐策略来管理缓存大小。Kevin指出:“在使用TTL时的一个最佳实践是为其添加随机抖动。您希望避免的是多个不同项目在同一时间到期,因为这可能会导致Jerome之前提到的雷声效应问题,但这种情况更难管理,因为它涉及多个不同的键,而不是单个键,我们之前展示的策略可以帮助利用。”

Yaron和Kevin建议根据使用案例调整缓存大小,利用自动缩放功能,如基于数据存储大小和请求收费的ElastiCache Serverless,以及基于指标(如CPU利用率或数据存储大小)进行缩放的Application Auto Scaling。他们还建议使用连接池、从副本(每个主节点最多5个)读取以提高吞吐量和延迟、了解命令的计算复杂性,以及限制大型多千兆字节对象。

总之,本次会议全面概述了使用Amazon ElastiCache和Valkey进行高级数据建模的技术,涵盖了缓存策略、会话存储、实时分析、机器学习集成、速率限制以及优化性能和运营效率的最佳实践。主讲人Yaron和Kevin利用他们的专业知识,通过实际示例、代码片段、深刻见解和对细节的精心关注,阐释了这些概念,确保与会者对于利用ElastiCache和Valkey为其应用程序获得了透彻的理解。

下面是一些演讲现场的精彩瞬间:

演讲者强调,本次会议对于那些希望通过利用Elastic Cache的高级数据结构来提高应用程序性能并降低扩展成本的人来说是理想的选择,可以每秒处理数百万个请求,响应时间为微秒级。

a40e4de7976e1ce52f8f5657b30db9d8.png

解释了Amazon RDS如何通过扩大实例大小或使用只读副本进行横向扩展来处理不断增加的工作负载,同时考虑了极端工作负载场景下的替代解决方案。

1f6fc0c1d265a59627e1725c2f14ff56.png

解释了延迟加载缓存策略,即首先从缓存中读取数据,如果没有找到,则从源中获取数据并将其存储在缓存中以供将来请求使用。

fc815b82fb7c2ab14b33db96586e6482.png

解释了如何在Valky API中调用脚本,包括加载脚本并使用其唯一标识符对其进行求值并传递参数,同时指出框架和客户端可能会对此过程进行抽象。

2e326bf580b15a4042fbaaf89ef08ce7.png

演讲者解释了脚本的逻辑,用于检索元数据、计算令牌补充量以及初始化令牌桶大小。

1f7b36856007c3e1ebcebf8509eba2e6.png

亚马逊云科技 Elastic Cache Serverless会根据数据存储大小和请求自动扩展并收费,可以通过驱逐策略来控制成本。

bd3b13ca0505469cbb323a22edc1b85a.png

演讲者建议将大型排行榜拆分为多个有序集合,以提高效率并最小化处理数百万个项目时的同步开销。

46d5209e81eb5b204e564e8e41fc32ed.png

总结

在这场引人入胜的演讲中,Yaron和Kevin深入探讨了Amazon ElastiCache的高级数据建模能力,揭示了它加速应用程序性能和降低扩展成本的潜力。他们通过一个假设的初创公司的案例,阐释了如何利用ElastiCache来增强缓存策略、会话管理、机器学习推荐和实时分析。

Yaron演示了如何将延迟加载和写入通过的方法相结合,优化缓存,缓解雷声羊群问题并确保数据一致性。他展示了ElastiCache使用哈希结构存储会话数据的多功能性,实现个性化用户体验。此外,他强调了与机器学习基础设施的集成,作为超快速推理的在线特征存储。

Kevin随后探讨了ElastiCache的排序集合在实时分析中的强大功能,实现了微秒级延迟的排行榜和独特用户跟踪。他还介绍了使用Lua脚本进行高级速率限制的技术,展示了ElastiCache API的灵活性。在总结最佳实践时,他们强调了连接池、从副本读取以及理解计算复杂性对于获得最佳性能的重要性。

总的来说,这个会话阐明了Amazon ElastiCache及其Valkey引擎的巨大潜力,使开发人员能够构建高性能、可扩展的应用程序,同时降低基础设施成本。凭借丰富的数据结构和先进功能,ElastiCache在内存数据存储领域成为了一个游戏规则改变者。

亚马逊云科技(Amazon Web Services)是全球云计算的开创者和引领者。提供200多类广泛而深入的云服务,服务全球245个国家和地区的数百万客户。做为全球生成式AI前行者,亚马逊云科技正在携手广泛的客户和合作伙伴,缔造可见的商业价值 – 汇集全球40余款大模型,亚马逊云科技为10万家全球企业提供AI及机器学习服务,守护3/4中国企业出海。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值