Önsöz
2016'da güncelleme. Her şey değişiyor, tüm sunucular daha iyi hale geliyor, hepsi SSL'yi destekliyor ve web her zamankinden daha şaşırtıcı.
Belirtilmediği sürece, aşağıdakiler binlerce ila milyonlarca kullanıcıyı destekleyen iş dünyasında ve yeni başlayan işletmelere yöneliktir.
Bu araçlar ve mimariler çok fazla kullanıcı / donanım / para gerektirir. Bunu bir ev laboratuarında deneyebilir veya bir blog çalıştırabilirsiniz, ancak bu pek mantıklı değil.
Genel bir kural olarak, basit tutmak istediğinizi unutmayın . Eklenen her ara katman, korunacak başka bir kritik katman aracıdır. Ekleyecek bir şey olmadığında mükemmellik elde edilemez, ancak çıkarılacak hiçbir şey kalmadığında.
Bazı Ortak ve İlginç Dağıtımlar
HAProxy (dengeleme) + nginx (php uygulaması + önbellekleme)
Web sunucusu nginx çalışan php'dir. Nginx zaten oradaysa, önbelleğe alma ve yönlendirmeleri de kaldırabilir.
HAProxy ---> nginx-php
A ---> nginx-php
P ---> nginx-php
r ---> nginx-php
o ---> nginx-php
x ---> nginx-php
y ---> nginx-php
HAProxy (dengeleme) + Vernik (önbellekleme) + Tomcat (Java uygulaması)
HAProxy, istek URI'sına (* .jpg * .css * .js) dayanarak Vernik'e yönlendirebilir.
HAProxy ---> tomcat
A ---> tomcat
---> tomcat
P ---> tomcat <----+
r ---> tomcat <---+|
o ||
x ---> varnish <--+|
y ---> varnish <---+
HAProxy (balanslama) + nginx (sunucuya SSL ve önbellekleme) + Web sunucusu (uygulama)
Web sunucuları, HERHANGİ SSL KONUŞMASI rağmen SSL konuşmuyor ( özellikle EC2'den geçen özel kullanıcı bilgileriyle birlikte bu HAProxy-WebServer bağlantısı ). Yerel bir nginx eklemek, SSL'yi ana bilgisayara getirmeye izin verir. Nginx bir kez orada bazı önbellekleme ve URL yeniden yazma da olabilir.
Not : Bağlantı noktası yönlendirmesi 443: 8080 gerçekleşiyor, ancak özelliklerin bir parçası değil. Port yönlendirme yapmanın anlamı yok. Yük dengeleyici doğrudan web sunucusu ile konuşabilir: 8080.
(nginx + webserver on same host)
HAProxy ---> nginx:443 -> webserver:8080
A ---> nginx:443 -> webserver:8080
P ---> nginx:443 -> webserver:8080
r ---> nginx:443 -> webserver:8080
o ---> nginx:443 -> webserver:8080
x ---> nginx:443 -> webserver:8080
y ---> nginx:443 -> webserver:8080
Ara Katman
HAProxy: Yük dengeleyici
Ana Özellikler :
- Yük dengeleme (TCP, HTTP, HTTPS)
- Çoklu algoritmalar (yuvarlak robin, kaynak ip, başlıklar)
- Oturum ısrarı
- SSL sonlandırma
Benzer Alternatifler : nginx (yük dengeleyici olarak yapılandırılabilir çok amaçlı web sunucusu)
Farklı Alternatifler : Bulut (Amazon ELB, Google yük dengeleyici), Donanım (F5, fortinet, citrix netscaler), Diğer ve Dünya Çapında (DNS, anycast, CloudFlare)
HAProxy ne yapar ve ne zaman kullanmak zorundasınız?
Yük dengelemeye ihtiyacınız olduğunda. HAProxy çözüme gitmektir.
Dışında mevcut becerileri yok VEYA çok ucuz VEYA hızlı & kirli istediğinizde, o zaman bir ELB kullanabiliriz: D
Kendi veri merkezinizi zor şartlar altında kullanmak isteyen (özel altyapı, güvenilir yük devretme, 2 güvenlik duvarı katmanı, denetim malzemesi, SLA'nın durma süresinin% x'ini ödemek için, hepsi bir arada) dışında bankacılık / hükümet / benzeri olduğunuz durumlar dışında 30 uygulama sunucunuzu içeren rafın üzerine 2 F5 koyabilirsiniz.
Dışında size 100k HTTP (S) [ve çoklu sitelere] ötesine geçmesini istediğinizde, o zaman sahip ZORUNLU katları onlara (cloudflare, DNS, anycast) önünde dengeleme [global] yükün bir katmanla HAProxy. Teorik olarak, küresel dengeleyici doğrudan HAProxy'yi atlatmaya izin veren web sunucuları ile konuşabilir. Bununla birlikte, genellikle, HAProxy'leri veri merkezinize ortak giriş noktaları olarak saklamanız ve ana bilgisayarlar arasında oldukça dengelemek ve varyansı en aza indirgemek için gelişmiş seçenekleri ayarlamanız gerekir.
Kişisel Görüş : Tamamen TEK DOĞRU AMAÇ'a ithaf edilmiş, küçük, içerilmiş, açık kaynaklı bir proje. En kolay yapılandırma (ONE dosya) arasında, hayatımda karşılaştığım en kullanışlı ve en güvenilir açık kaynaklı yazılım.
Nginx: Emmeyen Apache
Ana Özellikler :
- Web Sunucusu HTTP veya HTTPS
- Uygulamaları CGI / PHP / diğerlerinde çalıştırın
- URL yönlendirme / yeniden yazma
- Giriş kontrolu
- HTTP Başlıkları manipülasyonu
- Caching
- Ters Proxy
Benzer alternatifler : Apache, Lighttpd, Tomcat, Gunicorn ...
Apache, onlarca modülden oluşan devasa bir küme ve httpd.conf
kırılmış bir talep işleme mimarisinin tepesinde binlerce hat olarak da bilinen fiili web sunucusuydu . nginx, hepsini daha az modülle (biraz) daha basit bir konfigürasyon ve daha iyi bir çekirdek mimarisi ile yineledi.
Nginx ne yapar ve ne zaman kullanmak zorundasınız?
Bir web sunucusu uygulamaları çalıştırmak için tasarlanmıştır. Uygulamanız nginx üzerinde çalışacak şekilde geliştirildiğinde, zaten nginx'e sahipsiniz ve tüm özelliklerini kullanabilirsiniz.
Uygulamanızın nginx üzerinde çalışması istenmediği sürece ve nginx yığınınızda (Java mağazası olan herhangi biri var mı?) Bulunmadığı durumlarda nginx'te küçük bir nokta yoktur. Web sunucusu özelliklerinin mevcut web sunucunuzda bulunması muhtemeldir ve diğer görevler uygun araç (HAProxy / Varnish / CDN) tarafından daha iyi yerine getirilebilir.
Web sunucunuz / uygulamanızın özellikleri olmadığı zaman, yapılandırması zor ve / veya işine bakmak yerine işiniz ölmeyi tercih ederseniz (Gunicorn herkes mi?), URL yapmak için önüne bir nginx koyabilirsiniz (örneğin, her düğümde yerel olarak) yeniden yazma, 301 yönlendirmeler gönderme, erişim denetimini zorlama, SSL şifrelemesi sağlama ve anında HTTP üstbilgilerini düzenleme. [Bunlar bir web sunucusundan beklenen özellikler]
Vernik: Önbellek sunucusu
Ana Özellikler :
- Caching
- Gelişmiş Önbellekleme
- İnce Taneli Önbellekleme
- Caching
Benzer Alternatifler : nginx (önbellek sunucusu olarak yapılandırılabilir çok amaçlı web sunucusu)
Farklı Alternatifler : CDN (Akamai, Amazon CloudFront, CloudFlare), Donanım (F5, Fortinet, Citrix Netscaler)
Varnish ne yapar ve ne zaman kullanmak zorundasınız?
Önbellekleme yapar, yalnızca önbellekleme yapar. Bu genellikle çabaya değmez ve zaman kaybıdır. Bunun yerine CDN'yi deneyin. Bir web sitesini çalıştırırken önbelleğe almanız gereken en son şey olduğunu unutmayın.
Yalnızca bir resim veya videolarla ilgili bir web sitesi çalıştırıyor olmanız dışında , CDN'yi dikkatlice incelemeli ve önbelleğe almayı ciddi şekilde düşünmelisiniz.
Kendi donanımınızı kendi veri merkezinizde kullanmaya zorlamadığınız sürece (CDN bir seçenek değildir) ve web sunucularınız statik dosyalar sunmaktan korkunçtur (yardımcı olmayan daha fazla web sunucusu eklemek) ve Varnish son çaredir.
Çoğunlukla statik fakat henüz karmaşık, dinamik olarak oluşturulmuş içeriğe sahip bir siteniz olmadığı sürece (aşağıdaki paragraflara bakın), sonra Vernik web sunucularınızda çok fazla işlem gücü tasarrufu sağlayabilir.
Statik önbellekleme 2016 yılında abartılıyor
Önbelleğe alma işlemi neredeyse yapılandırma ücretsiz, parasız ve zamansızdır. Sadece CloudFlare veya CloudFront veya Akamai veya MaxCDN'ye abone olun. Bu satırı yazmam için geçen süre, önbellekleme kurulumunun süresidir ve elimde tuttuğum bira medyan CloudFlare üyeliğinden daha pahalıdır.
Tüm bu hizmetler statik * .css * .js * .png ve daha fazlası için kutunun dışında çalışır. Aslında, çoğunlukla Cache-Control
HTTP başlığındaki yönergeyi onurlandırırlar . Önbelleğe almanın ilk adımı, web sunucularınızı uygun önbellek yönergeleri gönderecek şekilde yapılandırmaktır. Hangi CDN, ne Vernik, ortada hangi tarayıcı olduğu önemli değil.
Performans ile ilgili önemli noktalar
Cila, ortalama web sunucularının bir blogda bir kedi resmi sunmak için boğulduğu bir zamanda oluşturuldu. Günümüzde ortalama modern ve çok parçacıklı asenkron buzzword odaklı web sunucusunun tek bir örneği yavru kedileri tüm ülkeye güvenilir bir şekilde ulaştırmaktadır. Nezaket sendfile()
.
Çalıştığım son proje için bazı hızlı performans testleri yaptım. Tek bir tomcat örneği, HTTP üzerinden saniyede 21.000 - 33.000 statik dosya sunabilir (değişen HTTP / istemci bağlantılarının sayısıyla 20B'den 12kB'ye kadar olan dosyaları test eder). Sürdürülen çıkış trafiği 2,4 Gb / s'den fazla. Üretim sadece 1 Gb / s arayüze sahip olacaktır. Donanımdan daha iyisini yapamıyorum, vernik denemeye gerek yok.
Önbelleğe Alma Kompleksi, Dinamik İçeriği Değiştirme
Gibi CDN ve önbelleğe alma sunucuları genellikle parametrelerle URL'yi görmezden ?article=1843
, onlar oturumları çerez veya doğrulanmış kullanıcılarla herhangi bir isteği yok saymak ve bunlar dahil olmak üzere en MIME türlerini görmezden application/json
gelen /api/article/1843/info
. Konfigürasyon seçenekleri vardır, fakat bunlar genellikle "iyi ya da hiç" yerine ince taneli değildir.
Cila, neyin saklanabileceğini ve neyin olmayacağını tanımlamak için özel karmaşık kurallara sahip olabilir (bakınız VCL). Bu kurallar, belirli içerikleri URI, başlıklar ve geçerli kullanıcı oturumu çerezi ile MIME türü ve TÜM BİRLİKTE içerikle önbelleğe alabilir. Bu, çok özel bir yükleme şekli için web sunucularında çok fazla işlem gücü tasarrufu sağlayabilir. Varnish kullanışlı ve müthiş o zaman.
Sonuç
Tüm bu parçaları anlamak, ne zaman kullanacakları ve nasıl bir araya geleceklerini anlamam biraz zaman aldı. Umarım bu size yardımcı olabilir.
Bu oldukça uzun (6 saat yazmak. OMG!: O). Belki de bunun hakkında bir blog veya kitap başlatmalıyım. Eğlenceli gerçek: Cevap uzunluğunda bir sınır yok gibi görünüyor.