VARNISH ile ÖLÇEKLENEBİLİR WEB.

Slides:



Advertisements
Benzer bir sunumlar
Ahmet DERVİŞ Ahmet DERVİŞ LKD Seminerleri Linux Kullanıcıları Derneği
Advertisements

Hüseyin Gömleksizoğlu
PHP VE MYSQL.
Bilgisayar Açılış Parola Talep İşlemleri
MIT504 İnternet ve Web Programlama: Javascript programlama devam Yrd. Doç. Dr. Yuriy Mishchenko.
IIS 6.0. Giriş  Geçtiğimiz yıllarda, Microsoft güvenlik açıkları nedeniyle IIS 4/5 üstünden bir çok saldırıya uğradı.  Bu sebepten Microsoft’un geliştirdiği.
Asp - Asp.Net Temel Özellikleri ve Örnek Uygulamalar
Websitelerinde Standartlar Açısından Dikkat Edilmesi Gereken Noktalar 1 Websitelerinde Standartlar Açısından Dikkat Edilmesi Gereken Noktalar Eser SAHiLLiOĞLU.tr.
TÜRKİYE ELEKTRONİK FON ALIM SATIM PLATFORMU
BLOG KULLANIM REHBERİ.  Giriş yapmadan blog üzerine bilgi ekleyemeyeceğinizi unutmayın. Açılan sayfada ilk önce kullanıcı adınızı ve şifrenizi girin.
WEB Tasarımı & .NET Bolum 1
YZM Yazılım Doğrulama ve Geçerlileme
HTTP’yi (istemci tarafı) kendi kendinize deneyin
İnternet Programcılığı
Web Host Manager (WHM) Nedir Ne İşe Yarar ?
Web Programlama Kursu Bu kurs ne değildir? Neyi amaç edinmiştir?
WEB SERVİS TEKNİK SUNUM
04/02/10 Django Web Uygulamaları Geliştirmede Çağdaş bir Yaklaşım.
Web Service Uygulaması
Kontrol Çevrimleri FOR WHILE DO-WHILE IF-ELSE SWITCH-CASE-DEFAULT
VERİTABANLARININ ETKİN KULLANIM TEKNİKLERİ
3. HTTP.
Fonksiyonlar ve Küresel Değişkenler
U Y A R I Takibeden slaytlarda anlatılan internet explorer/proxy ayarları yapıldıktan sonra ancak KHÜ Kütüphanesi tarafından izin verilen web sayfalarına.
Dizi (array) değişkenleri
DOVECOT İLE IMAP VE POP3 SERVER KURULUMU
BTP 108 BİLGİSAYAR AĞ SİSTEMLERİ AĞ KAVRAMI Birden çok bilgisayarın birbirine bağlı olarak kullanılmasıyla oluşturulan çalışma biçimine bilgisayar ağı.
PHP İle GÜVENLİ KODLAMA
Çerez(Cookie) Kullanımı Oturum Yönetimi
Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License. The OWASP.
MySQL, SQL ve PHP Öğr.Gör.Şükrü KAYA.
HTML (HYPER TEXT MARKUP LANGUAGE) TEMEL ETİKETLERİ
TEMEL İNTERNET KAVRAMLARI
WEB TEKNOLOJİLERİ GİRİŞ
WEB PROGRAMLAMA PHP Temelleri 2 Dr. Erman Yukselturk.
WEB SUNUCU KURULUMU.
2.Bölüm: Uygulama Katmanı
İnternet Teknolojisi Temel Kavramlar
HAZİRAN ASP ACTIVE SERVER PAGES Demet AMİNCİ Selçuk YUVARLAK Yusuf ŞENEL Endüstri Mühendisliğinde Bilgisayar Uygulamaları Dersi Projesi, 2004.
WEB TASARIMINDA TEMEL KAVRAMLAR
İnternet Programcılığı II
İnternet Programlama PHP.
U Y A R I Takibeden slaytlarda anlatılan internet explorer / proxy ayarları yapıldıktan sonra ancak KHÜ Bilgi Merkezi tarafından izin verilen web sayfalarına.
HTML :Hyper Text Markup Language explorer, firefox, opera herhangi bir derleyiciye ihtiyaç duymadan çalışabilir metin biçimlendirme resim ekleme ve biçimlendirme.
Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License. The OWASP.
Ders İçeriği Liste Soyut veri yapısı (ADT)
İnternet Teknolojisi Temel Kavramlar
U Y A R I Takibeden slaytlarda anlatılan internet explorer/proxy ayarları yapıldıktan sonra ancak KHÜ Bilgi Merkezi tarafından izin verilen web sayfalarına.
Genel Bakış IEU Web Sitesi Genel Yapısı İDARİ YAPI VE AKADEMİK YAPI İÇİN YAKLAŞIMLAR... YÖNETİM SİSTEMİ ORGANİZASYON EK: SPAW EDİTÖR.
İKMAP İnternet 1 Ders Notu
LİME SURVEY KÜBRA AĞAÇ DERYA DERE.
Bu kurs ne değildir? Neyi amaç edinmiştir? Bilgisayar Mühendisi? Bilgisayar Programcısı? Web Tasarımcısı? Web Programcısı? Neler öğreneceğiz? Kurs sonunda.
Adres Çözümleme Protokolü (ARP) Version 1
Akıllı İstemcileri Geliştirmek ve Dağıtmak
DYNAMİC HTML EVENT MODELS SİNEM YARDIMCI ÇAKIL SU KIRLI.
Muammer Benzeş MVP (IIS)
HTML HTML Nedir? HTML Ne İşe Yarar?. HTML (HyperText Markup Language / Hareketli-Metin İşaretleme Dili) basitçe, tarayıcılarla görebileceğimiz, internet.
Web Önyüzü Nasıl Olmalı? : İskelet {css} : Görünüm JavaScript() : Etkileşim.
::: Soru Numarası Seçin :::
XHTML ile HTML Arasındaki Farklar
SYSLOG SERVER KURULUMU
İNTERNET PROGRAMCILIĞI 2
Python ve Cgi Scripting Giriş
HTTP Kullanıcı Asıllama ve Yetkilendirme
cURL ile Web Servisleri
Uzm. Rıdvan YAYLA – Bilecik Üniversitesi Müh. Fak. Bilg. Müh. Bölümü
Web Programlama Kursu Bu kurs ne değildir? Neyi amaç edinmiştir?
İNTERNET PROGRAMCILIĞI 2
Genel PHP Akademik Bilişim 2003 Adana, Şubat 2003 Hidayet Doğan
Milli Eğitim Bakanlığı Eğitek Haydar TUNA Teknik Öğretmen ve Yazar
Sunum transkripti:

