Skalowanie Joomla z dzieleniem zapisu do odczytu bazy danych

9

Mam serwer MySQL w Ameryce Północnej (korzystający z Amazon RDS) i replikę odczytu. Mam też replikę do odczytu dla nowego regionu - Australii.

Serwer australijski jest brutalnie wolny z powodu dynamicznej natury Joomla, która odczytuje główny serwer DB w N.America. Próbowałem użyć proxy mysql do tego, aby podzielić odczyt / zapis, ale to nie jest długoterminowe rozwiązanie. Serwer proxy MySQL wydaje się być faktycznie martwy.

Jakie inne opcje mam?

Tomek
źródło

Odpowiedzi:

2

Joomla (i inne podobne CMS) zostały opracowane dla architektury LAMP, z myślą o wspólnym hostingu. Np. Małe opóźnienie między serwerem WWW a bazą danych.

Usługa Amazon RDS została zaprojektowana do skalowania relacyjnej bazy danych w chmurze. Tak więc, ponieważ ważna jest regionalna dystrybucja i redundancja, oczekuje się wyższych lancencji.

Jeśli masz określone wymagania dotyczące Amazon RDS, możesz skonfigurować:

  • Joomla z lokalnym MySQL do ogólnego zarządzania witryną (zasoby statyczne, łatwe do replikacji)
  • Połączenie Amazon RDS, połączenie specyficzne dla aplikacji dla Twojego rozwoju

Rozszerzenia innych firm, opracowane z myślą o małych opóźnieniach, nie będą działać z Amazon RDS.

Anibal
źródło
Nie jesteś pewien, czy rozumiem twoje dwa punkty? Będę nadal używać RDS, więc sugerujesz Master RDS w Australii? Mogę też pewnie wykorzystać połączenie RDS z repliką odczytu z moimi niestandardowymi komponentami, ale nie z rdzeniem Joomla. Nie wiesz, co masz na myśli przez połączenie specyficzne dla aplikacji. Czy możesz proszę opracować?
Tom
2

Jeśli używasz całkiem nowej wersji PHP, prawdopodobnie używasz sterownika php mysqlnd. http://us3.php.net/manual/en/book.mysqlnd.php

Mysqlnd ma niestandardowy interfejs API wtyczki i może działać w ten sam sposób co proxy mysql - na przykład http://pecl.php.net/package/mysqlnd_ms to wtyczka, która dzieli odczyty i zapisy i miała ostatnią oficjalną wersję 9/2013

Pamiętaj też, że Joomla zawsze zapisuje do tabeli sesji. Używanie memcache lub apc po prostu przechowuje dane sesji w pamięci podręcznej - nie metadane sesji.

Możesz uzyskać ten sam wzrost wydajności, upuszczając tabelę #_sessions i odtwarzając ją ponownie za pomocą aparatu danych Memory zamiast innodb lub myisam.

garyamort
źródło
1

Każda strona wygenerowana przez Joomla będzie musiała pisać do tabeli sesji.

Sugerowałbym więc użycie memcache lub apc do zarządzania sesją. Powinno to pomóc w osiągnięciu zerowego zapisu do bazy danych, dlatego replika odczytu będzie wystarczająca dla większości stron.

Shyam
źródło
To jest doskonała uwaga. Pomoże to w zapisach, ale naprawdę ważne jest, jak korzystać z repliki odczytu dla rdzenia Joomla? W tej chwili widzę tylko opcje mysql proxy lub hakowanie rdzenia jako opcje. Przypuszczam, że HAproxy jest również opcją, ale nie jest to tak jasne.
Tom
1. Sam AWS obsługuje replikację ( aws.amazon.com/rds/faqs/#replication ) 2. Inną opcją jest wbudowana replikacja mysql
Shyam
Myślę, że nie rozumiesz. Już używam replikacji z RDS. Moje pytanie brzmi: w jaki sposób mogę podzielić operacje odczytu Joomla na tę replikę odczytu.
Tom
0

Inną opcją poprawy prędkości byłoby umieszczenie Nginx przed nim jako odwrotnego proxy. Spowodowałoby to ograniczenie dostępu do bazy danych, ponieważ wspólne strony nigdy nie trafiłyby do Joomla i mysql nie mógł znaleźć konfiguracji proxy, ale są to ustawienia podstawowe

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
źródło