GCP - appengine 通过 version 管理应用,你可以在 appengine 上部署多个 version(dev、qa等),而每个 version 可以有多个 instance,一个 instance 可简单理解为一个基于 Spring Boot 实现的微服务,当有请求到达时 appengine 会根据一定策略选择由哪一个 instance 处理该请求,如果现有的 instance 处理的流量已经很多,那么 appengine 会启动新的 instance 来处理这个请求,这个行为主要由 instance 的三种扩缩策略决定:手动、自动和基础。
背景
应用数据保存在 GCP 的数据存储组件 datastore 中,datastore 是一个 NoSQL 数据库。假设我们的应用对其中一部分数据 M 的操作的 QPS 要求很高,如果每次都从 datastore 查询则不能满足需求。
// 更新 M 数据
POST /m
// 查询 M 数据
GET /m
解决方案
为了加快请求的处理速度,我们在应用启动时(即 instance 启动时)先将这部分数据全部加载到内存,之后直接从内存中读取,而不是每次都从 datastore 中查询。这种方式有几个问题需要解决:
1. 每次请求到达时