Google存储上传的可缩放问题(来自GAE)

时间:2017-08-21 16:01:59

标签: google-app-engine google-cloud-platform google-cloud-storage scalability

我的应用程序连接到G Suite域,一个罕见的功能允许下载列出所有用户的csv。

该文件已保存到Google存储空间并从那里下载。

虽然它适用于普通域,但更大的域(½M用户)具有可扩展性问题。 CSV变得巨大,导致:

Exceeded soft private memory limit of 128 MB with 340 MB after servicing 9 requests total

据我所知,我不能进行增量上传,我能想到的每个解决方法都必须在某个时候将文件保存在内存中。

我不知道的任何解决方法?

开箱即用的想法就像增量保存到云端硬盘一样?而是避免额外的范围。

2 个答案:

答案 0 :(得分:0)

如果您保持能够将整个文件(和/或其关联数据)保留在内存中的要求,则唯一的解决方案是通过instance_class配置项使用a GAE instance class更多内存在app.yaml配置文件中。

当然,只要内存要求保持在其中一个可用实例类的可用内存之下,此解决方案才能工作,它不会无限期地缩放CSV大小。

答案 1 :(得分:0)

我之前在App Engine上实现了这样的批量导出功能。我是通过使用App Engine通过API启动临时计算引擎VM来实现的。一旦Compute VM启动,它就会运行一个简单的脚本,然后自行关闭。

计算引擎VM的优势在于您可以自由地写入临时磁盘空间,从而节省内存。默认情况下,GCE实例有10GB的根磁盘,希望足够but this can be increased

在GCE实例中,您可以进行GSuite API调用并将导出构建为磁盘上的临时文件,然后在准备就绪后,您可以使用drive或google云存储apis上传它。然后将计算引擎实例添加到shut itself down

使用App Engine中的GCE API并不像听起来那么难。我wrote up a detailed blog post描述了如何在App Engine上设置可以控制计算引擎实例的Web服务。最后,它链接到github上的完整可部署示例。你必须编写脚本来进行导出,但是如果你可以制作脚本的Docker镜像,那么这个服务可以运行它!