sábado, abril 26, 2008

Interfaz FastCGI en Web Servers

Leyendo un poco sobre el uso de PHP sobre Internet Information Server he encontrado información sobre Fast CGI, una modificación de la tradicional interfaz de ejecución de procesos CGI. CGI es la interfaz que define como un servidor web se comunique con un programa externo para obtener datos que posteriormente mandará el servidor web al cliente. Esta interfaz está bien, cuando no se tiene mucha carga. Sin embargo existe problemas de escalado cuando el número de peticiones sube: la creación de un proceso por cada petición para atenderla es un proceso costoso y no se puede reutilizar recursos comunes - por ejemplo, conexiones a base de datos -

Para superar estas limitaciones surgieron una serie API - interfaces de programación - ligadas a distintos servidores web que permitían introducir módulos con código propio en el servidor web. Por ejemplo, NSAPI para el servidor http de Netscape, ISAPI para el servidor IIS de Microsoft o la programación de módulos de Apache. De esta manera se integra la funcionalidad que se desee en el propio servidor web, remediando los principales defectos que tenía el uso de la interfaz CGI para ejecutar programas externos. Eso si, a cambio, es mucho más difícil aislar diferentes aplicaciones que se ejecutan en el mismo servidor web, y siendo mucho más complicado establecer quotas de uso de recursos.

Hace bastante tiempo surgió otro modelo de programación que es fastcgi, con la idea de juntar lo mejor de ambos mundos:

  • Rendimiento: Al no estar creando un proceso por cada petición, se ahorra los problemas de rendimiento de la interfaz antigua de CGI.
  • Simplicidad: Es muy fácil migrar los programas CGI escritos.
  • Independencia del lenguaje usado para programar el CGI.
  • Aislamiento de procesos: Una aplicación que utilice esta interfaz no puede corromper a otras.
  • Independencia del servidor: La especificación no está atada a ninguna arquitectura de servidor.
  • Soporte para aplicaciones distribuidas: permite distribuir carga entre máquinas remotas.

Esta manera de ejecutar aplicaciones es similar a la usada en los servidores de aplicaciones Java, donde hay un sistema que recibe las peticiones y sirve los ficheros estáticos y una serie de servidores de aplicaciones que reciben las peticiones vía un módulo (por ejemplo, en el caso de Apache, el mod_jk).

He encontrado esta interfaz para la ejecución de procesos leyendo sobre la implementación de php sobre IIS, que ha sido certificada por Zend para la ejecución en Windows 2008 (básicamente la versión basada en CGI tenía problemas de rendimiento mientras que la basada en ISAPI tenía problemas de estabilidad).

Instalando FastCGI en Apache

Instalar el módulo FastCGI en Apache es muy sencillo, en este caso como un módulo DSO:
  1. Bajarse las fuentes del FastCGI
  2. Descomprimir las fuentes y entrar en el directorio:
    tar zxvf mod_fastcgi-2.4.6.tar.gz
    cd mod_fastcgi-2.4.6
  3. Generar el módulo del Apache con apxs e instalarlo (como un usuario administrador):
    apxs -o mod_fastcgi.so -c *.c
    apxs -i -a -n fastcgi mod_fastcgi.so
  4. Comprobar que se han añadido al fichero de configuración la entrada necesaria para que el sistema cargue el módulo fastcgi. Debe de aparecer una línea de este tipo:
    ...
    LoadModule fastcgi_module ruta/mod_fastcgi.so
    ...

Referencias

Technorati Tags: ,

No hay comentarios: