Oglądając opisy przeróżnych platform sklepowych – zauważyłem, że kilka przymiotników zawsze się powtarza: skalowalna, elastyczna … Jako, że my w Divante zawsze mieliśmy hopla na punkcie wydajności i skalowalności, intryguje mnie to w jakim sensie platforma jest skalowalna?

Gdy zaczynam czytać opisy techniczne tych programów, zazwyczaj okazuje się, że owa skalowalność to nie możliwość obsługi (realnie) zwiększającego się wolumenu ruchu na serwisie, tylko raczej bliżej nie określona możliwość .. dodawania produktów, nowych kategorii (!) albo funkcji.

Ale co zrobić, jeśli nasz serwis naprawdę staje się popularny i zaczyna nam zależeć na skalowalności technicznej?  Co zrobić, aby nie tracić nowych klientów w przypadku, tylko móc ich liniowo obsługiwać coraz więcej?

W 2007 roku przygotowałem taką prezentacje Pocałunek śmierci – skalowalność serwisów Web 2.0.

Od tego czasu w Divante z profilu Internet Software House przeszliśmy do wspierania eCommerce. W międzyczasie stworzyliśmy system dystrybucji treści i akceleracji WWW – SimpleStorage oraz mieliśmy ciekawe doświadczenia z wydajnością Promoring.pl.

Na bazie tych doświadczeń – jakie są najefektywniejsze rozwiązania skalowalności dla eCommerce? Najefektywniejsze czyli: można je zastosować szybko, nie wymagają dużo prac, dają duży efekt.

  1. Stosuj Cache tam gdzie to tylko możliwe – strony produktów, listy produktów no i wszystkie strony na które idzie ruch z kampanii – strona główna, landing Page itd. Praktycznie nie ma platformy e-commerce która nie wspiera jakiegoś rodzaju cache. W eCommerce trzeba tylko pamiętać aby z cachem nie przesadzać – ceny zawsze muszą pokazywać się aktualne itd.
  2. Odciąż serwery aplikacji – większość startujących sklepów serwuje wszystkie zdjęcia, pliki JS, CSS z jednego serwera – serwera aplikacji. Którym najczęściej jest niezoptymalizowany pod tym kątem Apache. Jeśli już to zastosujmy szybszy Lighttpd albo nginx. PHP – najlepiej przez FCGI (a jeszcze lepiej PHP-FPM). Docelowo sklepy uruchamiają hosty pt. http://images.sklep.pl albo ambitniej – http://im01.sklep.pl … Moim zdaniem lepiej skorzystać od razu z CDN – CloudFront albo SimpleStorage.pl (z opcją serwerów źródłowych – akceleracja wybranych katalogów). W przypadku naszego wdrożenia Solar np. przez wykorzystanie CDN nadal mamy 1 serwer aplikacji – ale już 3 serwery serwujące pliki statyczne.
  3. Jeśli nie chcesz lub nie możesz korzystać z CDN zainstaluj sobie Reverse Proxy – np. Varnish. Varnish ma świetne możliwości, wykorzystujemy go w SimpleStorage (po zmianach).
  4. Zainstaluj mod_pagespeed. Instalacja i konfiguracja zajmuje chwilę a moduł potrafi ładnie zoptymalizować nagłówki serwisu, zmniejszyć ilość requestów itp. To ważne, daje ostatni szlif i pozwala cieszyć się lepszą pozycją w badaniu PageSpeed.
  5. Stosuj osobny serwer bazy danych – koniecznie z dyskami SSD.
  6. Wynajmij dobrego administratora żeby tuningował bazę danych MySQL, bufory dyskowe i inne. Optymalizacja przez dodawanie sprzętu i serwerów jest OK ale moim zdaniem najpierw trzeba zrobić wszystko co możliwe na tym sprzęcie który się ma. Tak mnie uczyli na politechnice ;P
  7. Trzymaj sesje w bazie danych albo w Memcached – wtedy można dodawać serwery aplikacji. Jeśli nie możesz tego zrobić (nie wiem dlaczego nie mógłbyś :-)) – to musisz stosować load balancing z obsługą Sticki-sessions.
  8. Dodawaj serwery aplikacji. Bo to można zrobić łatwo. W przypadku eCommerce wiele czynności jest wykonywanych w warstwie aplikacji – koszyki, ścieżki zakupowe, rabaty itp. – oczywiście zależy od architektury systemu.
  9. Wybieraj dobre oprogramowanie – ta rada – tylko jeśli zaczynasz. Warto przeczytać na starcie White-papers dotyczące wydajności aplikacji i jej architektury: czy wspiera cache, czy wspiera load-balancing www (sesje), jaka jest charakterystyka czasów odpowiedzi przy zwiększającym się obciążeniu ruchem i produktami.
  10. Testuj – moim zdaniem każdy krok zwiększający koszty projektu powinien opierać się na testach: przed (czy jest potrzebny), po (czy pomógł). Zwłaszcza w IT – ale dotyczy to generalnie każdego aspektu eCommerce (usability, technik sprzedażowych itd).
Więcej o Reverse Proxies, cacheowaniu i odciążaniu aplikacji – już dla prawdziwych tech-fanatyków w naszej prezentacji o SimpleStorage poniżej.