dot 快速的未来即将在您所在的城市举办的活动中到来。

加入我们参加 Redis 发布会

为什么要考虑从 GemFire 迁移到 Redis Enterprise

介绍 - 从内存中分布式网格到 Redis 的实时数据平台

如果您的企业正在使用内存中数据网格系统(如 GemFire),那么现在可能是时候升级到更先进的技术(如 Redis Enterprise)。以下是我们的看法。

内存中数据网格 (IMDG) 是一种分布式计算技术,用于在互连计算机的主内存中存储和管理大量数据。IMDG 在 2000 年代中期开始流行,一度成为高性能、低延迟数据访问的首选解决方案。然而,随着技术环境的演变,IMDG 的普及率已经下降,被云原生、微服务和无服务器数据架构的成熟所掩盖。在这个转型时代,人们的注意力转移到了更具适应性和成本效益的替代方案上,Redis 作为 最流行的 和经过验证的高性能、低延迟数据访问选择而出现。

Redis 是 IMDG 的强大替代方案,因为它简单、灵活,并且性能无与伦比。Redis 的固有灵活性使其能够轻松集成到云原生和微服务等架构中。通过从 IMDG 迁移到 Redis,您不仅是在适应,还在确保更灵活、更高效、更具成本效益的实时数据策略,以应对未来的挑战。

一旦您选择 Redis 作为 IMDG 的替代方案,您需要考虑如何进行转换。在本文的其余部分,我们将探讨从一个流行的 IMDG(GemFire)迁移到 Redis 的基本要素,帮助您了解术语差异以及最佳迁移实践。这将帮助您避免常见问题,并实现平稳有效地转换。

redis-enterprise-screen-shot

从 GemFire 到 Redis 的迁移实践

迁移与 GemFire 交互的复杂系统可能很令人生畏。我们的专业知识和专用工具可以帮助您高效有效地完成这些迁移。

考虑这样一种场景:您可能有多个服务写入 GemFire,同时还有数十个服务从这些相同的 GemFire 实例读取数据。在这种情况下,我们建议使用连续复制过程,实时地将数据从 GemFire 迁移到 Redis。一旦建立了这种复制过程,您就可以随着时间的推移,逐步将工作负载迁移到 Redis。您可以考虑使用 蓝绿部署 在投入生产之前验证其正确行为。

Redis Connect 是我们构建的一个数据复制和变更数据捕获 (CDC) 框架,旨在简化这些迁移。使用 Redis Connect,您可以运行一次性迁移以及连续复制。这确保您的 Redis Enterprise 数据库始终反映 GemFire 部署中的最新写入。

在更技术层面上,Redis Connect 作为两个或多个 JVM 运行(根据您的吞吐量和高可用性要求,部署在您选择的 OS 和基础设施上)。这些 JVM 将所有写入从 GemFire 复制到 Redis。Redis Connect 还包括用于监控和警报此实时数据流的工具,因此您可以观察迁移过程。Redis Connect 中内置的高可用性还意味着您可以安全地运行此迁移过程,即使它可能需要较长时间才能完全将应用程序从 GemFire 迁移。

如果您想深入了解详细信息,请查看 Redis Connect GemFire 示例的配置 或查看我们之前的 网络研讨会(可按需重播),该研讨会提供了一个简单的场景作为参考。

迁移成功案例

许多大型金融机构的 Redis 客户选择使用 Redis Connect 从 GemFire 迁移到 Redis Enterprise。在所有情况下,他们都选择 Redis 是因为它的性能、易用性和优化的总体拥有成本。

例如,一家领先的美国银行在处理 Gemfire 复杂的操作和升级期间频繁出现故障后,通过迁移到 Redis Enterprise 对其基础设施进行了现代化改造。此举简化了管理,减少了对专业知识的需求,并最大程度地降低了运营风险。迁移几乎立即产生了积极的投资回报,许可证和基础设施成本降低了约 33%。但这还不是全部。由于消除了停机时间,以及监管机构降低罚款风险而带来的间接节省,ROI 甚至更高。最后,该银行确信可以轻松地将本地工作负载迁移到未来的 Azure Cache for Redis Enterprise。

