Google app engine django CMS与远程mysql数据库的性能
我曾尝试在GoogleAppengine上运行django CMS(+filer+easy_缩略图),并在cloudstorage上运行远程mysql数据库。在修复了与文件系统相关的性能问题并修复了django google云存储模块()之后,性能仍然非常糟糕(每个请求预缓存4个)。本教程中的大多数内容都配置为默认设置 计时用于一般页面呈现请求(无缓存、未登录,不包括实例启动时间)。最快的是一个空页面(没有图像,没有文本),有1.7秒和40个数据库RPC。最慢的速度是在4秒和100个rdbms.Exec调用的情况下完成一整页,其中包含许多图像和一些文本。我使用了appengine python评测模块 平均而言,每次查询的时间为45毫秒 我们是否遗漏了任何配置?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.
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卷上?