dot Redis 8 发布了——并且是开源的

了解更多

RedisMart:一个基于 Redis 的全功能零售应用

您还记得 RedisConf 的主题演示吗?如果您记得,那么您可能会喜欢了解所展示的零售应用 (RedisMart) 的幕后开发过程。如果您不记得,是时候观看 Yiftach 和 Ash 的演示了。视频链接在此

https://www.youtube.com/embed/Q6LfMTNbQOs

本文是系列文章的第一篇。它将为您提供一些关于 RedisMart 零售应用的主要需求和架构的见解,介绍如何实现产品目录、分布式实时库存以及 AI 支持的产品搜索。您还将了解 Redis Enterprise 如何为所有这些功能提供支持。

需求

和软件开发中常见的情况一样,让我们先讨论一些基本需求。以下是一些非正式的用户故事记录

  • 作为一名零售客户
    • 我希望能够快速(端到端延迟 <100 毫秒)访问目录和产品详情,能够根据各种标准(例如,全文、价格范围、其他客户评分或分面搜索)查找产品。高响应时间会导致高跳出率。
    • 如果我不知道产品的品牌名称或想要类似我之前购买过的商品,我想通过图片来搜索产品。能够找到与我拥有的相机非常相似或视觉上相似的相机将会非常酷。
    • 我希望能够安全送达,或者能够在网上购买并在店内或路边取货(线上下单,门店自提)。
  • 作为一名库存经理
    • 我需要对我的库存有准确的、实时的视图,以便为我的客户提供卓越的履约体验。
    • 我想优化我的库存,以保持高需求商品的库存充足,并减少滞销商品的库存。
    • 我需要近乎实时地了解不同门店和/或履约中心的库存情况,以便优化库存。

架构    

既然我们知道了需求,让我来构想一下 Redis 如何能帮助我们实现

  • RediSearch 通过数字过滤器、全文搜索、地理索引、评分和聚合功能,实现丰富的产品搜索。
  • Redis Enterprise 的 Active-Active 功能开箱即用地提供跨库存的地理复制实时更新。
  • 利用 RedisAI、RedisGears 和 RediSearch 构建数据库集成的机器学习管道,用于实时推理和向量相似性搜索。
RedisMart application blog post image

由此,不难构想出以下设计

RedisMart application blog post image
RedisMart 应用博客文章图片

蓝色框表示服务。红色框显示这些服务使用的数据库。 

我们遵循了一些微服务方法,例如

  • 每个服务拥有一个数据存储:每个服务都有自己的数据存储,数据通过服务接口交换,而不是直接访问另一个服务的数据存储。
  • 多语言持久化:每个服务根据其需求使用最适合的数据存储。说到多语言持久化:Redis 是一个数据平台,它允许您结合模块提供的不同特性和数据模型,来构建符合您需求的数据存储!我们使用 Redis 和一些 Redis 模块来实现红色框中的内容可能不足为奇。

实现

RedisMart 提供了一个用户界面,由网上商店 Web 应用提供服务。RedisMart 有一个前端 UI(面向客户的零售网站)和一个后端 UI(用于管理库存)。我们在幕后实现了一系列由应用利用的服务。 

  • 采购:采购服务(出乎意料地)处理客户购买。
  • 库存:库存服务回答有关库存数量的问题,并且在客户购买商品时减少数量。库存更新通过利用 Redis Enterprise 的 Active-Active 功能近乎实时地复制到其他地点的库存。Redis Enterprise 利用无冲突复制数据类型来处理并发更新。在这种情况下,使用了一种可重置的正负计数器数据类型来防止计数器丢失。
  • 产品目录:产品目录服务提供产品相关信息,并提供复杂的产品查找方式。它使用部署了 RediSearch + RedisJSON 模块的 Redis 数据库。RedisJSON 允许我们将产品详情直接存储为 JSON 文档。RediSearch 可以索引、查询和全文搜索 JSON 文档。通过使用 Redis Enterprise 的 Active-Active 功能,产品更新可以轻松地跨多个站点传播。 
  • 图像识别:最后,图像识别服务提供 AI 模型服务功能,用于对图像进行向量相似性搜索。它使用安装了 RedisGears、RedisAI 和 RediSearch 模块的 Redis 数据库。RedisGears 允许我们构建数据管道并在数据所在地附近执行。我们利用 Redis AI 进行 AI 模型服务和推理。RediSearch 用于根据 AI 模型的输出来执行相似图像的实际搜索。