在另一个案例中,一家著名的资产管理公司面临可扩展性问题、稳定性问题和不断上升的 GemFire 成本,最终选择了 Redis Enterprise。向自服务、共享缓存解决方案的战略转变,涵盖生产和开发环境,简化了架构,提高了效率。它用 Redis Enterprise 替换了所有前端缓存应用程序中的 GemFire,仅需对应用程序代码进行少量更改,从而显著降低了总体拥有成本。此外,这次迁移是该公司未来云迁移战略中数据管理实践现代化和提高效率的重要一步。

从 GemFire 迁移到 Redis Enterprise 的注意事项

在考虑从 GemFire 迁移到 Redis Enterprise 时,需要考虑几个关键因素。在考虑离线或在线实时切换时,您还应该了解其优缺点。

  • 未来架构的设计
  • 服务器端架构需求和大小
  • 对应用程序和底层代码的影响
  • 您的时间线以及相应的工作量、风险和收益

您需要做出的第一个决定之一是如何部署 Redis。如您所知,Redis 可作为开源软件以及商业软件使用,包括 Redis Enterprise 和 Redis 云。从 GemFire 到开源 Redis 的迁移更为复杂,部分原因是需要专业知识来配置和维护开源 Redis 集群,包括管理和保护开源 Redis 部署的挑战。

Redis Enterprise 基于 Redis 开源软件构建,但提供了改进的架构、更好的安全性和管理功能,以及更丰富的开发者功能集,包括内置于核心中的查询、索引、向量搜索等功能。我们的商业 Redis 产品还为复杂的数据操作(如实时迁移)提供了更高的操作可靠性。方便的是,Redis Enterprise 可以部署在本地、云自管理部署中,也可以作为 Redis 云中的全托管、云优先的数据库即服务。

Redis 是主要云服务提供商(包括 Amazon Web Services、Microsoft Azure 和 Google Cloud Platform)事实上的键值存储。所有这些主要的云提供商都提供 Redis 云或 Azure Cache for Redis Enterprise,这些服务由 Redis Enterprise 提供支持,并提供由经济处罚支持的服务级别协议。

迁移需要了解的内容:将 GemFire 概念映射到 Redis

随着技术的变革,语言也会随之变化。术语和概念的差异可能会让人望而生畏,而现有的专业知识最初可能难以重建。为了帮助 GemFire 从业人员在开始迁移到 Redis Enterprise 时顺利过渡,让我们探讨一下 GemFire 的一些概念是如何映射到 Redis 的。

我们将涵盖两个方面

  • 集群拓扑结构和架构
  • 客户端库、数据模型和数据处理

集群拓扑结构和架构

