CDN Cache & Preload to plugin dla Craft CMS 3, 4 i 5, który łączy publikację treści z czyszczeniem oraz ponownym rozgrzewaniem cache. Rozszerzenie obsługuje środowiska korzystające z Varnisha, Cloudflare i kolejki zadań Craft CMS.
Stack: Craft CMS, PHP, Twig, Varnish Cache, Cloudflare, Composer, Craft Job Queue, GitHub
Cache pozwala ograniczyć liczbę żądań trafiających do PHP, bazy danych i systemu CMS. Pojawia się jednak drugi problem: po zmianie treści trzeba usunąć nieaktualną odpowiedź, a następnie ponownie pobrać najważniejsze adresy URL.
Przy ręcznej obsłudze łatwo pominąć część podstron, pozostawić nieaktualną wersję w jednej z warstw albo wyczyścić cały cache mimo zmiany dotyczącej tylko wybranych adresów.
W środowisku korzystającym jednocześnie z Varnisha i Cloudflare proces musi uwzględniać obie warstwy. Samo wyczyszczenie cache na serwerze nie wystarczy, jeżeli wcześniejsza odpowiedź nadal znajduje się na brzegu sieci Cloudflare.
Zaprojektowałem i stworzyłem plugin CDN Cache & Preload dla Craft CMS. Odpowiadałem za integrację ze zdarzeniami CMS-a, komunikację z Varnishem i Cloudflare, obsługę sitemap, mechanizm kolejki oraz konfigurację wykluczeń.
Przygotowałem również instalację przez Composer, konfigurację pluginu, dokumentację oraz publiczne wydania w Craft Plugin Store i na GitHubie.
Po zmianie treści rozszerzenie może uruchomić uporządkowany proces odświeżania cache:
Plugin może wysyłać żądania czyszczące do Varnisha oraz korzystać z API Cloudflare. Pozwala to odświeżyć cache po zmianie treści bez ręcznego logowania się do kilku oddzielnych paneli.
Zakres czyszczenia zależy od konfiguracji. W środowisku produkcyjnym należy unikać bezwarunkowego usuwania całego cache po każdej drobnej zmianie, jeżeli możliwe jest wskazanie węższego zestawu adresów.
Po wyczyszczeniu cache pierwsze wejście na stronę zwykle trafia do aplikacji i dopiero tworzy nową odpowiedź. Przy większym serwisie oznacza to, że użytkownicy mogą kolejno rozgrzewać podstrony własnymi wizytami.
CDN Cache & Preload może pobrać adresy z pliku sitemap.xml i przekazać je do procesu preloadu. Dzięki temu najważniejsze strony są ponownie pobierane po zmianie treści.
Rozwiązanie nie zakłada, że każdy adres z mapy musi być zawsze rozgrzewany. Przy większej liczbie podstron zakres preloadu powinien uwzględniać obciążenie serwera, limity usług zewnętrznych i częstotliwość publikacji.
Czyszczenie i pobieranie wielu adresów nie powinno blokować zapisania wpisu w panelu administracyjnym. Dlatego cięższe operacje mogą być przekazywane do kolejki zadań Craft CMS.
Panel redakcyjny może zakończyć zapis treści, a kolejne żądania są wykonywane asynchronicznie. Stan operacji można następnie sprawdzić w kolejce oraz logach aplikacji.
Nie każdy adres powinien być czyszczony lub automatycznie pobierany. Dotyczy to między innymi stron zależnych od sesji, parametrów zapytania, panelu użytkownika albo podstron generowanych dynamicznie.
Plugin pozwala pomijać wybrane adresy na podstawie reguł REGEX. Konfiguracja wykluczeń powinna być sprawdzona na danych z konkretnego serwisu, ponieważ zbyt szeroka reguła może wyłączyć z preloadu istotną część strony.
Rozszerzenie pozwala również przygotować operacje dla wskazanych adresów i uruchamiać je z opóźnieniem. Jest to przydatne wtedy, gdy treść zależy od późniejszego przetwarzania, generowania dodatkowych zasobów albo aktualizacji wykonywanej przez inne zadanie.
Rozszerzenie jest przeznaczone dla stron Craft CMS, które korzystają z jednej lub kilku zewnętrznych warstw cache i wymagają przewidywalnego odświeżania treści po publikacji zmian.
Plugin można zainstalować w projekcie Craft CMS za pomocą Composera:
composer require cooltronicpl/varnishcache
Po instalacji trzeba skonfigurować wykorzystywane warstwy cache, dane dostępowe do usług zewnętrznych oraz zasady preloadu i wykluczeń.
Po wdrożeniu warto sprawdzić osobno każdy etap procesu:
Stan cache można dodatkowo sprawdzić na podstawie nagłówków HTTP oraz logów Varnisha, Cloudflare i Craft CMS. Dokładne nazwy nagłówków zależą od konfiguracji środowiska.
Plugin nie zastępuje poprawnej konfiguracji Varnisha, Cloudflare ani serwera WWW. Jeżeli warstwa cache nie obsługuje żądań czyszczących albo reguły VCL są nieprawidłowe, samo zainstalowanie rozszerzenia nie rozwiąże problemu.
Preload dużej liczby adresów może zwiększyć obciążenie backendu. Liczbę jednoczesnych zadań, zakres sitemap i częstotliwość uruchamiania należy dopasować do zasobów serwera.
W przypadku stron zależnych od cookies, sesji lub danych użytkownika trzeba również upewnić się, że dynamiczne odpowiedzi nie są przechowywane w publicznym cache.
Projekt open source jest dostępny dla Craft CMS 3, 4 i 5. Aktualny status utrzymania, obsługiwane wersje oraz informacje o zmianach są publikowane w repozytorium i Craft Plugin Store.
Kod projektu oraz dokumentacja są dostępne publicznie:






Jeżeli strona korzysta z Varnisha, Cloudflare albo kilku warstw cache jednocześnie, opisz obecną konfigurację, sposób publikacji treści i problem z odświeżaniem stron.