2014-01-15 6 views
1

Я попытался запустить django-CMS (+ filer + easy_thumbnails) с удаленной базой данных mysql на GoogleAppengine с облачным хранилищем. После исправления проблем производительности, связанных с файловой системой, и fork-fixing модуля django-google-cloud-storage (http://github.com/locandy/django-google-cloud-storage), производительность по-прежнему не увенчалась успехом (4 с за предыдущий кеш запросов). Большинство настроек настраиваются по умолчанию из учебника.Производительность django-CMS с удаленной mysql DB

Сроки предназначены для запросов на получение общей страницы (без кеша, без входа в систему, исключая время запуска экземпляра). Самый быстрый - это пустая страница (без изображений, без текста) с 1,7 секунды и 40 базовых RPC. Самая медленная полная страница со многими изображениями и некоторым текстом за 4 секунды и 100 rdbms.Exec звонков. Я использовал модуль профилирования python appengine.

В среднем это будет 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=[]) 
+0

Вы можете уточнить, какие именно запросы принимают 4с? – jterrace

+0

Общие запросы рендеринга страницы (без кеша). Самый быстрый - это пустая страница (без изображений, без текста) с 1,7 секунды и 40 базовых RPC. Самая медленная полная страница со многими изображениями и текстом через 4 секунды. – cat

+1

Но это * ваша * латентность. Вам нужно будет копаться и посмотреть, что делают эти 96 RPC - вы должны взглянуть на трассировку appstats – jterrace

ответ

1

После профилирования Джанго-CMS с Appstats в рекомендуемой установке с фильтром и легко-миниатюрами и после исключения облачного хранилища данных, не представляется возможное, чтобы сделать новый некэшированные пустой страниц менее 500 мс с удаленной БД.

Каждый добавочный элемент или добавленная страница добавляет несколько последовательно выполненных запросов. Сложная страница имеет до 100 запросов и умеренную страницу около 50. Это добавляет до 4-5 секунд времени рендеринга страницы.

Мы подключили удаленное соединение БД с экземпляром SDK на локальном компьютере Европа-США, что увеличило время рендеринга страницы до 32 секунд. Время доступа, по-видимому, масштабируется линейно с задержкой сети и количеством запросов.

Система все еще может использоваться с кешем базы данных django, но административный сервер слишком медленный, чтобы его можно было использовать удобно. Вывод: django-CMS не совместим с удаленной настройкой БД в любом облаке.

В результате наших испытаний мы зафиксировали некэшированный модуль хранения Джанго совместимого с облачным хранилищем данными http://github.com/locandy/django-google-cloud-storage

+0

Рассматривали ли вы его запуск на машине GCE, сохраняя БД на томе PD? – jterrace

Смежные вопросы