运行时GemFire 主要用 Java 编写,需要 JVM。即使现代 JVM 已经改进,这也带来了漫长的调整周期和难以预测的副作用,例如垃圾回收。
每个 JVM 还消耗大量并行核心来处理内存管理和低 GC 暂停,这意味着分配给应用程序的核心更少。
连接到 Gemfire 的客户端应用程序的任何更改都需要额外的调整周期。
Redis Enterprise 主要用 C 编写,与 GemFire 不同,Redis 分片进程不需要部署 JVM 的额外复杂性。
这使其更容易扩展,并提供确定性的纵向和横向扩展设计。
集群拓扑结构、发现和仲裁使用 GemFire 时,您需要在其他 JVM 上创建“定位器”节点,以构建与客户端节点和数据节点分离的仲裁系统。
有多个节点和进程类型需要处理。
使用 Redis Enterprise 时,设计通过使用对称共享无状态架构将集群控制平面与数据平面分离 - 所有节点都是相同的 - 这也更适合容器和云部署。
集群管理仲裁、成员资格和客户端的数据库端点寻址。
持久性GemFire 具有在每个区域的基础上配置的持久性功能。
Redis 企业版 提供用于备份和恢复的紧凑快照 (RDB),以及数据库级别的可配置的追加式日志文件 (AOF) 磁盘格式。AOF 格式可以配置为每秒一次,也可以配置为每次写入都执行 fsync,从而让您控制如何根据数据库和用例设计系统的持久性。
大小GemFire 的大小调整通常需要创造性的技巧,涉及 JVM、GC 冗余、应用程序冗余、元数据和序列化冗余、索引等等。除了 CPU 大小调整和垃圾回收冗余之外,每个部署都是特定的,由于复杂性和稳定化周期,会增加成本。
Redis 企业版 基于分片模型构建,每个分片一个核心,以提高速度和降低延迟,每个分片处理高达 25GB 和/或 25K ops/s,以实现最佳系统稳定性。这简化了纵向扩展和横向扩展模型,因为您可以将多个分片打包到每个节点,以优化多核硬件或虚拟机。
更高级的设置,例如在 SSD 上使用 Redis 自动分层,可以调整模型以降低 TCO。相同的尺寸模型适用于自管理和云部署选项。
对于某些工作负载,Redis 分片可以处理高达 1M ops/s 的操作。我们提供基准测试工具来帮助调整集群。
多租户和调整大小GemFire 允许单个成员托管多个区域,但它们只是逻辑上隔离的。
Redis 企业版 是多租户的,具有身份验证、基于角色的访问控制 (RBAC) 和每个数据库的 TLS 互认证,从而实现更高密度的数据库和分片。这使得小型 Redis 缓存和更大的持久化 Redis 数据库能够在共享基础设施和控制平面上部署和运行,在遵守“每个服务一个数据库”的设计原则的同时降低基础设施和运营成本。
自动分层GemFire 具有可选的堆外配置,可以将部分数据存储在 RAM 中,但不在分配给 JVM 的内存之外。由于运行时不可预测的 JVM 垃圾回收过程,这使得调整和可观察性更加复杂。这不会降低大型工作负载的系统 TCO。
GemFire 还提供“溢出到磁盘”,而没有对磁盘和这种配置的延迟影响做出任何假设。
Redis 企业版 具有原生自动分层和可配置的 RAM:SSD 比例(也称为闪存),当并非所有数据都必须驻留在 DRAM 中时,可以提高 TCO。我们一直在使用 SSD/NVMe 进行基准测试,以提高性能,这在 Redis Cloud 中也普遍可用,而 Redis Cloud 是性能最优的 AWS i4i SSD 实例。自动分层架构还专为高并发而设计,并将保持密钥、索引和最常使用的值在 RAM 中以实现最佳性能。
主动-主动地理复制GemFire 通过 WAN 网关架构(需要额外的节点)支持地理集群复制。系统以基本的“最后写入获胜”策略运行,并提供 API 来实现您自己的冲突解决。
Redis 企业版 具有一个主动-主动集群复制机制,可以在数据中心和/或可用性区域之间进行单向、双向和多个集群的复制。主动-主动在自管理、云和基于 Kubernetes 的部署中可用。
此外,Redis 企业版主动-主动使用无冲突复制数据类型 (CRDT),因此您无需实现自己的冲突解决逻辑。
用于操作的应用程序编程接口和命令行界面GemFire 提供了一个名为“gfsh”的 CLI 工具,用于帮助脚本编写,以及一些通过 REST 端点的 API,但缺乏用于操作、缓存即服务或集群即服务的适当生态系统集成。
Redis 企业版 为集群和数据库控制提供 CLI 和 REST API,无论是自管理还是云部署。我们还提供了与基础设施即代码平台(如 Terraform、Ansible 和 Pulumi)的集成。
用于操作的用户界面GemFire 提供了一个以读取为主的 Web UI(“Pulse”)以及一些统计信息、指标收集和可视化工具(“Visual Statistic Display”),用于临时故障排除。它还提供了一个 Prometheus 端点。
Redis 企业版 提供了一个 Web UI,其中包含管理员级别的各种操作,可以指示更改,使 UI 与 API 可以执行的操作相匹配(例如,创建数据库、调整大小等)。它还具有一个内置工具,可以生成包含指标和集群状态的转储,简化了与 Redis 支持人员交互时进行根本原因分析的时间。

一个包含数百个指标的 Prometheus 端点也可以使用,此外还提供了内置的 Grafana 仪表板供参考,以及与 APM 工具(如 Dynatrace、DataDog 等)的集成。
基于 Kubernetes 的部署GemFire 和 Redis 企业版 都提供原生 Kubernetes 运算符和自定义资源定义,用于在 K8s 上部署。

