学习

如何使用 NodeJS、AWS Lambda 和 Redis 构建实时竞价平台

数字技术将我们推向一个令人兴奋的新时代,并改变了生活的方方面面。随着通信变得即时,我们比以往任何时候都更加互联。居家工作现已成为常态,帮助我们在疫情期间转向新的工作方式。而通过在线参加工作相关活动来减少碳排放的能力意味着我们在应对全球变暖方面取得了更大的进展。延续这一趋势的是 Shamshir Anees 和他的团队,他们创建了一个可以托管数字拍卖的应用。通过使用 Redis,组件之间的数据传输以最高效率进行,为用户提供仪表板上的实时竞价更新。

让我们看看这是如何实现的。 

  • 您将构建什么?
  • 您需要什么?
  • 架构
  • 工作原理是什么?
  • 入门
  • 数据如何存储
  • 应用导航

您将构建什么?

您将构建一个允许用户参与数字拍卖的应用。该应用将允许用户创建账户、进行竞价,甚至设置自己的拍卖。下面我们将揭示所需的组件、它们的功能以及如何在此架构中部署它们。

准备好开始了吗?好的,让我们直接深入了解吧。

您需要什么?

  • NodeJS:用作开源、跨平台、后端 JavaScript 运行时环境,可在 Web 浏览器之外执行 Javascript 代码。
  • Amazon Cognito:用于安全地管理和同步移动端用户应用数据。
  • Redis Cloud:用作实时数据库、缓存和消息代理。
  • Redis Stack:用于从 Redis 存储、更新和获取 JSON 值。
  • Socket.IO:用作提供浏览器和服务器之间实时、双向、事件驱动通信的库。
  • AWS Lambda:用作无服务器计算服务,可响应事件运行您的代码,并自动为您管理底层计算服务。
  • Amazon SNS/Amazon SES:用于应用到应用 (A2A) 和应用到人 (A2P) 通信的完全托管的消息服务。

架构

工作原理是什么?

所有拍卖

NodeJS 连接到 Redis Cloud 数据库。

前端通过 API 调用与 NodeJS 后端通信。

GET : /api/auctions 从 Auctions Hash 中获取所有键。

NodeJS 使用 Redis 模块来与 Redis Cloud 配合工作。然后使用 Redis 凭据和 hmget() 创建 Redis 客户端。这相当于用于将数据推送到 Redis 数据库的 HMSET 命令。

每个拍卖

GET : /api/auctions/{auctionId} 按 id 获取每个拍卖物品。

NodeJS 使用 Redis 模块来与 Redis Cloud 配合工作。然后使用 Redis 凭据和 hmget() 创建 Redis 客户端。这相当于用于将数据推送到 Redis 数据库的 HMSET 命令。

拍卖物品的所有竞价数据

GET : /api/bidding/{auctionId}

NodeJS 使用 Redis 模块来与 Redis Cloud 配合工作。然后使用 Redis 凭据和 hmget() 创建 Redis 客户端。这相当于用于将数据推送到 Redis 数据库的 HMSET 命令。

个人资料设置

GET : /api/settings

NodeJS 使用 Redis 模块来与 Redis Cloud 配合工作。然后使用 Redis 凭据和 hmget() 创建 Redis 客户端。这相当于用于将数据推送到 Redis 数据库的 HMSET 命令。

用户信息

GET : /api/users/{email}

NodeJS 使用 Redis 模块来与 Redis Cloud 配合工作。然后使用 Redis 凭据和 hmget() 创建 Redis 客户端。这相当于用于将数据推送到 Redis 数据库的 HMSET 命令。

入门

先决条件

步骤 1. 注册免费 Redis Cloud 账户
注册免费 Redis Cloud 账户。
在创建新订阅时选择 AWS 作为云厂商。在数据库创建过程结束时,您将获得一个 Redis Cloud 数据库端点和密码。您可以保存以备后用

工作原理是什么?

所有拍卖

NodeJS 连接到 Redis Cloud 数据库。

前端通过 API 调用与 NodeJS 后端通信。

GET : /api/auctions 从 Auctions Hash 中获取所有键。

