【发布时间】:2014-01-15 12:36:51
【问题描述】:
我尝试在 GoogleAppengine 上运行一个 django-CMS (+filer +easy_thumbnails) 和一个远程 mysql 数据库,并带有 cloudstorage。在修复了与文件系统相关的性能问题并修复了 django-google-cloud-storage 模块 (http://github.com/locandy/django-google-cloud-storage) 后,性能仍然非常糟糕(每个请求预缓存 4 秒)。本教程中的大部分内容都被配置为默认设置。
时间是针对通用页面呈现请求(无缓存,未登录,不包括实例启动时间)。最快的是 1.7 秒和 40 个数据库 RPC 的空白页面(无图像,无文本)。最慢的一整页包含许多图像和一些文本,需要 4 秒和 100 次 rdbms.Exec 调用。我使用了 appengine python 分析模块。
平均每个查询需要 45 毫秒。
有没有我们遗漏的配置?
是否有人成功地在云中部署了 CMS,并带有可用的远程数据库?
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.core.context_processors.i18n',
'django.core.context_processors.request',
'django.core.context_processors.media',
'django.core.context_processors.static',
'cms.context_processors.media',
'sekizai.context_processors.sekizai',
)
MIDDLEWARE_CLASSES = (
'django.middleware.cache.UpdateCacheMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.doc.XViewMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
'cms.middleware.page.CurrentPageMiddleware',
'cms.middleware.user.CurrentUserMiddleware',
'cms.middleware.toolbar.ToolbarMiddleware',
'cms.middleware.language.LanguageCookieMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
)
DATABASES = {
'default': {
'ENGINE': 'google.appengine.ext.django.backends.rdbms',
分析:
(1) 2014-01-15 12:15:03.358 "GET .../benefits/" 200 real=4636ms api=0ms overhead=9ms (89 RPCs, cost=0, billed_ops=[])
(2) 2014-01-15 12:14:56.862 "GET .../preise/" 200 real=5200ms api=0ms overhead=9ms (94 RPCs, cost=0, billed_ops=[])
(3) 2014-01-15 12:14:47.673 "GET .../einstieg/" 200 real=4684ms api=0ms overhead=8ms (87 RPCs, cost=0, billed_ops=[])
(4) 2014-01-15 12:14:01.054 "GET .../moeglichkeiten/" 200 real=5341ms api=0ms overhead=10ms (98 RPCs, cost=0, billed_ops=[])
(5) 2014-01-15 12:13:31.516 "GET .../werkzeuge/" 200 real=5176ms api=0ms overhead=9ms (96 RPCs, cost=0, billed_ops=[])
(6) 2014-01-15 12:13:00.507 "GET .../einstieg/" 200 real=5460ms api=0ms overhead=9ms (94 RPCs, cost=0, billed_ops=[])
(7) 2014-01-15 12:12:59.891 "GET .../" 302 real=369ms api=0ms overhead=0ms (7 RPCs, cost=0, billed_ops=[])
【问题讨论】:
-
你能详细说明哪些请求需要 4s 吗?
-
通用页面呈现请求(无缓存)。最快的是 1.7 秒和 40 个数据库 RPC 的空白页面(无图像,无文本)。最慢的一个包含许多图像和一些文本的整页需要 4 秒。
-
但这是你的延迟。您需要深入了解这 96 个 RPC 正在做什么 - 您应该查看 appstats 跟踪
-
对我来说 django-CMS 是一个现成的产品,这不是我可以控制的自定义 appengine 应用程序。这里只有两个结论:(1) 配置错误,(2) 软件在 appengine 上无法运行,我需要一个 Linux 机器。这 96 个 RPC 是 CMS 对 CloudSQL 的查询。我已通过配置修复所有云存储访问权限,并向中间件模块作者报告错误。
-
公平地说,我需要补充一点,如果不是配置问题,在 Amazon Beanstalk 上使用 S3 也会遇到同样的问题,这将是一种通用的云不兼容问题。
标签: google-app-engine google-cloud-storage django-cms