Redis 企业版 还将开源 Kubernetes 和 SUSE Rancher 列为支持的平台,除了 OpenShift、Tanzu 和云托管的 K8s AKS、EKS 和 GKE 之外。
具有完全管理的部署的云Redis 企业版 作为 Azure、AWS 和 Google Cloud 上的托管云优先部署提供。该服务以固定服务(Redis Essentials)或灵活的企业级云部署(Redis Pro)提供,具有专用集群、私有和高速网络连接、与云市场集成的计费,以及在您选择的云区域按需配置。Redis Cloud 附带企业级支持和 SLA,并包含自动分层和主动-主动功能。

GemFire 提供了一个成熟的、低延迟的、内存中数据网格。GemFire 拥有成熟的管理工具,并能够通过适当的计划处理高可扩展性。GemFire 非常适合本地和 VMware Tanzu 环境。

Redis 企业版 提供了一个成熟的、低延迟的、内存中数据平台,拥有强大的管理和开发工具,可以轻松扩展。该公司继续投资于使 Redis 企业版能够以最有效的方式轻松部署和管理。除了适用于任何 Kubernetes 或本地环境之外,Redis 企业版还作为 AWS、Microsoft Azure 和 Google Cloud 上的托管服务提供。

从 GemFire 迁移到 Redis 可以提供您的应用程序所需的低延迟和高吞吐量性能,同时还为未来提供更灵活、更高效的技术。

迁移需要了解的内容:客户端库、数据模型和数据处理

客户端应用程序GemFire 支持的语言和库集有限,并且使用不透明协议进行来回序列化,从而增加了对 CPU 和内存的低效使用。
Redis 企业版 提供了广泛的客户端生态系统,并支持主要客户端库。
Java、C++、.Net、Node.js使用 JSON使用 GemFire,数据建模主要围绕“对象”。只有 Java、C++、.NET 和 Node.js 有记录。
使用 Redis,数据建模包括“对象”(称为 哈希),但也提供高级数据结构,例如“排序集”和原生 JSON。
还支持其他几种语言,例如 Java、C++、.Net 和 Node.js,以及 Python 和 Go。
Spring Boot使用 GemFire,存在一些针对 Apache Geode 的特定包装器。
使用 Redis,Jedis 和 Lettuce 反应式库可用于与 Spring Boot 集成。
Spring Data使用 GemFire,Spring Data 和 Spring Data Repository 可用。
使用 Redis,Spring Data 和 Spring Data Repository 可用。
此外,Redis OM for Spring 为哈希、JSON 和完整搜索提供基于注释的配置。
键值数据存储的位置GemFire 使用“区域”的概念,包括分区区域、分布式区域和/或复制区域以及 WAN 复制区域。
Redis 使用“数据库”的概念,它可以是持久化的、HA 的或多站点主动-主动的。这提供了一个更简单的范例来独立扩展数据库,同时使用 Redis 企业版多租户架构实现更高的效率。
Redis 中的具有副本和集群架构的主分片等效于 GemFire 中的“分布式和复制”。
键格式和键空间使用 GemFire,“区域”的概念强制使用键格式,并使用序列化以及用于键共置的低级 API 和配置,这使得整个系统难以配置、难以演化以及对开发人员来说很僵硬。
Redis 为数据结构分段提供键空间,使用标准化语法前缀,例如:“user:123”和“transaction:abc”。
它提供简单的共置和可配置的散列策略,例如使用“user:{123}”和“transaction:{123}:abc”,保证它们始终共置在同一个分片上。
这确保了开发人员拥有适当的无模式体验,同时仍然提供正确的治理,例如在构建所有“user:*”的索引时。
索引、查询和搜索GemFire 具有“对象查询语言”和索引,并添加了自定义的修改过的 Lucene 来提供全文搜索(继承了额外的复杂性)。Lucene 并不以快速或高效而闻名。最初,该解决方案被开发为插件而不是原生功能。
Redis 企业版 提供原生分布式索引和查询,包括聚合。索引包括数字、标签、文本和全文搜索,使用 RediSearch 和 JSON。
此功能在同一个进程(Redis 分片)上原生分层,并具有高级内部优化,支持多个标签(即 ticker:@{appl|tsla})、范围(即 price:[180, 200])等等。
此外,索引会实时维护,以获得更准确的查询结果。
用于 AI 应用程序的向量GemFire 可以依赖 Lucene 进行向量和搜索,但当我们编写这篇文章时,我们无法在 Apache Geode 或 GemFire 文档中找到有关向量、向量索引和向量搜索的任何详细信息或代码示例。您的现有 GemFire 实现可能没有使用 GemFire 进行向量。
Redis 企业版 原生支持存储向量并使用向量索引搜索向量相似度。它还与流行的 AI 和 LLM 框架(如 LangChain)集成。使用 Redis 作为向量和向量数据库,使 AI 和 ML 应用程序更容易编写和运行,无论它是特征存储、MLops 堆栈的在线特征服务部分,还是为 ChatGPT 类似的基于 LLM 的应用程序提供支持。这为基于 AI 的聊天机器人、推荐引擎和欺诈检测引擎提供了实时性、可扩展性和简单性。
事件流和服务器端数据处理GemFire 具有事件、持续查询和函数执行功能,这需要进行编码,并且需要将 Java 部署到服务器上。