NodeJS 使用 Redis 模块来与 Redis Cloud 配合工作。然后使用 Redis 凭据和 hmget() 创建 Redis 客户端。这相当于用于将数据推送到 Redis 数据库的 HMSET 命令。

每个拍卖

GET : /api/auctions/{auctionId} 按 id 获取每个拍卖物品。

NodeJS 使用 Redis 模块来与 Redis Cloud 配合工作。然后使用 Redis 凭据和 hmget() 创建 Redis 客户端。这相当于用于将数据推送到 Redis 数据库的 HMSET 命令。

拍卖物品的所有竞价数据

GET : /api/bidding/{auctionId}

NodeJS 使用 Redis 模块来与 Redis Cloud 配合工作。然后使用 Redis 凭据和 hmget() 创建 Redis 客户端。这相当于用于将数据推送到 Redis 数据库的 HMSET 命令。

个人资料设置

GET : /api/settings

NodeJS 使用 Redis 模块来与 Redis Cloud 配合工作。然后使用 Redis 凭据和 hmget() 创建 Redis 客户端。这相当于用于将数据推送到 Redis 数据库的 HMSET 命令。

用户信息

GET : /api/users/{email}

NodeJS 使用 Redis 模块来与 Redis Cloud 配合工作。然后使用 Redis 凭据和 hmget() 创建 Redis 客户端。这相当于用于将数据推送到 Redis 数据库的 HMSET 命令。

入门

先决条件

步骤 1. 注册免费 Redis Cloud 账户
注册免费 Redis Cloud 账户。
在创建新订阅时选择 AWS 作为云厂商。在数据库创建过程结束时,您将获得一个 Redis Cloud 数据库端点和密码。您可以保存以备后用

步骤 2:克隆后端 GitHub 仓库

https://github.com/redis-developer/NR-digital-auction-backend

步骤 3. 安装包依赖项

'npm install' 是一个 npm cli 命令,它执行预定义的操作,即安装 package.json 中指定的依赖项

npm install

步骤 4. 设置环境变量

export REDIS_END_POINT=XXXX
export REDIS_PASSWORD=XXX
export REDIS_PORT=XXX

步骤 5. 构建应用

npm run build

步骤 6. 启动应用

npm start

步骤 7. 克隆前端 GITHUB 仓库

git clone https://github.com/redis-developer/NR-digital-auction-frontend

步骤 8. 构建应用

npm run build

步骤 9. 启动应用

npm start

步骤 10. 访问应用

步骤 11. 注册应用

步骤 12. 登录

步骤 13. 访问仪表板

步骤 14. 列出拍卖物品

步骤 15. 访问竞价页面

数据如何存储

您将使用带有 Redis Stack 的 Redis Cloud 数据库来安装数据。

拍卖

  • 类型 - Redis Hash。
  • 用于存储拍卖数据。
  • 由后端 (NodeJS) 生成的 UUID 作为键
  • 表示 Auction 对象的 JSON 数据,包含以下键
    • auctionId
    • auctionItemName
    • description
    • lotNo
    • quantity
    • buyersPremium
    • itemUnit
    • minBidAmount
    • bidIncrement
    • startDateTime
    • endDateTime
    • images
    • currentBid
  • NodeJS 连接到 Redis Cloud 数据库。前端通过 API 调用与 NodeJS 后端通信。
  • POST : /api/auctions。
  • 请求体包含要插入数据库的 JSON 数据。
  • NodeJS 使用 Redis 模块与 Redis Cloud 配合工作。使用 Redis 凭据创建 Redis 客户端,并使用 hmset()。这相当于用于将数据推送到 Redis 数据库的 HMSET 命令。

