Inżynierska rzeczywistość.
Często dostajemy takie zgłoszenie: czasy ładowania stron są w porządku na stagingu, fatalne na produkcji, a wszyscy wskazują na platformę. Zwykle to nie platforma.
Wystarczy otworzyć wykres kaskadowy żądań wolnego checkoutu, a zobaczą Państwo, że Magento czeka — na ERP ze stanami magazynowymi, na bramkę płatności bez limitu czasu, na API wysyłek wywoływane osobno dla każdej pozycji zamiast raz dla całego koszyka. Czasem zadanie synchronizacji PIM zablokowało dokładnie te tabele, z których musi czytać sklep, a uruchomiło się we wtorek o 14:00, bo nikt nie zaplanował go z uwzględnieniem realnego ruchu.
Samo Magento radzi sobie z tym wszystkim dobrze w testach wydajności. Wystarczy jednak dodać trzy lub cztery prawdziwe integracje, każdą z własnymi opóźnieniami i sposobami awarii, a rachunek zmienia się całkowicie.
Tak naprawdę żadna z tych rzeczy nie jest błędem. To decyzje, które miały sens, gdy sklep miał mniejszy ruch i nikt nie przyglądał się lukom między systemami. Po prostu przestają się sprawdzać, gdy sklep rośnie.
Co zwykle pomaga: cache'owanie wszystkiego, co nie musi być aktualne co do sekundy, circuit breaker przed wywołaniami zewnętrznymi, grupowanie zapytań o wysyłkę i ceny zamiast wysyłania ich osobno dla każdej pozycji oraz przeniesienie zadań synchronizacji na godziny, w których nikt nie robi zakupów.