Redis 在其核心提供了通知、发布/订阅和流的原生支持,用于将 Redis 作为消息传递事件驱动平台。Redis 还提供触发器和函数,用于服务器端处理,其中用户定义的函数根据需要执行,用于流中的消息、数据更改或时间。
代码是 JavaScript,存储并在服务器上执行,以实现更快的执行速度,从而提高将数据处理添加到 Redis 分布式数据和横向扩展部署的灵活性。基于微服务的架构也可以写入和使用 Redis Streams。阅读 有关 Redis Streams 的更多信息.

事务
注意:GemFire 和 Redis 都不设计为充当单服务器事务 ACID 数据库,因为作为分布式系统,CAP 定理 适用。
GemFire 支持事务,并具有 ACID 和两阶段提交(XA 事务)的配置,但需要提前设计,以避免分布式系统固有的边缘情况,例如冲突写入、分布式锁或故障条件。由于这些复杂性,这种配置很少使用,或者只在工作负载的特定子集上使用,而对于这些子集,GemFire 通常不是一个合适的工具。
Redis 为事务、持久性和分布式通信提供了清晰的语义:例如,MULTI 允许创建管道,将命令分组并在一次往返中发送到服务器。WATCH 命令确保乐观锁和脏写,尤其是在与管道结合使用时。WAIT、WAITAOF 以及每次写入时配置 AOF(fsync)可以确保数据完全持久化到磁盘,并具有强一致性,而 AOF 则配置在主分片或副本分片上。应用程序控制错误和重试,并将这些特定调用范围限定在需要这种一致性的代码路径中。这鼓励在应用程序级别进行事务推理,由服务器提供语义,但由应用程序逻辑执行。

GemFire 专为本地、Java 和 VMware Tanzu 环境量身定制。它拥有丰富而强大的功能和工具来支持此功能。

Redis 在各种环境中被广泛用于各种解决方案。Redis 拥有强大的管理和开发工具,以及广泛而多元的从业者和贡献者社区。Redis 还因其将简单性(符合 Redis 开源宣言)与实时数据平台的全面功能相结合而闻名。

从 GemFire 迁移到 Redis 使您能够使用与您习惯的 GemFire 相同的许多技能和工具,但架构更简单,灵活性更高,生态系统也更加多元。

仍在犹豫是否要迁移?

从 GemFire 迁移到 Redis 可以使您的基础设施现代化,解放您的组织,摆脱遗留约束,释放实时数据处理和管理的潜力。在我们的工具和专业知识的支持下,客户已将复杂的流程迁移到 Redis Enterprise,从而获得以下优势

  • 操作简便:Redis Enterprise 易于管理和操作。
  • 全面功能:Redis Enterprise 具有广泛而最新的功能集,满足各种应用(包括会话存储、微服务、缓存和实时工作负载)的各种要求。
  • 最先进的功能:Redis Enterprise 提供高级功能,例如具有全文搜索功能的 JSON 和用于生成式 AI 的完整向量数据库功能。
  • 云兼容性:Redis Cloud 提供完全托管的无服务器架构,简化操作并降低运营成本。

这些因素共同将 Redis Enterprise 定位为不仅仅是技术升级,而是战略性增强,从而带来操作简便性和成本节省。