Próbuję znaleźć sposób na poprawę wydajności Magento, gdy liczba stron / sklepów przekracza 1k, a moim celem jest około 10k. Oto kilka pytań; wszelkie wskazówki / pomoc są bardzo mile widziane!
Dodawanie nowych stron / sklepów jest powolne;
Komentuję $ this-> cleanModelCache () w _afterSave () w Mage_Core_Model_Abstract i sytuacja wydaje się lepsza, ale staje się coraz wolniejsza wraz ze wzrostem liczby stron / sklepów. I nie wiem, co wpłynęłoby na cały system w przyszłości.Połączenia API stają się wolne.
Jednym z głównych procesów jest składanie zamówień; mój dostosowany model zajmuje się tym przez przetwarzanie niektórych danych, a przede wszystkim za pomocą modeli sprzedaż / oferta i modele sprzedaż / obsługa_wysyłka. Proces rozpoczyna się od Oauth. Zarówno Oauth, jak i składanie zamówień trwa dłużej, gdy rośnie liczba witryn / sklepów, a zużycie pamięci wydaje się większe. Czy to ma coś wspólnego z tym, że Mage ładuje plik XML konfiguracji, a fakt, że dane konfiguracyjne stają się większe wraz ze wzrostem liczby stron internetowych?Otwieranie n98-magerun dev: konsola trwa dłużej; nie znam przyczyny.
Zapisywanie konfiguracji z panelu administracyjnego trwa dłużej; nie wiem jak to poprawić.
Czy można zrekonstruować sposób, w jaki Magento generuje i ładuje dane konfiguracyjne, aby zmniejszyć zużycie pamięci? Czy to jeden z czynników powodujących problemy z wydajnością w mojej sytuacji?
Obecna instancja Magento: Wersja = Magento EE 1.14.2.4;
Skonfiguruj pamięć podręczną; inne buforowanie wyłączone;
Korzystanie z Mysql 5.6 i MongoDB (dla katalog_kategorii_cena, katalog_produktu_produkcja, strona_rdzenia);
liczba stron internetowych = liczba sklepów = liczba wyświetleń = 1024;
liczba produktów = 4501;
Z góry dziękuję wszystkim!
źródło
Odpowiedzi:
Jednym z powodów, dla których zwalnia, jest to, że konfiguracja dla każdego sklepu jest zduplikowana z / config / sites i / config / global, a kod do tego nie jest co najmniej wydajny. Każda zmiana ustawienia może spowodować kilka 10 minut, jeśli nie godzin, zmniejszonej wydajności i przepustowości. Zwiększenie wydajności będzie zasadniczo oznaczało, że Ben Marks przyjdzie za tobą ... i nie w dobry sposób.
JEŻELI zamierzasz zejść tą drogą, najłatwiej byłoby mieć 10k instalacji Magento i mieć jakiegoś pośrednika, który deleguje zapytania na odpowiednią stronę internetową. Oczywiście będzie to zależeć od rzeczywistego przypadku użycia.
[dodany]
W zależności od przypadku użycia możesz używać kategorii jako pseudo sklepów. Technicznie możesz następnie użyć układu XML, aby zmienić temat na sklep. Ale wtedy wpadniesz na ograniczenie kasy. Wszystkie sklepy będą musiały udostępnić kasę.
Tak czy inaczej, 10k sklepów Magento jest wykonalnych, ponieważ nie jest to niemożliwe. Ale będzie to trudna droga, niezależnie od wybranej ścieżki.
źródło
Możesz spróbować zhakować rdzeń i włączyć podział pamięci podręcznej witryny. Możesz spróbować zhakować bazę danych i zapisać informacje o konfiguracji w pamięci. Możesz spróbować zamienić pamięć podręczną konfiguracji na coś mądrzejszego - powiedzmy buforowanie informacji z plików xml [które są statyczne i dotyczą wszystkich stron internetowych i sklepów] podczas dynamicznego pobierania danych zastępujących.
Jestem facetem od serwera, więc poszedłbym do zepsucia bazy danych. Zwłaszcza, że jest to trywialne.
Jeśli masz kontrolę nad serwerem bazy danych: Zmień nazwę tabeli core_config_data na core_config_data_offline Utwórz nową tabelę core_config_data za pomocą silnika pamięci MEMORY http://dev.mysql.com/doc/refman/5.7/en/memory-storage-engine.html Skopiuj wszystkie dane z core_config_data_offline do core_config_data
Skonfiguruj zadanie cron, aby sprawdzić, czy istnieje core_config_data, czy kopiuje stamtąd wszystkie dane do core_config_data_offline. Jeśli nie, utwórz go i skopiuj wszystko z core_config_data_offline do core_config_data
Wyłącz pamięć podręczną konfiguracji. Gdy pamięć podręczna konfiguracji jest włączona, zwiększa się wydajność tylko przy pierwszym czytaniu danych konfiguracji z bazy danych - po tym są one w pamięci podręcznej i cierpisz. Z drugiej strony pliki xml nie są już buforowane, więc wymieniono uderzenie wydajności odserializowania ogromnych danych konfiguracyjnych na uderzenie wydajności podczas analizowania kilku plików xml.
Możesz także poeksperymentować ze zmianą pliku Mage / Core / Model / Config.php i włączyć indywidualne pamięci podręczne witryn. Domyślnie dane konfiguracji każdego sklepu są buforowane indywidualnie. Wszystkie dane konfiguracyjne serwisu są buforowane w jednym obiekcie.
Zauważ, że dotyczy to tylko konfiguracji zastępującej [ustawienia administratora]. Więc jeśli wykonasz wszystkie zmiany konfiguracji na poziomie sklepu, który już ustawiłeś. Jeśli używasz „dziedziczenia z witryny” i dokonujesz większości zmian konfiguracji specyficznych dla sklepu na poziomie witryny - pamięć podręczna zawiera każdą witrynę. Dzieląc go możesz znacznie lepiej go wyłamać. chroniony $ _cacheSections = array ('admin' => 0, 'adminhtml' => 0, 'crontab' => 0, 'install' => 0, 'przechowuje' => 1, 'strony internetowe => 0);
do
źródło