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

加入我们参加 Redis 发布会

RedisMart:一个使用 Redis 的全功能零售应用程序

您还记得 RedisConf 的主题演讲演示吗?如果您记得,您可能会喜欢看到在主题演讲中展示的零售应用程序(RedisMart)的幕后开发。如果您不记得,那么现在是观看 Yiftach 和 Ash 展示它的最佳时机。以下是该视频的链接

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

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

需求

就像软件开发中经常发生的那样,让我们从讨论一些基本需求开始。以下是一些非正式的用户故事

  • 作为一名零售客户
    • 我希望能够通过各种标准(例如,全文、价格范围、其他客户的评分或分面搜索)快速(<100 毫秒端到端延迟)访问目录和产品详细信息,并找到产品。高响应时间会导致高跳出率。
    • 如果我不知悉产品的品牌名称或想要与之前购买的产品类似的东西,我希望能够通过图像购物。能够找到与我拥有的相机非常匹配或在视觉上类似的相机将非常酷。
    • 我希望能够安全送货,或者能够在线购买并在商店或路边取货(点击并取货)。
  • 作为一名库存管理员
    • 我需要对库存有准确的实时视图,才能为我的客户提供卓越的履行体验。
    • 我希望优化我的库存,以保持高需求商品的库存并减少滞销商品的库存。
    • 我需要近实时地查看不同商店和/或配送中心的库存,以便优化库存。

架构    

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

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

从那里,想象以下设计并不难

RedisMart application blog post image
RedisMart 应用程序博客文章图像

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

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

  • 每个服务一个数据存储:每个服务都有自己的数据存储,并且数据通过服务接口进行交换,而不是直接访问另一个服务的数据存储。
  • 多语言持久性:每个服务都使用最适合其需求的数据存储。谈到多语言持久性:Redis 是一个数据平台,允许您将模块提供的不同功能和数据模型结合起来,构建最适合您需求的数据存储!我们使用 Redis 和一些 Redis 模块来实现红色框并不奇怪。

实现

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

  • 购买:购买服务(不出所料)处理客户购买。
  • 库存:库存服务回答有关库存中库存数量的问题,并且当客户购买商品时库存数量会减少。库存更新通过利用 Redis Enterprise 的主动-主动功能,以近实时的方式复制到其他地点的库存。Redis Enterprise 利用无冲突复制数据类型来处理并发更新。在这种情况下,使用可重置的正负计数器数据类型来防止计数器丢失。
  • 产品目录:产品目录服务提供与产品相关的信息,并提供复杂的方法来查找产品。它使用一个部署了 RediSearch + RedisJSON 模块的 Redis 数据库。RedisJSON 允许我们直接将产品详细信息存储为 JSON 文档。RediSearch 可以索引、查询和全文搜索 JSON 文档。产品更新可以通过使用 Redis Enterprise 的主动-主动功能轻松地传播到多个站点。
  • 图像识别:最后,图像识别服务为图像上的向量相似性搜索提供 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 的主动-主动功能构建地理复制的实时库存。凭借所有这些,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,我们会想念你!