WordPress je nejpoužívanější redakční systém na světě. Dokáže toho zvládnout opravdu hodně. Jednou na něm velké a známé weby a co je nejlepší rozchodíte ho na běžném hostingu za 25 Kč na měsíc. Ovšem všechno má své meze. Opravdu velké instalace začnou mít problémy ne kvůli WordPress ale prostě protože je jsou velké. A co je velké? Představte si magazín, který má třeba 100 tisíc příspěvků.
Nasaďte služby třetích stran, kde to jen jde
Běžným zabijákem velkých WordPress instalací je vyhledávání. Přesně tak to nenápadné pole, které si každý webmáster někam na stránku umístí. Za normálních okolností je zátěž zanedbatelná, protože se pro něj nedá použít cache. Dostanete se na desetiny vteřin. Jenomže u takto obrovských instalací už jste na vteřinách, záleží za jak dlouho je schopný WordPress v databázi najít výsledek. Nejhorší variantou je, pokud dané slovo nemůže najít, což se stává hlavně u překlepů. Při vyhledávání totiž WordPress zkouší v databázi hledat několikrát na základě LIKE. Když není úspěšný zkouší několik variant. U velkých tabulek je to opravdu znát a server to pocítí. Řešení je jednoduché, prostě vyhledávání vypněte a nahraďte jej Google Custom Search.
Pozor na ORDER BY RAND()
ORDER BY RAND() obsahují SQL dotazy na databází, které mají vrátit náhodný výsledek. Používá se u některých šablon a pluginů. Například výběr náhodných článků, které by se mohli návštěvníkovi líbit. Tohle je však u instalace se 100 tisíci posty neuvěřitelná zátěž. Je třeba se toho zbavit jak z pluginů, tak i šablon.
Problémem jsou roboti
Roboti, kteří prochází nonstop weby jsou neuvěřitelným žroutem výkonu serverů. Prochází jednu stránku za druhou a vytěžují cachovací pluginy, které musí ke každé volané stránce vytvářet její cachovanou verzi. Tedy 100 tisíc postů může znamenat 100 tisíc cachovaných stránek během třeba půl hodiny. Přitom čím známější váš web je tím více robotů přitáhne. Čistě v hitech (impresích) většinou v pohodě předběhnou uživatele. Zde je řešení více. Roboty, co poslouchají robots.txt omezit přes něj, těm důležitým (Googlebot, Seznambot) dát výjimku a ty neposlušné banovat při přílišné aktivitě.
Roboti také bezmyšlenkovitě následují všechno na co narazí. WordPress ke všemu vytváří odkazy. Například v základní verzi je možné dostat se na každý komentář samostatně. Většinou se vytvoří:
comment-page-X/#comment-YYYYY
Pod každým komentářem je i odkaz na odpověď:
.../?replytocom=YYYYY#respond
To jsou odkazy na které roboti budou zkoušet přistupovat a pokaždé zatíží cachovací plugin. Z každým komentářem tak vzniká další varianta dané stránky.
Řešením je umravnit roboty přes robots.txt, odstranit tyto URL anebo zvolit externí řešení. Teoreticky se nabízí i možnost využit javascript a Ajax.
Pokročilá řešení
Samozřejmě takovéto weby budou daleko více zatížené ve špičkách. Takže je třeba efektivně cachovat zvláště často používané stránky jako třeba domovskou stránku, RSS feed a samozřejmě i aktuální posty. Je to o konfiguraci cachovacího pluginu. Na zvážení je i použití Varnish. Zvláště pokud předpokládáte tisíce impresí za vteřinu.
Co se týká samotného hardware, hodně vše ulehčí, pokud můžete databáze včetně indexů umístit přímo do RAM. Jestli tolik paměti nemáte k dispozici, tak na databázi lze použít SSD, které jsou oproti klasickým plotnovým diskům znatelně rychlejší.