竞价

  • 类型 - Redis Hash

  • 用于存储对每个拍卖物品进行的竞价

  • NodeJS 连接到 Redis Cloud 数据库。前端通过 API 调用与 NodeJS 后端通信。

  • POST : /api/bidding

  • 请求体包含要插入数据库的 JSON 数据。

  • 请求体中的 AuctionId 用作键

  • 包含键的 JSON 数据

    • currentBid
    • currentBidTime
    • currentBidEndTime, 和
    • biddings 数组 (id, auctionId, userId, username, bidAmount, bidTime)
  • 竞价数组包含对特定拍卖物品进行的所有竞价。

  • 根据当前的 BidEndTime 和 BidTime,拍卖结束日期根据动态截标概念进行延长。

  • 当前的动态截标逻辑 - 如果在拍卖结束前最后 5 分钟内有新的竞价,结束时间将延长 1 小时。

  • 这将在 SaaS 解决方案中可配置。

  • NodeJS 使用 Redis 模块与 Redis Cloud 配合工作。使用 Redis 凭据和 hmset() 创建 Redis 客户端。这相当于用于将数据推送到 Redis 数据库的 HMSET 命令。

个人资料设置

  • 类型 - string
  • 包含键的 JSON 数据 - 用作值
  • NodeJS 连接到 Redis Cloud 数据库。前端通过 API 调用与 NodeJS 后端通信。
  • POST : /api/settings
  • 请求体包含要插入数据库的 JSON 数据。
  • NodeJS 使用 Redis 模块与 Redis Cloud 配合工作。使用 Redis 凭据和 hmset() 创建 Redis 客户端。这相当于用于将数据推送到 Redis 数据库的 HMSET 命令。

用户

  • 类型 - Redis Hash
  • 用于存储用户详情
  • NodeJS 连接到 Redis Cloud 数据库。前端通过 API 调用与 NodeJS 后端通信。
  • POST: /api/users
  • 请求正文包含要插入数据库的 JSON 数据
  • 电子邮件 ID 用作键
  • 包含键的 JSON 数据用作值
  • NodeJS 使用 Redis 模块与 Redis Cloud 配合工作。使用 Redis 凭据和 hmset() 创建 Redis 客户端。这相当于用于将数据推送到 Redis 数据库的 HMSET 命令。

创建账户

当您进入数字拍卖的首页时,您会看到一系列待拍卖的物品(见下图)。点击“欢迎”按钮创建账户。

然后您将被带到注册页面。输入您的详细信息并点击“注册”。完成注册表单后,您将收到一封确认邮件来激活您的账户。

出价

前往首页,查看所有物品及其拍卖详情。这里的所有数据都由 Redis Stack 和 Redis Cloud 填充。滚动页面,点击您想出价的物品。

当您点击一件物品时,您将在页面顶部看到出价过程的详细信息。您还可以选择设置提醒,以便在该物品的竞拍开始时收到电子邮件。

在图片右侧,您将看到该物品的最高出价。下方是不同用户之前出价的列表,该列表实时更新。

点击“出价”按钮进行出价。

要访问元数据信息或查看物品的更多图片,只需向下滚动页面(见下图)。

查看您的出价历史

点击导航栏顶部的“我的出价”查看您的出价历史(见下图)。

查看即将到来的拍卖

点击导航栏顶部的“拍卖”查看所有即将到来的拍卖。

总结:利用 Redis 和 AWS 为拍卖师提供实时数据支持

数字技术对现代生活的方方面面都产生了连锁反应。能够在线完成重要任务而非亲自办理,这革新了我们的生活方式,帮助我们减少碳排放,节省出行时间,并即时获取前所未有的海量数据。

然而,此类活动的成功取决于数据库实时传输数据的能力。传输中的任何中断都会在用户与拍卖之间造成断联,阻碍拍卖师对出价做出反应。这只会导致沮丧、疏离,并使用户彻底脱离应用。

但得益于 Redis,构成架构系统的组件变得更加紧密互联,因此数据能够实时发送、处理和接收。实现这一点为顺畅的出价过程铺平了道路,用户可以实时无中断地与事件互动,最终增强了应用的功能性。

NR-Digital-Auction 是使用 Redis 如何将创新变为现实的一个绝佳例子。全球的日常开发者正在试验 Redis,构建影响日常生活的应用,您也可以做到!

那么您可以使用 Redis 构建什么呢?如果您准备开始构建,请快速启动一个免费数据库 Redis Cloud