App Engine:很少有大型脚本或许多小脚本?

时间:2015-10-31 15:44:35

标签: python google-app-engine google-cloud-datastore

我正在开发一个我想在App Engine上托管的网站。我的App Engine脚本是用Python编写的。现在让我们假设您可以在我的网站上注册并拥有用户个人资料。现在,用户配置文件非常广泛,并且具有50多种不同的ndb属性(仅用于示例)。

如果用户想要编辑他的记录(他可以在某种程度上),他可以通过我的网站向app引擎后端发送请求。

配置文件的部分方式,通常约有5到10个属性属于页面的小部分或容器。在服务器端,我将有多个小脚本来处理整个配置文件的小部分。例如,一个脚本将更新“地址信息”,另一个脚本将更新“兴趣”和“关于我”文本。这样我最终得到5个脚本。优点是每个脚本都易于维护,只做一件特定的事情。但我不知道这样的事情是否是明智的表现。因为如果我为页面的其余部分维护这个习惯,我可能最终会得到大约100个或更多不同的.py脚本和一个非常大的app.yaml,我不知道它们在google服务器上的缓存效率如何。< / p>

所以tl;博士:

许多小型后端脚本在我的App Engine后端上执行小任务是个好主意,还是应该使用几个可以处理各种不同任务的脚本?

3 个答案:

答案 0 :(得分:3)

这里有两个重要的考虑因素。

  1. 从客户端到服务器的往返调用次数。
  2. 一次更新用户配置文件的调用将比5次调用更快地执行,以更新用户配置文件的不同部分,因为您可以节省客户端和服务器之间以及服务器和数据存储之间的往返时间。

    1. 写成本。
    2. 如果您更新用​​户个人资料中的5个属性并保存,然后更新5个其他属性并保存,等等,您的写入成本会高得多,因为每次更新都会产生写入成本,包括所有索引属性的更新 - 即使那些你没有改变。

      不是创建具有50个属性的庞大用户配置文件,而是在一个实体中保留很少更改的属性(名称,性别,出生日期等),并将其他属性分隔为不同的实体或实体。通过这种方式,您可以降低写入成本,但也可以减少有效负载(除非需要,否则无需来回移动所有50个属性),并简化应用程序逻辑(即,如果用户只更新地址,则不需要更新整个用户个人资料)。

答案 1 :(得分:3)

每次应用程序的实例启动时都必须加载一个大的脚本,这可能会损害实例启动时间,启动实例的每个请求的响应时间以及实例的内存占用。但它可以立即处理任何请求,不需要加载其他代码。

多个较小的脚本可以根据需要延迟加载,在您的应用启动后,提供的优势可能对某些应用有吸引力:

  • 主app /模块脚本可以保持较小,这样可以缩短实例启动时间
  • 应用程序的内存占用量可以保持较小,延迟加载文件中的处理程序代码直到有对这些处理程序的请求时才会加载 - 对于很少使用的处理程序很有意思
  • 需要加载处理程序代码的请求的响应时间的额外延迟较小,因为只需要加载一个较小的脚本。

当然,缺点是由于加载了处理程序脚本,某些请求的延迟时间会比平时长:在最坏的情况下,受影响的请求数是每个实例的脚本数寿命。

更新用户配置文件不是经常做的事情,我认为它是一个很少使用的功能,因此将其处理程序放在一个单独的文件看起来很吸引人。每个文件将它拆分为一个处理程序 - 我发现可能有点极端。它真的取决于你,你知道你的应用程序和你的风格更好。

从GAE(缓存)基础设施的角度来看 - 文件配额是10000个文件,仅仅约100个文件我不会太担心。

答案 2 :(得分:0)

添加Dan Cornilescu的答案,将实例写入/保存到数据库会将整个实例(即其所有属性)重写到数据库。如果你要多次使用put(),那么你将多次重写who实例。除了执行任务繁重之外,这将花费你更多的钱。