如前所述,这是系列文章的第一篇。请持续关注,了解更多关于我们如何实现各个服务的细节。

RedisMart

既然我们看了幕后,现在来看看应用在舞台上是什么样子。

主页显示主要的产品类别。点击一个类别会通过产品目录服务触发搜索查询,返回属于该类别的最初 16 个产品。  

“搜索产品”字段允许您对产品执行全文搜索。这会导向以下搜索结果页面

搜索结果页面有两个部分:分面搜索和实际结果列表。分面搜索可用于进一步限制搜索结果。您可以通过主类别、子类别、价格和评分进行过滤。在博客系列的第二部分,我们将讨论如何使用 RediSearch 实现分面搜索的详细实现。让我给您一个提示,您可以看看 RedisMart 的调试视图

如您所见,标签和聚合起着作用。

点击右上角的小相机图标,您可以拍下您想在产品目录中查找的物品图片。Doug 的这张照片在我们的数据库中没有找到其他任何 Doug…艾

…但它很好地找到了一些耳机。

假设您决定购买一副耳机。做出选择后,RedisMart 允许您将其添加到购物车。在结账过程中,您可以选择送货上门或在附近地点自提。

RediSearch 的地理搜索功能支持本地自提。调试视图再次为您提供了此功能幕后实现方式的提示。

客户完成购买后,库存服务会减少库存中的物品数量。这直接将我们带到应用的后端,该后端允许我们管理库存。RedisMart 直观地展示了在每个复制站点上如何立即观察到库存更新。在美国(GCP us-central1)进行的购买会瞬间复制到欧洲(Azure north-europe)。

再次强调,我们稍后会详细介绍。这里的重点是,您可以在网络延迟非常低的情况下从附近位置访问数据,同时在多个站点并发修改数据时,可以防止计数器丢失。

您可以通过观看以下视频来了解应用的实际运行情况

https://www.youtube.com/embed/Q6LfMTNbQOs

总结   

希望您喜欢这篇关于使用 Redis 构建全功能零售应用的博客系列的第一部分。如您所见,Redis 实时数据平台使我们能够通过利用 RediSearch + RedisJSON 的文档数据库功能来满足对产品信息进行即时访问(端到端延迟小于 100 毫秒)等要求。RediSearch + RedisGears + RedisAI 的组合支持 AI 驱动的图像搜索,用于在产品目录中查找相似产品。此外,还介绍了分面搜索和地理搜索等功能。最后,但同样重要的是,我们向您展示了如何轻松构建基于 Redis Enterprise Active-Active 功能的地理复制实时库存。凭借所有这些功能,Redis 实时平台可帮助零售公司积极影响整体购物体验,为客户提供最佳的履约体验,并以最具成本效益的方式优化库存。

您想了解更多关于我们为 RedisMart 实现的各个服务的细节吗?那么请持续关注本系列的下一篇博客文章!

想自己尝试一下吗?以下是一些链接,可帮助您亲自体验将 Redis 用作实时数据平台:

致谢

非常感谢所有为这个演示应用做出贡献的人员

  • Yiftach Shoolman 和 Ash Sahu,感谢他们在 RedisConf 期间展示了该演示应用
  • Redis 营销团队(特别是 Udi Gotlieb、Ash Sahu、Doug Tidwell 和 Bryson Coles),感谢他们贡献了演示应用的需求列表、组织了 RedisConf、协助了 UI 设计并为这篇博客文章做出了贡献
  • 技术赋能团队(特别是 Martin Forstner、Greg Georges 和 David Maier),感谢他们实现、测试和设计了该演示应用,并为这篇博客文章做出了贡献
  • CTO 团队(特别是 Leibale Eidelman、Guy Korland),感谢他们开发了模块和图像识别服务
  • 产品管理团队(特别是 Pieter Cailliau、Emmanuel Keller、Jonathan Salomon 和 Amiram Mizne),感谢他们贡献了演示应用的需求列表并提供了产品特性
  • 以及所有我们在此遗漏提及的人员

我们将这个博客系列献给 RedisMart 应用的主要开发者 Martin Forstner。我们非常悲痛地分享,他最近不幸离世。Martin 的知识、才华和幽默感都是首屈一指的。他不仅仅是 Redis 的一名软件工程师,他还是我们的同事、队友、导师和朋友。安息吧,Martin,我们怀念你!