Son zamanlarda hakkında çok şey söylendi Statik sitelerin yararları . Ancak birçok durumda dinamik bir yaklaşım bir zorunluluktur. Bir içerik yönetim sistemi, bir müşteri ilişkileri aracı veya çevrimiçi mağaza olsun, son kullanıcıların karmaşık siteleri hızlı ve tutarlı bir şekilde sürdürmelerine izin veriyorlar. Ve düzgün bir şekilde bir araya getirildiğinde, statik sitelere hız için rakip olabilirler.
Sık sık okumak ve yazması gereken herhangi bir uygulama fark edilebilir bir gecikmeye neden olur
Hangi sistemi kullanırsanız kullanın, dinamik siteler tipik olarak benzer öğelerden oluşur. Bunlar bir veya daha fazla programlama dilinde yazılmış bir web sunucusu, bir arka uç ve bir uygulama biçimidir. Bileşenlerin bu kombinasyonu, büyük bir esneklik sağlar, ancak her biri kendi genel yüküne katkıda bulunur ve tüm modern web sitelerinin kaçınmak istediği bir şey yük süresini artırır. Bu özellikle veritabanı erişimi ile doğrudur, sık sık okunması ve yazılması gereken uygulamalar kayda değer bir gecikmeye neden olur.
Bu, kullanım durumunuz için önbelleğe alma ve uygun bir önbellekleme stratejisinin yardımcı olacağı yerlerdir. Önbelleğe almanın temel amacı, uygulama veritabanı katmanları arasında gereksiz sıklıkta yapılan çağrıları engellemek ve bunun yerine bir tarayıcıda daha hızlı oluşturulacak önceden oluşturulmuş statik HTML sayfalarını kullanmaktır.
Herhangi bir web kullanıcısının fark edeceği ilk önbellek, tarayıcılarındaki önbellektir. Geliştiriciler, değişiklikleri görmek için kaç kez "zorla yenilemek" gerektiğini sordular? Tarayıcı önbellekleri basit ancak önbellekleme kavramlarını açıklamaya başlamak için iyi bir başlangıç noktasıdır. Bir tarayıcı, bir kullanıcının bilgisayarında ziyaret edilen web sayfalarının temsillerini depolar, genellikle değişiklikler site tarafından algılanır veya zorlanırsa, genellikle oturum başına bir kez güncelleştirilir.
Site sahipleri ve yöneticileri tarafından kullanılan yaygın bir araç, bir web tarayıcısı ve web uygulaması tarafından yapılan sayfa istekleri arasında yer alan bir 'ters proxy önbellek'dir. İstekleri engeller ve sayfaların kopyalarını doğrudan önbellekten oluşturur, böylece fark edilir bir hız artışı sağlar.
Kendiliğinden yükleme veya 'Hizmet Olarak Yazılım' olarak kullanılabilen birkaç önemli proxy önbellek seçeneği vardır. (İhtiyacınız olan her şeyi kendi kendine yeten bir web yığınına paketleyen bulut barındırma sağlayıcılarını görmezden geliyoruz.)
Popüler proxy önbellek seçenekleri şunları içerir:
Önbelleğe alma için SaaS seçenekleri genellikle, bir kullanıcı ve bir web yığını arasında bir önbellek koymak yerine, içerik dağıtım ağları dünyasında (CDN'ler) yer alır; bunlar, kullanıcılara coğrafi olarak kendilerine en yakın olan önbelleğe alınmış içerik kümelerini sunar. Bu ince bir fark, ancak küresel kitlelere sahip büyük siteler için önemli bir fark yaratabilir.
vernik tüm Linux paket yöneticilerinde, Docker görüntüsü ve diğer pek çok seçenek olarak mevcuttur. projenin kurulum sayfası daha fazla ayrıntı için.
Vernik, /usr/local/etc/varnish/default.vcl veya /etc/varnish/default.vcl adresinde bulunan bir varsayılan yapılandırma dosyasını VCL (Vernik Yapılandırma Dili). Bu konfigürasyon dosyası, hızı daha da artırmak için C yorumlayıcı ile küçük bir programda derlenmiştir.
Vernik'i nasıl kurduğunuza bağlı olarak, yapılandırma dosyası şuna benzer bir şeye benzeyecektir:
backend default {.host = "127.0.0.1";.port = "8000";}
En basit haliyle, bu, Varnish tarafından kullanılan varsayılan içeriği, ana makine ve bağlantı noktasını tanımlayıp içeriği dinlemesi gerektiğini tanımlar.
Bir arka ucun hala sağlıklı olması durumunda, Vernik'in kullanışlı bir özelliği önceden tanımlanmış aralıklarla kontrol ediliyor. 'Backend Polling' olarak adlandırılır ve arka uç bildirimi içine bir prob bölümü ekleyerek yapılandırılır:
.probe = {.url = '/';.timeout = 34ms;.interval = 1s;.window = 10;.threshold = 8;}
Yukarıdakiler Varnish tarafından sağlanan varsayılan ayarlardır ve belirli bir .url her .intervalı ziyaret etmesini söylerler ve en azından .window probları dışında eşik değerlere ulaşırlarsa , url, milisaniye cinsinden saniye cinsinden yanıt verir, arka uç yine de sağlıklı kabul edilir. Bir kez 'sağlıksız' olarak düşünüldüğünde, içerik önceden tanımlanmış bir süre için önbellekten sunulur.
Her platform seçeneğinin altındaki Varnish konfigürasyonunda belirli değişiklikleri ele alacağız, şimdilik genel seçeneklere göz atalım.
Limanlar
Başlangıçta web sunucunuzun portunun varsayılandan değiştirilmesi gerekecektir. Örneğin Apache Vhost yapılandırmasında portu 81 veya 8080 olarak değiştirin.
Vernik arka planını vernik komutuyla veya bir servis ambalajı kullanarak başlatın. Daemon, en yaygın ve kullanışlı olan bayrak seçeneklerine sahiptir:
Her şey kontrol ediliyor
Varnishstat komutunu çalıştırın veya ziyaret edin isvarnishworking.com Vernik sunucunuzu kontrol etmek için hazır ve istekleri dinliyor.
Önbelleğe alınamayan ne
Bir sitenin önbelleğe almak istemediğimiz bazı bölümleri vardır, örneğin yönetim sayfaları. Önbelleğe almamanızı tanımlayan bir if ifadesi içeren default.vcl dosyasında bir vcl_recv alt yordamı oluşturarak bunları hariç tutabiliriz:
sub vcl_recv {# URI of admin folderif (req.url ~ "^/url/"){return (pass);}return(lookup);}
Eğer Vernik 4'ü kullanıyorsanız, geri dönüş değerleri de dahil olmak üzere işler biraz farklıdır. Vcl_recv işlevi şimdi bir arama yerine ahash değerini döndürür.
sub vcl_recv {...return(hash);}
Bu, aynı zamanda, Varnish'in if deyimine req.http.host ~ 'example.com' ekleyerek göz ardı etmesi gereken siteleri veya alt etki alanlarını belirlediğimiz yerdir.
Kurabiye
Varsayılan olarak Varnish, çerezleri ayarlayan arka ucun içeriğini önbelleğe almaz. Benzer şekilde, eğer müşteri bir çerez gönderirse, Vernik düz arka tarafa geçecektir.
Çerezler, kullanıcı etkinliklerini izlemek ve kullanıcıya özel değerleri depolamak için sıklıkla siteler tarafından kullanılır. Genel olarak bu çerezler sadece müşteri tarafı kodunun ilgisini çeker ve arka tarafa veya Verniğe ilgi göstermez. Varnish'e sitenin belirli alanları dışında çerezleri görmezden gelebileceğini söyleyebiliriz:
if ( !( req.url ~ ^/admin/) ) {unset req.http.Cookie;}
Bu if ifadesi, sitenin yönetici alanında bulunmadıkça çerezleri göz ardı eder, burada çerez geçişi daha fazla kullanılabilir (gerçekten site yöneticilerini engellemek istemediğiniz sürece).
Diğer istisnalar
Varnish, varsayılan bir kurulumla parola korumalı sayfaları, GET ve HEAD isteklerini de önbelleğe almaz.
Şimdi, Vernik: Drupal ve Magento için iki mükemmel kullanım örneğine bakacağız. Her ikisi de, teknik olmayan kullanıcıların çok çeşitli karmaşık görevleri üstlenmelerine izin veren oldukça dinamik sistemlerdir. Bu, veritabanı sorgusu-ağır sayfa yüklemelerine yol açabilir ve yoğun siteler kayda değer ölçüde yavaş olacaktır. Bu sistemlerle oluşturulan tipik sayfalar, sık ve sık güncellenen bir içerik karışımına sahip olacaktır.
Drupal, Varnish işlevine benzer işlevleri yerine getiren varsayılan önbelleğe alma seçeneklerine sahiptir, ancak daha büyük veya daha karmaşık sitelerin gerektirdiği esnekliği veya hız artışlarını sağlamaz.
Gerçek Drupal şekilde bir Vernik entegrasyonu için modül Yukarıda açıklanan manuel yapılandırmanın bazılarını kaydetmek için.
Modülü takın ve modülün Read Me dosyasında bulunan kurulum talimatlarını uyguladığınızdan emin olun.
/ Etc / default / varnish dosyasının aşağıdaki daemon seçeneklerine sahip olduğundan emin olun (ve girinti önemlidir):
DAEMON_OPTS="-a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s file,/var/lib/varnish/$INSTANCE/varnish_storage.bin,128M"
Apache ve herhangi bir ilişkili sanal ana bilgisayarın 80 değil 8080 numaralı bağlantı noktasında dinlendiğinden emin olun. Bu değişiklikleri yaptıktan sonra her iki hizmeti de yeniden başlatın.
Modül konfigürasyon sayfasında 'Vernik Kontrol Anahtarı' ayarlamanız gerekebilir. Bu anahtarın cat / etc / varnish / secret komutuyla ne olduğunu bulun ve ayarlar sayfasına yapıştırın. Doğru Vernik sürümünü seçin, ayarları kaydedin ve sayfanın alt kısmında bir dizi yeşil işaret görmelisiniz.
Vernik modülü varsayılan Drupal önbellek ayarları ile etkileşir, bu yüzden kullanım durumunuz için etkin ve yapılandırılmış olduğundan emin olun.
Komut satırından varnishstat'ı çalıştırın, siteyi anonim kullanıcı olarak gezinmeye başlayın ve komut çıktısında istatistiklerin değiştiğini görmelisiniz.
Drupal'da önbelleğe almak istemediğimiz yollardan biri yönetici sayfalarıdır, bunu bir vcl_recv alt rutini ile yapabiliriz:
sub vcl_recv {# URI of admin folderif (req.url ~ "^/admin/"){return (pass);}unset req.http.Cookie;return(lookup);}
Kullanıcı sayfalarını, sistem güncelleme sayfalarını ve ajax işlevini yaygın olarak kullanan bayrak gibi son derece dinamik modüller tarafından oluşturulan diğer sayfaları önbelleğe almama (giriş) yapmayı düşünebilirsiniz. İf deyimine daha fazla req.url parametresi ekleyerek bunu yapın.
Magento'nun varsayılan yüklemesi, belirli bir klasördeki site öğelerinin statik sürümlerini depolayan dahili bir önbellek sistemi ile birlikte gelir. Sistem -> Önbellek Yönetimi sayfası, geçerli önbellek durumunun bir özetini sunmanın yanı sıra tüm veya tek bileşen önbelleklerini temizlemenizi sağlar. Bu sayfadan toplanmış CSS ve JS dosyalarını ve otomatik oluşturulan görüntü dosyalarını temizleyebilirsiniz.
Magento'nun gelecek sürüm 2'si varsayılan olarak Vernik önbelleğe almayı destekleyecektir, ancak şimdilik 3. taraf eklentileri kullanmamız gerekiyor. Terebentin modülü . Okuduğunuzdan emin olun projenin benioku dosyası bazı ek yapılandırma adımlarını not ettiği için, bunları göz ardı etmek sitenizi bozabilir.
Turpentine modülü son derece yapılandırılabilir ve sizin için vcl dosyaları ve Vernik yapılandırmasında gerekli değişiklikleri yapar. Ayarlamak için bazı temel seçenekler şunlardır:
Turpentine modülü varsayılan Magento önbelleğine bağlanır, bu nedenle Vernik önbellek sayfasındaki önbelleklerin temizlenmesi ilgili Vernik önbelleklerini temizler.
Yukarıdaki dinamik sistemlerden herhangi biriyle Vernik kullanmanın yanı sıra, herhangi bir sitenin önbellek kabiliyetine yardımcı olacak diğer çeşitli ipuçlarını burada bulabilirsiniz.
Aynı içeriği farklı bağlamlarda sunuyorsanız, aynı URL'yi kullanmalıdır. Örneğin, CMS'nizin buna izin vermesine rağmen, article.html , article.htm ve makalenin kullanımını karıştırmayın. Bu, aynı içeriğin üç farklı önbelleğe alınmış sürümüne yol açacaktır.
Yukarıda gördüğümüz gibi, çerezleri önbelleklemek zordur ve düşündüğümüz kadar nadiren gereklidir. Kullanımlarını ve sayılarını dinamik sayfalarla sınırlamaya çalışın.
Site varlıklarının yüklenmesi, sayfanın oluşturulmasının en çok zaman alan parçalarından biri olabilir ve bu yükü azaltmak için basit ipuçları vardır:
Birden fazla küçük dosya yerine ikonografi için CSS Image sprite kullanımı, daha az ağ trafiğine neden olur.
CSS ve JavaScript kütüphanelerini yerel olarak barındırma yerel olarak daha az ağ trafiği ve önbellekleme stratejileri üzerinde daha fazla kontrol anlamına gelir. Bu, bu varlıkları güncel tutmak için bakım ek yükündeki bir artış anlamına gelebilir. Bu varlıkları sürekli olarak adlandırılmış klasörlerde depolayın, böylece referanslar tutarlı olabilir.
Dinamik sitelerinizi önbelleğe alma ile hızlandırmaya yönelik bu girişin yararlı olduğunu umuyorum. Performans kazancı, ilk yapılandırma, deneme ve ayarlama dönemine değer. Bu kısa süreli dikkat ve sabırsızlık döneminde, kurulumunuzdan kopacak hız kazancı, kullanıcılarınız ve rekabetiniz arasındaki farkı yaratacaktır.