Масштабирование Joomla с разделением базы данных на чтение и запись

9

У меня есть сервер MySQL в Северной Америке (с помощью Amazon RDS) и реплика чтения. У меня также есть копия чтения для нового региона - Австралии.

Австралийский сервер работает крайне медленно из-за динамического характера чтения Joomla с основного сервера БД в Северной Америке. Я попытался использовать прокси MySQL для этого, чтобы разделить чтение / запись, но это не является долгосрочным решением. Mysql прокси выглядит эффективно мертвым.

Какие еще варианты у меня есть?

Том
источник

Ответы:

2

Joomla (и другие подобные CMS) были разработаны для архитектуры LAMP с учетом общего хостинга. Например, низкая задержка между веб-сервером и базой данных.

Amazon RDS предназначен для масштабирования реляционной базы данных в облаке. Таким образом, так как региональное распределение и резервирование важны, ожидаются более высокие ставки.

Если у вас есть особые требования к Amazon RDS, вы можете настроить:

  • Joomla с локальным MySQL для общего управления сайтом (статические ресурсы, легко копируемые)
  • Amazon RDS соединение, соединение для конкретного приложения для вашей разработки

Сторонние расширения, разработанные с учетом малой задержки, не будут работать с Amazon RDS.

Анибал
источник
Не уверен, что я понимаю ваши два пункта? Я буду продолжать использовать RDS, поэтому вы предлагаете Master RDS в Австралии? Также я могу использовать соединение RDS с репликой чтения с моими пользовательскими компонентами, но не с ядром Joomla. Поэтому не уверен, что вы подразумеваете под конкретным приложением. Можете ли вы уточнить?
Том
2

Если вы используете относительно свежую версию PHP, то вы, вероятно, используете драйвер php mysqlnd. http://us3.php.net/manual/en/book.mysqlnd.php

Mysqlnd имеет пользовательский API-интерфейс плагина и может функционировать таким же образом, как и MySQL-прокси - например, http://pecl.php.net/package/mysqlnd_ms - это плагин, который разделяет операции чтения и записи и имеет недавний официальный выпуск 9/2013.

Также имейте в виду, что Joomla всегда пишет в таблицу сеансов. Использование memcache или apc просто сохраняет данные сеанса в кэше, а не метаданные сеанса.

Вы можете получить тот же прирост производительности, опустив таблицу #_sessions и воссоздав ее, используя механизм данных памяти вместо innodb или myisam.

garyamort
источник
1

Каждую страницу, созданную Joomla, нужно будет записать в таблицу сеансов.

Поэтому я бы предложил использовать memcache или apc для управления сессиями. Это должно помочь вам достичь нулевой записи в базу данных, поэтому чтение-реплика будет достаточным для большинства страниц.

Shyam
источник
Это отличный момент. Это поможет с записью, но что действительно важно, как я могу использовать реплику чтения для ядра Joomla? Прямо сейчас я вижу только прокси MySQL или взлом ядра как варианты. Я полагаю, HAproxy также вариант, но это не так ясно.
Том
1. Сама AWS поддерживает репликацию ( aws.amazon.com/rds/faqs/#replication ) 2. Другой вариант - встроенная репликация mysql
Shyam,
Я думаю, что вы недоразумение. Я уже использую репликацию с RDS. Мой вопрос заключается в том, как разделить операции чтения Joomla на эту реплику чтения.
Том
0

Другой вариант улучшения скорости - это поставить Nginx перед ним в качестве обратного прокси. Это уменьшит доступ к базе данных, так как общие страницы никогда не перейдут на joomla, и MySQL не сможет найти конфигурацию прокси, но это базовая настройка

http://docs.joomla.org/Nginx

http://www.nginxtips.com/nginx-joomla-friendly-url/

/programming/23960359/how-to-get-nginx-proxy-caching-to-work-with-dynamic-content

https://stackoverflow.com/a/2655023/6096

tristanbailey
источник