Apache ha muerto, Viva Lighttpd

download Apache ha muerto, Viva Lighttpd

If you can't read please download the document

Transcript of Apache ha muerto, Viva Lighttpd

Apache ha muerto Viva LIGHTTPD!

[email protected]

* 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):