If you can't read please download the document
Upload
runa
View
8.795
Download
2
Embed Size (px)
Citation preview
Apache ha muerto Viva LIGHTTPD!
* No creo realmente que el Apache haya muerto, pero si que ahora hay mas opciones, algunas mucho mas interesantes, como Lighty. El titulo de la presentacion es para provocar, nomas.
Caractersticas
Casi 3 aos de desarrollo. Lo empezo un tal Jan Kneschke
La ultima versin estable es 1.4.18, devel es 1.5-prerelease. Licencia BSD.
Proof of Concept de "The C10K problem": "It's time for web servers to handle 10.000 clients simultaneously"
Corre PHP, Python, PERL, Ruby, cualquier cosa que sea FastCGI o SCGI o AJP13 o ...
Market Share de 0.6% (feb 2007)
Mueve 6 de los Top 250 sitios en la internet (Alexa - puaj)
Increblemente rpido, liviano y flexible (condicionales, etc)
La filosofa Lighty
Un solo proceso, 1 solo thread
KISS: keep it simple, stupid
Los archivos estticos los manda directo el kernel: del disco al socket
FastCGI: Los script PHP los procesa -el- PHP (no el mod_php, ni el mod_snake)
Un web server es, bsicamente, un programa que mueve texto de un lado al otro de la memoria. Mover "mucho" texto no debera ser algo "pesado" (limitado por el CPU)
Lighttpd como proxy HTTP
"The web is a pipe"
Cuando si, cuando no
Lighty es perfecto cuando:
Uno puede y quiere tener control total sobre las aplicaciones que corre
Cuando el hardware no esta sper exigido
Lighty no es ideal cuando:
Hay cientos de usuarios distintos usando virtualhosts (virtual hosting barato) y van a quejarse de cosas como "los rewrites de Apache no me andan!"
Los recursos son escasos para el trafico (discos exprimidos!)
Quien usa Lighttpd
Algunos nombres "importantes"
YouTube
Wikipedia
ImageShack
SourceForge
SendSpace.com
MiniNova.org
IsoHunt.com
Mdulos disponibles
Los normales:
rewrite (como Apache)
auth (HTTP auth, con distintos backends)
deflate (comprime con GZIP o BZIP2, todo lo que es text/*)
expire (agrega headers de Expires)
...
Los emocionantes:
flv_streaming (youtube en casa!)
magnet (dar vuelta requests como una media)
trigger_b4_dl (anti hotlinking)
upload_progress (progress bars en javascript fciles)
Problemas y soluciones
Clusters (FastCGI)
Downloads "protegidos" (X-SENDFILE)
Distribuyendo la carga (mod_proxy_core)
Scripteando las tripas de lighty (mod magnet)
imgenes al azar
cache
Configuracin condicional
Se pueden comparar: cookie, host,useragent, referer, url, querystring, remoteip, socket, path, existing-path
server.document-root = "/var/www/example/"
$HTTP["host"] == "www2.example.org" {
server.document-root = "/var/www/alt/"
}
$HTTP["url"] =~ "^/images/" {
expire.url = ( "" => "access 365 days" )
}
FastCGI
El interprete de FastCGI (php, rails) corre permanentemente como un daemon, atendiendo en un socket (unix o TCP)
El webserver se le conecta para pedirle que interprete un script
El daemon devuelve una respuesta (ej, HTML)
Notas:
La performance obtenida es similar a la de Apache mod_php
Se necesita una instancia del interprete de FastCGI para cada pedido simultaneo (PHP va forkeando, como necesita)
Apache mod_php vs FastCGI
Apache:
atiende el request
se lo pasa internamente al mod_php
devuelve la respuesta
Lighttpd:
atiende el request
se conecta con el servidor de FastCGI (local o remoto)
devuelve la respuesta
1 servidor HTTP, 3 servidores PHP
HTTP
FastCGI
FastCGI
FastCGI
Balanceo de Carga PHP
Notas:
Tambin puede balancear usando SQF (shortest queue first )y Cache Array Routing Protocol (CARP)
Soporta FailOver: si un procesador esta cado, prueba con el prximo
$HTTP["url"] =~ "\.php$" {
proxy-core.protocol = "fastcgi"
proxy-core.balancer = "round-robin"
proxy-core.backends = ( "10.0.0.1:1000",
"10.0.0.2:1000", "10.0.0.3:1000")
}
Un servidor por "zona"
$HTTP["url"] =~ "^/forum" { proxy-core.protocol = "fastcgi" proxy-core.backends = ( "10.0.0.1:1000")}$HTTP["url"] =~ "^/torrents" { proxy-core.protocol = "fastcgi" proxy-core.backends = ( "10.0.0.99:1000")}
Distribuyendo la carga
mod_proxy_core
Proxy de HTTP, FastCGI, SCGI, AJP13
Un servidor de Lighttpd "adelante"
Funcionando como un proxy (sin cache!)
Redirgiendo los requests al backend correspondiente
Los PHP a 10.0.0.1:1000 (FastCGI)
Las imgenes, al servidor que les corresponda
/images/[0-4]/* -> http://10.0.0.2/images/ (HTTP)
/images/[5-9]/* -> http://10.0.0.3/images/ (HTTP)
Distribuyendo la carga
$HTTP["url"] =~ "\.php$" { proxy-core.protocol = "fastcgi" proxy-core.backends = ( "10.0.0.1:1000" )}else $HTTP["url"] =~ "^/images/[0-4]/" { proxy-core.protocol = "http" proxy-core.backends = ( "10.0.0.2:80" )}else $HTTP["url"] =~ "^/images/[5-9]/" { proxy-core.protocol = "http" proxy-core.backends = ( "10.0.0.3:80" )}
The web is a pipe!
Sirviendo downloads "protegidos"
Problema clsico:
El archivo / screensaver "pescaditos.exe" esta solo disponible para usuarios registrados
Solucin clsica (php):