VARNISH ile ÖLÇEKLENEBİLİR WEB

Web İsteği

Web İsteği

Web İsteği www.hede.com

Web İsteği www.hede.com

Web İsteği www.hede.com

Web İsteği www.hede.com

Web İsteği www.hede.com

Web İsteği twitter'a istek yap bunun cevabını bekle veritabanına istek yap bunun cevabını bekle başka siteden içerik almak için istek yap bunun cevabını bekle istekler geldikten sonra bunları yorumla gelen istekleri birleştir view oluştur istemciye geri dön

Web İsteği twitter'a istek yap bunun cevabını bekle veritabanına istek yap bunun cevabını bekle başka siteden içerik almak için istek yap bunun cevabını bekle istekler geldikten sonra bunları yorumla gelen istekleri birleştir view oluştur istemciye geri dön Bu işlemi aynı içeriği gören herkese yapmak? İşlemci yükü + zaman + bandwidth

KAYNAK TÜKETİMİ = YAVAŞ AÇILAN SAYFALAR

KİMSE TRAFİKTE BEKLEMEK İSTEMEZ

KİMSE TRAFİKTE BEKLEMEK İSTEMEZ WEB KULLANICILARI YAVAŞ SİTEDE BEKLEMEZ

http://www. strangeloopnetworks http://www.strangeloopnetworks.com/resources/infographics/web-stress/poster/

