Google app engine django CMS与远程mysql数据库的性能

Google app engine django CMS与远程mysql数据库的性能,google-app-engine,google-cloud-storage,django-cms,Google App Engine,Google Cloud Storage,Django Cms,我曾尝试在GoogleAppengine上运行django CMS(+filer+easy_缩略图),并在cloudstorage上运行远程mysql数据库。在修复了与文件系统相关的性能问题并修复了django google云存储模块()之后,性能仍然非常糟糕(每个请求预缓存4个)。本教程中的大多数内容都配置为默认设置 计时用于一般页面呈现请求(无缓存、未登录,不包括实例启动时间)。最快的是一个空页面(没有图像,没有文本),有1.7秒和40个数据库RPC。最慢的速度是在4秒和100个rdbms.

我曾尝试在GoogleAppengine上运行django CMS(+filer+easy_缩略图),并在cloudstorage上运行远程mysql数据库。在修复了与文件系统相关的性能问题并修复了django google云存储模块()之后,性能仍然非常糟糕(每个请求预缓存4个)。本教程中的大多数内容都配置为默认设置

计时用于一般页面呈现请求(无缓存、未登录,不包括实例启动时间)。最快的是一个空页面(没有图像,没有文本),有1.7秒和40个数据库RPC。最慢的速度是在4秒和100个rdbms.Exec调用的情况下完成一整页,其中包含许多图像和一些文本。我使用了appengine python评测模块

平均而言,每次查询的时间为45毫秒

我们是否遗漏了任何配置?

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',
是否有人成功地在云中部署了具有可用远程数据库的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=[])

在使用appstats在推荐的设置中使用filer和easy缩略图评测django CMS之后,在排除cloudstorage之后,使用远程DB在不到500毫秒的时间内呈现新的未缓存的页面是不可能的

添加到页面的每个占位符或功能都会添加几个顺序执行的查询。一个复杂页面最多有100个查询,一个中等页面大约有50个查询。这将使页面的渲染时间增加到4-5秒

我们已经在本地机器Europe-USA上运行了到SDK实例的远程DB连接,这将页面呈现时间增加到32秒。访问时间似乎与网络延迟和查询数成线性关系

该系统仍然可以与django的数据库缓存一起使用,但管理后端速度太慢,无法方便地使用。结论:django CMS与任何云中的远程数据库设置都不兼容

经过测试,我们修复了一个与cloudstorage兼容的未缓存django存储模块

您能否详细说明哪些请求需要4s?一般页面呈现请求(无缓存)。最快的是一个空页面(没有图像,没有文本),有1.7秒和40个数据库RPC。最慢的速度是在4秒钟内完成一整页,其中包含许多图像和一些文本。但这是您的延迟。你需要深入了解这96个RPC在做什么——你应该看看appstats Trace,因为django CMS是一个现成的产品,这不是一个我可以控制的定制appengine应用程序。这里只有两个结论:(1)配置错误,(2)软件不能在appengine上运行,我需要一个Linux机箱。96个RPC是CMS对CloudSQL的查询。我已经通过配置修复了所有云存储访问,并向中间件模块的作者报告了错误。公平地说,我需要补充一点,如果不是配置问题,那么在Amazon Beanstalk和S3上会遇到同样的问题,这将是一种通用的云不兼容。您是否考虑过在GCE机器上运行它,是否将数据库存储在PD卷上?