使用 Memorystore 缓存来加速 Cloud Run 的 API

首先

阅读这篇文章,观看《在Cloud Run中使用Memorystore缓存加速API》的视频,并撰写了一篇标题为“实际尝试”的文章。

通过这篇文章可以学会的事情

使用Cloud Memorystore来加速API执行。

请对Cloud Memorystore进行简要了解。

Cloud Memorystore是一种全托管的内存数据存储,由Google提供管理的可扩展且安全可靠的基础设施。

通过使用这个工具,数据可以被保存在RAM中,实现高速访问频率、降低延迟和可扩展性。

他还具备可轻松扩展实例的特点,同时最大限度地减少复杂任务的自动化和应用可用性。

此外,数据的耐故障性得到保证,而且通过定期自动备份数据恢复也很容易。

Cloud Memorystore具有支持Redis和Memcached等产品的功能。由于这些产品具有的特点,Cloud Memorystore非常适用于各种用途,如Web应用程序、移动应用程序、游戏和分析工具等。

启用Google Cloud API

连接到GCP项目的控制台。

无服务器VPC访问API
云构建API
Artifact注册API
云运行管理员API

请启用这些API。
另外,根据需要适时进行其他API的启用。

将示例代码克隆到Git。

请克隆 cloud-run-redis。

git clone https://github.com/GoogleCloudPlatform/serverless-expeditions.git

当git clone的执行完成后,使用cd命令前往目标文件夹层级。

cd serverless-expeditions/cloud-run-redis

确认API的执行速度较慢。

首先,为了亲身感受不使用Cloud Memorystore会导致多大的速度差异,我们将对已经完成的代码进行部分修改。

请注意,SERVCICE_NAME 是任意 Cloud Run 服务的名称,
请选择并输入最近的区域。

部署.sh

GOOGLE_PROJECT_ID=[プロジェクトIDを入力してください。]
SERVICE_NAME=rest-api
#REDIS_HOST=
#REDIS_PORT=
#VPC_CONNECTOR=

gcloud beta run deploy $SERVICE_NAME \
  --source . \
  --platform managed \
  --region asia-northeast1 \
  --allow-unauthenticated \
  # --update-env-vars REDIS_HOST=$REDIS_HOST,REDIS_PORT=$REDIS_PORT
  # --vpc-connector $VPC_CONNECTOR
  --project=$GOOGLE_PROJECT_ID
memorystore-deploy-error.png

为了解决这个问题,请执行以下命令。

sed -i 's/\r$//' deploy.sh

index.js是一个JS文件,其中摘录了需要修改的部分代码附近的内容。

/*
const redisClient = require('redis').createClient(
  process.env.REDIS_PORT,
  process.env.REDIS_HOST
);
*/

// Read one artist, by id.
app.get('/artist/:id', async (req, res) => {
  try {
    const id = req.params.id;
    const artist = await getArtistFromDatabase(id);
    if (artist) {
      res.json(artist);
      return;
    }
    else {
      res.status(404).json({error: `Artist ${id} not found`});
    }
  }
  catch(ex) {
    res.status(500).json({error: ex.toString()});
  }
})
memorystore-index-slow.png
./deploy.sh

然后,启动Postman,并确认部署的Cloud Run服务的URL,然后修改以下命令并执行GET请求。

[Cloud Run Service URL]/artist/1
postman-slow.png

提高API的执行速度。

如果确认API的执行速度超过3秒,接下来需要进行Cloud Memorystore的部署来提高API的执行速度。

另外,Cloud Memorystore因可以在VPC内部配置,所以不接受来自外部的访问。因此,我们需要在Cloud Run上设置”无服务器VPC访问”,以便能够连接到虚拟专用云。

image.png

配置云记忆存储。

memorystore-create-nw.png

设置无服务器VPC访问

serverless-vpc-access-subnet.png
memorystore-praimary.png
image.png

部署.sh

GOOGLE_PROJECT_ID=[プロジェクトIDを入力してください。]
SERVICE_NAME=rest-api
REDIS_HOST=10.44.88.21
REDIS_PORT=6379
VPC_CONNECTOR=my-vpc-connecter

gcloud beta run deploy $SERVICE_NAME \
  --source . \
  --platform managed \
  --region asia-northeast1 \
  --allow-unauthenticated \
  --update-env-vars REDIS_HOST=$REDIS_HOST,REDIS_PORT=$REDIS_PORT \
  --vpc-connector $VPC_CONNECTOR \
  --project=$GOOGLE_PROJECT_ID
memorystore-deploy-fast.png
const redisClient = require('redis').createClient(
  process.env.REDIS_PORT,
  process.env.REDIS_HOST
);

// Read one artist, by id.
app.get('/artist/:id', async (req, res) => {
  try {
    const id = req.params.id;
    const artist = await getArtistFromCache(id);
    if (artist) {
      res.json(artist);
      return;
    }
    else {
      res.status(404).json({error: `Artist ${id} not found`});
    }
  }
  catch(ex) {
    res.status(500).json({error: ex.toString()});
  }
})
memorystore-index-fast.png

完成deploy.sh和index.js文件的修改后,
继续执行以下命令,
进行Cloud Run Service的重新部署。

./deploy.sh
postman-fast-2.png

结束了

這篇文章是通過觀看影片,我將”實際動手試試看”的內容整理成了一篇文章。

通过使用Cloud Memorystore,我们可以将一次请求的数据保存在缓存中,从而实现处理加速的效果。

如果您觉得API执行时间太慢,可能考虑使用Cloud Memorystore。

希望有兴趣尝试Cloud Memorystore的人们可以参考本文了解其特点。

如果您以后想要“慢慢地阅读”和“重复阅读”,请将此文章添加到“收藏夹”中。
对于正在阅读这篇文章的方面,如果它对您有所帮助,请给予一个“赞”,这将是一种鼓励。
非常感谢您的支持!

广告
将在 10 秒后关闭
bannerAds