FastCGI

FastCGI es un protocolo para interconectar programas interactivos con un servidor web. 

FastCGI es una variación de la ya conocida Common Gateway Interface (CGI o Interfaz Común de Entrada).

El principal objetivo de FastCGI es reducir la carga asociada con el hecho de interconectar el servidor web y los programas Common Gateway Interface, permitiéndole a un servidor atender más peticiones a la vez.

Ventajas 

 Independencia del lenguaje utilizado. Libertad de elección de la plataforma de desarrollo: C++, PHP, Python, Perl, Java, entre otros.
 Se utiliza un proceso separado. Libertad de elección del servidor web. Facilidad para el tratamiento de errores y depuración.
 Es posible la ejecución en host separado. Mayor libertad para configuración del sistema, tanto en el diseño de la red como en la elección de los sistemas operativos. Disminución de la carga de trabajo del servidor principal.

En resumen, la libertad de diseño de CGI a la velocidad de un módulo del servidor..

Historia 

CGI es un protocolo para interconectar aplicaciones externas con servidores web. Las aplicaciones CGI corren en un proceso separado que es creado al inicio de cada petición y es finalizado cuando termina su trabajo. Este modelo de "un nuevo proceso por cada petición" hace que los programas CGI sean muy fáciles de implementar, pero limita la eficiencia y la escalabilidad. En altas cargas, la sobrecarga en el sistema operativo por la creación y destrucción de procesos se torna significativa y limita la escalabilidad. Además, el modelo de procesos CGI limita las técnicas de reutilización de recursos (como ser la reutilización de conexiones a base de datos, caché en memoria, etc).

Para encarar el problema de escalabilidad del CGI, Open Market desarrolló FastCGI y lo introdujo por primera vez en su producto de servicio web a mediados de los 90'. Open Market originalmente desarrolló FastCGI en parte como una respuesta competitiva contra la, en aquel entonces en proceso, API propietaria de Netscape's, la NSAPI que servía para desarrollar aplicaciones Web.

Aunque inicialmente desarrollada por Open Market, FastCGI fue implementada por otros fabricantes de servicios web. FastCGI, sin embargo, compitió contra otras técnicas que también intentaban aumentar la velocidad y simplificar las comunicaciones del lado del servidor, pero sin seguir el paradigma CGI. Módulos para Apache tales como mod perl y mod php aparecieron aproximadamente por la misma fecha y parecían ser mejores reemplazos para CGI, permitiendo una integración muy próxima con la base del servidor web.

Detalles de la implementación 

En vez de crear procesos nuevos por cada petición, FastCGI puede usar un solo proceso persistente que maneja cualquier petición durante su período de vida. El hecho de procesar múltiples peticiones a la vez es logrado ya sea mediante la utilización de una sola conexión con un multiplexado interno (por ejemplo múltiples peticiones sobre una sola conexión) y/o utilizando múltiples conexiones. Varios de esos procesos pueden existir, y eso es algo que incrementa la escalabilidad y el rendimiento. FastCGI permite también a los programas hacer que el servidor web realice ciertas operaciones sencillas, como leer un archivo antes de que la petición sea procesada. Las variables de entorno y las peticiones de páginas son enviadas desde el servidor web hacia los procesos a través de una conexión TCP (para procesos remotos) o a través de zócalos de Unix (para procesos locales). Las respuestas son devueltas desde el proceso hacia el servidor web sobre la misma conexión. La conexión puede ser cerrada al final de una respuesta, pero el servidor web y el proceso se mantienen en ejecución.

Varios administradores y programadores de sitios web encontraron que la separación de las aplicaciones web con respecto al servidor web producto de FastCGI (y la simplicidad de SCGI) tenían muchas ventajas sobre los intérpretes incrustados (mod perl, mod php, etc). Esta separación permite a los procesos del servidor y de las aplicaciones ser reiniciados en forma independiente; una consideración importante a tomar en cuenta en sitios web muy ocupados. Esto también facilita la aplicación de políticas de seguridad por cada aplicación; cosa importante para los ISPs y para las compañías de alojamiento web.

Servidores Web que implementan FastCGI 

Nota: a menos que se notifique lo contrario, hasta ahora no se sabe cuándo será completada la implementación FastCGI
 Abyss Web Server 
 Apache HTTP Server (parcial)
 Implementado por mod_fcgid. Este módulo era de terceros, pero fue garantizado que sería un subproyecto de Apache en el 2009, liderado por Chris Darroch
 El módulo desactualizado de terceros mod_fastcgi también está siendo utilizado
 Multiplexado de peticiones a través de una sola conexión está prohibido por el diseño de Apache, así que no está soportado en Apache
 Cherokee HTTP Server
 Hiawatha webserver
 Soporte de balance de carga para FastCGI
 Soporte servidores FastCGI con jaula root
 Lighttpd
 Monkey Web Server
 LiteSpeed Web Server
 Microsoft IIS
 Kerio WebSTAR
 Nginx
 Open Market Web Server
 Resin Application Server
 Roxen Web Server
 Sun Java System Web Server
 Cualquier contenedor Servlet (como ser Apache Tomcat o Jetty), usando la biblioteca JFastCGI.
 Zeus Web Server
 My server project

'Bindings' de lenguajes para la API FastCGI 

FastCGI puede ser implementado en cualquier lenguaje que soporte zócalos (sockets). La API existe para:
 Borland Delphi/FreePascal
 C 
 C++
 Chicken Scheme
 Common Lisp: CLISP y CMUCL
 D
 Guile Scheme
 Eiffel
 Haskell
 HP BASIC for OpenVMS
 Java
 Lua
 OCaml
 Mono XSP
 Perl
 PHP
 Roadsend PHP
 Python
 Ruby
 SmallEiffel
 Smalltalk: FasTalk and Dolphin Smalltalk
 TCL

FastCGI permitió portabilidad a las aplicaciones web; en contraste, las aplicaciones que fueron desarrolladas para intérpretes embebidos (tales como mod python) están generalmente muy limitadas a la API de Apache. Frameworks recientes tales como Ruby on Rails, Kepler (etc...) permiten el uso de cualquiera de los intérpretes embebidos (mod ruby, mod perl, mod python o mod_lual, respectivamente), pero también FastCGI. Esta tendencia parece ser que va a continuar.

Bibliotecas que incluyen soporte para FastCGI 

 qDecoder
 GNU Cgicc

Referencias

Véase también 

 CGI
 SCGI
 WinCGI

Bibliografía

Enlaces externos 
 Página Inicial de FastCGI (inglés)
 Fork de la Página Inicial de FastCGI (inglés)
 FastCGI specification
 Fork de la FastCGI specification
 mod_fastcgi – FastCGI module for Apache 1.x and 2.x supporting external applications
 mod_fastcgi – FastCGI module fork for Apache 1.x and 2.x supporting external applications
 mod_fcgid - a FastCGI module for Apache 2.x
 Microsoft FastCGI
 Apache v2.x mod_proxy FastCGI Module
 FastCGI interface for WASD httpd server for OpenVMS
 FastCGI y PHP seguro en UserDir

Software de Internet
Acrónimos de informática