App Engine Python中的并发请求

时间:2012-06-11 09:08:22

标签: python performance google-app-engine concurrency python-2.7

官方appengine文档说如果我们在app.yaml中将threadsafe属性设置为true,那么appengine将服务器并发请求。

官方链接: https://developers.google.com/appengine/docs/python/python27/newin27#Concurrent_Requests

  • 如果我们将threadsafe属性设置为true,是否意味着应用程序会更快(超过2.5)?官方文档/博客说明了这一点,但我正在寻找真实的世界经验。

  • 在高级别,内部如何运作?我们的应用程序是否会被初始化并为每个请求产生一个新的应用程序?

4 个答案:

答案 0 :(得分:10)

每个请求仍然只有一个帖子 - 你不能产生。

关闭线程安全,Appengine只会将一个请求路由到一个实例。因此,如果处理请求的时间每秒的请求数接近1,则Appengine将启动一个新实例来处理它们。这要花钱。启用线程安全后,Appengine可以将多个请求路由到实例。

这是否对您有所帮助取决于您的应用和流量:

  1. 首先,计算每秒入站请求数/平均延迟时间。如果这个很好,那么线程安全不会有太大的不同。
  2. 检查您的应用,了解它等待API花费的时间(例如数据存储或网址获取)。如果这是一个很大的比例,那么线程安全将有助于保持您的实例倒计时。如果没有,它将无济于事。
  3. 简单的规则是切换线程安全,除非你的应用程序非常耗费处理(很少API等待)。

答案 1 :(得分:4)

  1. 这并不意味着您的应用程序将变得更快,请求仍然来自单个线程。
  2. 当应用程序是线程安全的时,每个实例现在可以生成多个线程,每个线程将提供与非线程安全相关的请求,其中每个实例都有一个服务请求的单个线程。

答案 2 :(得分:3)

Python 2.5在每个请求的基础上仍然比Python 2.7快一点。这部分是由于每个人的成熟程度。 App Engine使用不同的机制来支持它们中的每一个。使用Python 2.7的胜利是它能够支持并行请求,而不是以Python 2.5处理负载峰值所需的速率启动新实例。

“内部如何运作”问题是你可能不会在这里得到答案的问题,但是过去一年的谷歌I / O中有一些暗示我们做什么以及为什么做的事情。在youtube.com上搜索“app engine”。

答案 3 :(得分:0)

我在这里添加答案,因为我们当前的实际结果与我们的期望相反。

在持续性能下降后,我们尝试将我们的(Python)应用程序切换回NON-threadsafe模式,并且非常惊讶地看到我们的性能提高了大约10倍。所以我们把它关掉了。我们的GAE支持团队无法解释这是怎么回事。我们最后一次分析时,我们对数据存储区进行了很大的I / O操作,理论上应该从多线程中获得很大提升。

因此,根据我们的经验......不仅不假设线程安全会更快,而且可能会慢得多。如果有人知道这是怎么回事,请分享。