Skalieren von Joomla mit Datenbank-Lese- / Schreibaufteilung


9

Ich habe einen MySQL-Server in Nordamerika (mit Amazon RDS) und eine Lesereplik. Ich habe auch eine Lesereplik für eine neue Region - Australien.

Der australische Server ist aufgrund der Dynamik von Joomla, die den Haupt-DB-Server in Nordamerika abliest, brutal langsam. Ich habe versucht, einen MySQL-Proxy zu verwenden, um das Lesen / Schreiben aufzuteilen, aber das ist keine langfristige Lösung. MySQL-Proxy scheint praktisch tot zu sein.

Welche anderen Optionen habe ich?

Antworten:


2

Joomla (und andere ähnliche CMS) wurden für eine LAMP-Architektur unter Berücksichtigung des gemeinsamen Hostings entwickelt. ZB geringe Latenz zwischen Webserver und Datenbank.

Amazon RDS wurde entwickelt, um eine relationale Datenbank in der Cloud zu skalieren. Da regionale Verteilung und Redundanz wichtig sind, werden höhere Lantenzen erwartet.

Wenn Sie spezielle Anforderungen an Amazon RDS haben, können Sie Folgendes konfigurieren:

  • Joomla mit einem lokalen MySQL für die allgemeine Site-Verwaltung (statische Assets, einfach zu replizieren)
  • Amazon RDS-Verbindung, eine anwendungsspezifische Verbindung für Ihre Entwicklung

Erweiterungen von Drittanbietern, die mit Blick auf eine geringe Latenz entwickelt wurden, funktionieren nicht mit Amazon RDS.


Nicht sicher, ob ich Ihre beiden Punkte verstehe? Ich werde weiterhin RDS verwenden. Schlagen Sie also ein Master-RDS in Australien vor? Außerdem kann ich mit meinen benutzerdefinierten Komponenten sicher eine RDS-Verbindung mit dem Lesereplikat nutzen, jedoch nicht mit dem Joomla-Kern. Sie sind sich also nicht sicher, was Sie unter einer anwendungsspezifischen Verbindung verstehen. Können Sie bitte näher darauf eingehen?
Tom

2

Wenn Sie eine anständige aktuelle Version von PHP verwenden, verwenden Sie wahrscheinlich den PHP-MySQL-Treiber. http://us3.php.net/manual/en/book.mysqlnd.php

Mysqlnd verfügt über eine benutzerdefinierte Plugin-API und kann auf die gleiche Weise wie der MySQL-Proxy funktionieren. Beispielsweise ist http://pecl.php.net/package/mysqlnd_ms ein Plugin, das Lese- und Schreibvorgänge aufteilt und eine aktuelle offizielle Version 9/2013 hatte

Denken Sie auch daran, dass Joomla immer in die Sitzungstabelle schreibt. Bei Verwendung von memcache oder apc werden nur die Sitzungsdaten im Cache gespeichert - nicht die Sitzungsmetadaten.

Sie können den gleichen Leistungsschub erzielen, indem Sie Ihre Tabelle #_sessions löschen und sie mithilfe der Speicherdaten-Engine anstelle von innodb oder myisam neu erstellen.


1

Jede von Joomla generierte Seite muss in die Sitzungstabelle geschrieben werden.

Daher würde ich vorschlagen, memcache oder apc für die Sitzungsverwaltung zu verwenden. Dies sollte Ihnen dabei helfen, keine Daten in die Datenbank zu schreiben. Daher ist eine Lesereplik für die meisten Seiten ausreichend.


Das ist ein ausgezeichneter Punkt. Das hilft beim Schreiben, aber was wirklich wichtig ist, ist, wie ich das Lesereplikat für Joomlas Kern verwende. Im Moment sehe ich nur MySQL-Proxy oder das Hacken des Kerns als Optionen. Ich nehme an, HAproxy ist auch eine Option, aber das ist nicht so klar.
Tom

1. AWS selbst unterstützt die Replikation ( aws.amazon.com/rds/faqs/#replication ) 2. Eine andere Option ist die in
Shyam

Ich denke du missverstehst. Ich verwende bereits die Replikation mit RDS. Meine Frage ist, wie ich die Joomla-Lesevorgänge auf dieses Lesereplikat aufteilen kann.
Tom

0

Eine weitere Option zur Geschwindigkeitsverbesserung wäre, Nginx als Reverse-Proxy davor zu stellen. Dies würde viel Datenbankzugriff reduzieren, da die allgemeinen Seiten niemals an joomla und mysql gehen würden. Die Proxy-Konfiguration kann nicht gefunden werden, aber dies sind die Basis-Setups

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

/programming//a/2655023/6096

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.