Boşa harcanan her cpu-cycle'da bir kedi yavrusu ölüyor :'(

KEDİ YAVRULARINI NASIL KORUYACAĞIZ? :'(

VARNISH CACHE

Web İsteği www.hede.com

Web İsteği www.hede.com

Web İsteği www.hede.com

Web İsteği www.hede.com

“YAPARAK GÖSTERME”

KURULUM sudo apt-get install varnish Varnish Daemon Ayarları /etc/default/varnish /etc/default/varnish DAEMON_OPTS="-a :80 \ -T localhost:6082 \ -f /etc/varnish/default.vcl \ -S /etc/varnish/secret \ -s malloc,256m" Varnish VCL /etc/varnish/default.vcl

VCL - Varnish Configuation Language vcl_recv İstemciden istek gelir vcl_hash Gelen isteği hash'lenir Cache'den gelsin Backend'den gelsin hit miss pass BE'den iste vcl_fetch vcl_deliver İstemciye geri döner

HANGİ TÜR SİTELERDE UYGULANABİLİR? “Cookie dependent” olmayan sitelerde Aynı içeriğin çok fazla kullanıcıya gösterildiği sitelerde (giriş yapmamış kullanıcı?) Aynı içeriğe çok sayıda istek gelen sitelerde Cache stratejisinin (url pattern'lar, invalidation) belli olduğu sitelerde HTTPS olmayan sayfalarda :'(

https://gist.github.com/yuxel/7617215 # https://github.com/varnish/libvmod-header # Öntanımlı olarak varnish sadece # ilk Set-Cookie header'ını yönetebilir. # # Her Set-Cookie header'nı yönetebilmek için bu kütüphane gerekli import header; backend server1 { .host = "192.168.1.1"; .port = "8080"; } .host = "192.168.1.2"; .port = "8081"; director default round-robin { { .backend = server1; } { .backend = server2; } https://gist.github.com/yuxel/7617215

vcl_recv : tarayıcıdan varnish'e gelen istek # tarayicida varnishLogged cookies'si varsa cache'lenmesin if (req.http.Cookie ~ "(varnishLogged)=") { set req.http.X-request-matched = "cookieFound"; return (pass); } # varnishLogged haric tüm cookie'leri sil if (req.http.Cookie) { set req.http.Cookie = ";" + req.http.Cookie; set req.http.Cookie = regsuball(req.http.Cookie, "; +", ";"); set req.http.Cookie = regsuball(req.http.Cookie, ";(varnishLogged)=", "; \1="); set req.http.Cookie = regsuball(req.http.Cookie, ";[^ ][^;]*", ""); set req.http.Cookie = regsuball(req.http.Cookie, "^[; ]+|[; ]+$", ""); # eger temizleme islemi sonrasinda bir sey kalmamisa header'i sil if (req.http.Cookie == "") { unset req.http.Cookie; https://gist.github.com/yuxel/7617215

vcl_recv : tarayıcıdan varnish'e gelen istek # Accept-Encoding header'ini normalize et # # Tarayicilar farkli tipte gonderebiliyor, # her accept-encoding icin ayri cache'lenmesin diye normalize ediyoruz if (req.http.Accept-Encoding) { if (req.http.Accept-Encoding ~ "gzip") { set req.http.Accept-Encoding = "gzip"; } else if (req.http.Accept-Encoding ~ "deflate") { set req.http.Accept-Encoding = "deflate"; } else { # deflate veya gzip yoksa accept-encoding header'ini sil unset req.http.Accept-Encoding; } https://gist.github.com/yuxel/7617215

vcl_recv : tarayıcıdan varnish'e gelen istek # backend'e x-forwarded-for header'inda IP'yi tasi set req.http.X-Forwarded-For = client.ip; if (req.request != "GET" && req.request != "HEAD" && req.request != "PUT" && req.request != "POST" && req.request != "TRACE" && req.request != "PURGE" && req.request != "OPTIONS" && req.request != "DELETE") { /* RFC2616'ye uymayan garip bir istek varsa backend'e pipe'la */ return (pipe); } # istemci Cache-Control no-cache olarak set etmisse if (req.http.Cache-Control ~ "no-cache") { return (pass); # sadece haber ile baslayan adresleri cache'le if ( req.url ~ "/haber" ) { return (lookup); https://gist.github.com/yuxel/7617215

vcl_hash : isteği hash'le # parametrede ?utm_source gibi şeyler geçerse bunlar için ayrı cache üretme if (req.url ~ "\?") { set req.url=regsuball(req.url,"&(_|utm_term|utm_content|utm_source|utm_medium|utm_campaign)=([A-z0-_\-.]+)",""); set req.url=regsuball(req.url,"\?(_|utm_term|utm_content|utm_source|utm_medium|utm_campaign)=([A-z0-_\-.]+)","?"); set req.url=regsub(req.url,"\?&","?"); set req.url=regsub(req.url,"\?$",""); } hash_data(req.url); https://gist.github.com/yuxel/7617215

vcl_fetch : sunucudan al # 3 saatlik cache set beresp.grace = 3h; # 5**'li response dönerse de 5 saniye boyunca cache'le # anlık 10000 request gelirse hepsi backend'e inmemiş olur if (beresp.status >= 400) { set beresp.ttl = 5s; set beresp.grace = 0s; } # cookie'de varnsihLogged varsa cache'leme if (req.http.Cookie ~ "varnishLogged") { set beresp.http.X-Cacheable = "no-cookieFound"; return (hit_for_pass); } else { # varnishLogged harici her set-cookie isteğini sil header.remove(beresp.http.Set-Cookie,"^(?!((varnishLogged)=))"); # cookie kalmadıysa header2ı unset et if (beresp.http.Set-Cookie == "") { remove beresp.http.Set-Cookie; # sadece accept-encoding'e göre cache'i vary et set beresp.http.Vary = "Accept-Encoding"; https://gist.github.com/yuxel/7617215

vcl_deliver : istemciye dön set resp.http.X-Served-By = server.hostname; if (obj.hits > 0) { set resp.http.X-Cache-Result = "HIT"; set resp.http.X-Cache-Hits = obj.hits; } else { set resp.http.X-Cache-Result = "MISS"; } https://gist.github.com/yuxel/7617215

vcl_hit, vcl_miss https://gist.github.com/yuxel/7617215 # purge istegi gelirse sub vcl_hit { if (req.request == "PURGE") { purge; error 200 "Purged"; } # purge istegi gelirse ama cache'de yoksa sub vcl_miss { error 200 "Not in cache"; https://gist.github.com/yuxel/7617215

Cache Invalidation $ curl -X PURGE http://haber.local/haber/mfo <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <title>200 Purged</title> </head> <body> <h1>Error 200 Purged</h1> <p>Purged</p> <h3>Guru Meditation:</h3> <p>XID: 102610103</p> <hr> <p>Varnish cache server</p> </body> </html>

Benchmark - Apache $ siege -c 250 -t 10s http://haber.local/haber/mfo ** Preparing 250 concurrent users for battle. The server is now under siege... Lifting the server siege... done. Transactions: 1410 hits Availability: 100.00 % Elapsed time: 9.56 secs Data transferred: 0.64 MB Response time: 0.83 secs Transaction rate: 147.49 trans/sec Throughput: 0.07 MB/sec Concurrency: 122.81 Successful transactions: 1410 Failed transactions: 0 Longest transaction: 3.83 Shortest transaction: 0.80

Benchmark - Varnish # siege -c 250 -t 10s http://haber.local/haber/mfo ** Preparing 250 concurrent users for battle. The server is now under siege... Lifting the server siege... done. Transactions: 4661 hits Availability: 100.00 % Elapsed time: 9.55 secs Data transferred: 2.13 MB Response time: 0.00 secs Transaction rate: 488.06 trans/sec Throughput: 0.22 MB/sec Concurrency: 2.36 Successful transactions: 4661 Failed transactions: 0 Longest transaction: 0.82 Shortest transaction: 0.00

Benchmark - Apache # siege -c 1000 -t 10s http://haber.local/haber/mfo ** Preparing 1000 concurrent users for battle. The server is now under siege... Lifting the server siege... done. Transactions: 638 hits Availability: 100.00 % Elapsed time: 9.89 secs Data transferred: 0.29 MB Response time: 4.71 secs Transaction rate: 64.51 trans/sec Throughput: 0.03 MB/sec Concurrency: 303.66 Successful transactions: 638 Failed transactions: 0 Longest transaction: 8.97 Shortest transaction: 0.00

Benchmark - Varnish # siege -c 1000 -t 10s http://haber.local/haber/mfo ** SIEGE 3.0.1 ** Preparing 1000 concurrent users for battle. The server is now under siege... Lifting the server siege... done. Transactions: 13797 hits Availability: 100.00 % Elapsed time: 9.53 secs Data transferred: 6.30 MB Response time: 0.17 secs Transaction rate: 1447.74 trans/sec Throughput: 0.66 MB/sec Concurrency: 242.62 Successful transactions: 13797 Failed transactions: 0 Longest transaction: 1.21 Shortest transaction: 0.00

varnishstat varnishlog varnishadm

Sorular? @yuxel