在 App Engine 上缓存云存储文件

Caching cloud storage files on app engine

我正在使用 App Engine 为一堆 sklearn 模型提供服务。这些模型的大小约为 100 MB,其中大约有 25 个。

下载它们有时可能需要长达 15 秒的时间,尽管它们位于指定的应用引擎存储桶中,而且通常会占用请求时间。

我目前使用包裹在 GCS 存储客户端周围的 FIFO 缓存层,但缓存命中率并不高,因为不同模型的使用相当分散,而且应用引擎内存有限。

Memcache 似乎太小了,/tmp 也存储在 RAM 中。

是否有更好的缓存此类文件的解决方案?

您可以想象不同的解决方案来解决您的问题。

  1. 您可以将模型嵌入到部署中。像这样,模型已经和服务一起在这里了。发布新模型版本时,您部署了新的应用引擎服务修订版
  2. 先例解决方案的问题是部署频率:当其中一个模型更新时,您需要重新打包并重新部署您的 App Engine 服务。解决方案是微服务。每个 APP 引擎服务可以有 1 个模型,因此只部署这个已更新的模型。如果您只想要入口点,您可以拥有第 26 个应用引擎服务,它是您的入口点,并将请求路由到正确的模型服务。
  3. 您也可以使用 Cloud 运行 执行相同的操作,如果您需要特殊的东西,您可以在其中管理容器包装和细节。您还可以更灵活地控制 CPU 数量和内存大小。

最后一点,解决下载问题部分后,您可能会遇到冷启动问题:服务器启动和加载模型到内存所花费的时间(在第一次请求时,实例启动时)。 Cloud 运行 提出了一个最小实例特性来保持一定数量的实例,从而消除冷启动问题。