使用 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
为了解决这个问题,请执行以下命令。
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()});
}
})
./deploy.sh
然后,启动Postman,并确认部署的Cloud Run服务的URL,然后修改以下命令并执行GET请求。
[Cloud Run Service URL]/artist/1
提高API的执行速度。
如果确认API的执行速度超过3秒,接下来需要进行Cloud Memorystore的部署来提高API的执行速度。
另外,Cloud Memorystore因可以在VPC内部配置,所以不接受来自外部的访问。因此,我们需要在Cloud Run上设置”无服务器VPC访问”,以便能够连接到虚拟专用云。
配置云记忆存储。
设置无服务器VPC访问
部署.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
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()});
}
})
完成deploy.sh和index.js文件的修改后,
继续执行以下命令,
进行Cloud Run Service的重新部署。
./deploy.sh
结束了
這篇文章是通過觀看影片,我將”實際動手試試看”的內容整理成了一篇文章。
通过使用Cloud Memorystore,我们可以将一次请求的数据保存在缓存中,从而实现处理加速的效果。
如果您觉得API执行时间太慢,可能考虑使用Cloud Memorystore。
希望有兴趣尝试Cloud Memorystore的人们可以参考本文了解其特点。
如果您以后想要“慢慢地阅读”和“重复阅读”,请将此文章添加到“收藏夹”中。
对于正在阅读这篇文章的方面,如果它对您有所帮助,请给予一个“赞”,这将是一种鼓励。
非常感谢您的支持!