IBM Cloud Docs
将 IBM Cloudant 与其他 IBM 服务组合

将 IBM Cloudant 与其他 IBM 服务组合

每种数据库技术都有自己的长处和短处。 有些是为了高可用性和数据耐久性而构建的 (以牺牲更多硬件和额外成本为代价)。 其他用户更青睐速度,可以快速查询 (但可能会在突然发生电源故障时丢失数据)。

在本教程中,您将两个 IBM® 服务 IBM® Cloudant® for IBM Cloud® 和 IBM Cloud® Databases for Redis 组合在一起,通过为数据库查询实现高速缓存系统来优化速度和成本。

完成本教程需要不到一个小时。 它并非完全免费,因为 Databases for Redis 服务未随附免费层。 但是,如果您在使用完这些服务后取消了这些服务,那么您应该不必支付超过几美元的费用。

项目 - 团队名录

团队目录 是一个 Web 应用程序,其中包含所有部门员工的详细信息。 这些员工被分配到六个不同的颜色编码团队 (红色,橙色,绿色,蓝色,黄色和紫色)。 访问应用程序时,可以选择一个团队并查看该团队的所有成员的名称。 该应用程序还会向您显示此团队成员列表是从 IBM Cloudant 数据库还是从 Databases for Redis 高速缓存获取以及查询所花费的时间。 您可以看到要检索的高速缓存数据的速度有多快。

目标

  1. 了解如何使用 Terraform 在 IBM Cloud® 上供应多个服务。
  2. 了解如何使用 IBM Cloudant NodeJS SDK 来访问 IBM Cloud® 服务。

先决条件

您需要以下项:

  1. IBM Cloud® pay-as-you-go 帐户
  2. 访问 Mac 或 Linux™ 终端
  3. Git
  4. Node.js 和 npm
  5. Terraform
  6. Jq,用于处理 JSON 数据的命令行工具

步骤 1. 获取 API 密钥以将基础架构部署到您的帐户

遵循 本文档 中的步骤来创建 API 密钥并将其记录下来。

步骤 2. 将代码存储库和 cd 克隆到 Terraform 目录中

现在,您将获取代码并创建凭证文件。

  1. 在终端窗口中键入以下命令:

    git clone https://github.com/IBM-Cloud/team-directory.git
    cd team-directory
    
  2. 使用以下字段创建名为 terraform.tfvars 的文档:

    ibmcloud_api_key = "<your_api_key_from_step_1>"
    region = "eu-gb"
    redis_password  = "<make_up_a_password>"
    

步骤 3. 创建基础架构

  1. 通过运行 Terraform 脚本来创建所需的所有基础结构:

    terraform apply --auto-approve
    

    Terraform 文件夹包含许多简单脚本,您可以在以下列表中看到这些脚本:

    main.tf
    指示 Terraform 使用 IBM Cloud。
    variables.tf
    包含从 terraform.tfvars填充其值的变量定义。
    redis.tf
    创建 Databases for Redis 实例和一些凭证以访问该实例。
    cloudant.tf
    创建 IBM Cloudant 免费层实例和一些凭证以访问该实例。

    资源准备就绪需要几分钟时间。 现在,您可以访问 IBM Cloudant 实例和 Databases for Redis 实例。

    每个帐户只能有一个免费层实例。 如果已有一个变量,那么必须将其删除,或者将 plan 变量更改为 standard

  2. 通过访问 IBM Cloud® 帐户的“资源”部分来检出这些实例。

Terraform 脚本会输出几个您在后续步骤中使用的信息位。

步骤 4. 运行服务

在此步骤中,您将运行用于创建服务所需的所有环境变量的脚本,然后运行该服务。

在终端中键入以下命令

./build.sh

运行此脚本时,它将获取 Terraform 脚本的数据输出,并使用 jq 工具来解析内容和创建所需的环境变量。 然后运行用于初始化数据库并使用数据填充数据库的脚本 (server.js)。

步骤 5. 访问您的 Web 站点

  1. 打开浏览器并访问 https://localhost:8080。 请在以下截屏中查看每个团队的按钮:

    {单击每个团队的按钮。
    Team Directory team selectors

  2. 单击任何彩色按钮并获取团队成员列表。

  3. 查看数据的来源: IBM Cloudant (cache = false) 或 Databases for Redis (cache = true) 以及所用时间。

  4. 单击在步骤 2 中单击的相同按钮。 您可以看到来自 Databases for Redis 高速缓存的数据,并且在以下截屏中执行的时间缩短了很多:

    单击团队按钮并查看团队成员。
    Team Directory team list and cache information

    在基于云的实际应用程序中,应用程序服务器与 Databases for Redis 实例将彼此接近 (在同一数据中心内),因此两者之间的等待时间仅为几毫秒。 在此示例中,本地托管的应用程序服务器与云托管的 Databases for Redis 高速缓存之间存在额外的网络中继段,因此延迟增加不如生产中的延迟增加。

    高速缓存的数据设置为在 60 秒内到期。 因此,如果您在 60 秒后返回到其中一个团队,那么将再次从数据库中检索数据,而不是从高速缓存中检索数据。

  5. 如果需要,请使用 清除高速缓存 按钮从 Databases for Redis 中除去所有高速缓存的数据。

关于代码

该应用程序是一个简单的 Node.js 应用程序。 它使用三个主要包:

  • @ibm-cloud/cloudant 以连接到 IBM Cloudant 并读取/写入数据。
  • redis,用于连接到 Databases for Redis 实例并读取/写入数据。
  • Express,用于启用允许用户与数据交互的简单 Web 服务器。

以下部分描述了两个主要文件。

server.js

server.js 文件运行 Web 服务器并与 IBM Cloudant 和 Databases for Redis通信。 当前端将团队选择提交到 team 路径 (请参阅 index.html) 时,app.route 函数首先检查高速缓存以查看其是否已具有数据。 如果是,那么它将返回该值。 否则,它会对 IBM Cloudant 进行查询,以检索团队数据,将其存储在高速缓存中,并将其返回到前端。

读操作使用 IBM Cloudant 设计文档和 MapReduce 视图来选择文档。 此选择超出本教程的范围,但您可以在文档中阅读有关 视图和设计文档 的更多信息。

此脚本还包含一些代码,用于在首次运行时将测试数据 (包含在 directorydata.json 文件中) 上载到数据库。

index.html

index.html 页面是使用 Vue.js 框架 的应用程序的唯一页面。 装入时,它会向您显示可用的团队。

选择团队时,它会发出 HTTP POST 请求,并选择应用程序的 /team 路径 (请参阅 redis.js)。 来自应用程序的成功返回包含团队成员的所有数据。 为了简单起见,我们只显示他们的名字和城镇。

摘要

今天,我们组合了两个 IBM Cloud 服务以优化成本和用户体验: IBM Cloudant 作为文档存储和查询引擎,Databases for Redis 作为内容高速缓存。 可以更快,更便宜地检索高速缓存的文档,但权衡的是,应用程序可能在一段时间内向用户显示旧数据。

如果遵循本教程,那么必须取消供应资源以停止产生费用。 您可以通过输入以下命令从终端上的 terraform 目录取消供应: terraform destroy --auto-approve