lunes, 7 de diciembre de 2009

Rendimiento en PSGI/Plack

[English translation]
En mi articulo sobre PSGI aseveré que Plack era rápido, para demostrarlo comparé la velocidad del programa ejecutándose como CGI en apache (ACGI), como un servidor standalone en CGI::Emulate::PSGI (CEP) y como una aplicación nativa de PSGI.

La prueba no fue muy rigurosa, porque en realidad solo quería confirmar lo que había leído.

El comando para reportar la velocidad fue:

$ ab -n 1000 -c 10 -k "http://localhost:5000/cgi-bin/perldocweb?pod=PSGI&format=source"

Los resultados obtenidos fueron:

ACGI
CEP
PSGI
Peticiones/seg.
10.57
267.17
512.31
Tiempo de ejecución (ms)
94.618
3.743
1.952
Rata de transf. (kBps)
179.52
4539.79
8686.67

Solo por ver la velocidad cruda, me hice un pequeño programa para servir archivos de texto y comparar el rendimiento contra apache sirviendo archivos estáticos:

 1 #!/usr/bin/perl
 2 
 3 use Modern::Perl;
 4 use IO::File;
 5 
 6 my $dir = "/home/jrey/htdocs";
 7 
 8 my $app = sub {
 9     my $env      = shift;
10     my $filename = $dir . $env->{'REQUEST_URI'};
11     return [ '200', ['Content-Type' => "text/plain"], IO::File->new($filename) ];
12 };

Los resultados para el comando:

$ ab -n 1000 -c 10 -k "http://localhost:5000/PSGI.pod"

Fueron:

Plackup
Apache
Peticiones/seg.
614.69
3217.03
Tiempo de ejecución (ms)
1.627
0.311
Rata de transf. (kBps)
10425.21
55133.41

Como dije antes, Plack es muy rápido, y en particular esta prueba muestra que el rendimiento es aceptable incluso para contenido estático, así que podremos desplegar las aplicaciones directamente en perl, sin necesidad de un servidor web adicional, excepto para circunstancias especiales, como alta disponibilidad y balanceo de carga, en cuyo caso también hay algunas soluciones en Perl como perlbal. ¿ya les mencioné existe PSGI para perlbal?

No hay comentarios:

Publicar un comentario