FastCGI - FastCGI
FastCGI é um protocolo binário para interface de programas interativos com um servidor web . É uma variação da Common Gateway Interface (CGI) anterior. O principal objetivo do FastCGI é reduzir a sobrecarga relacionada à interface entre o servidor da web e os programas CGI, permitindo que um servidor lide com mais solicitações de páginas da web por unidade de tempo.
História
Common Gateway Interface (CGI) é um protocolo para fazer a interface de aplicativos externos com servidores da web. Os aplicativos CGI são executados em processos separados , que são criados no início de cada solicitação e interrompidos no final. Esse modelo de "um novo processo por solicitação" torna os programas CGI muito simples de implementar, mas limita a eficiência e a escalabilidade. Em cargas altas, a sobrecarga do sistema operacional para a criação e destruição de processos torna-se significativa. Além disso, o modelo de processo CGI limita os métodos de reutilização de recursos, como reutilização de conexões de banco de dados, armazenamento em cache na memória, etc.
Para lidar com as deficiências de escalabilidade do CGI, a Open Market desenvolveu o FastCGI e o introduziu em seu produto de servidor web em meados da década de 1990. Open Market desenvolvido originalmente FastCGI em parte como uma resposta competitiva para Netscape 's proprietário, em processo de interfaces de programação de aplicativos (APIs) ( Netscape Application Server Programming Interface (NSAPI)) para o desenvolvimento de aplicações Web.
Embora desenvolvido primeiro pela Open Market, FastCGI foi então implementado por vários outros fabricantes de servidores web. No entanto, sua abordagem competia com outros métodos para acelerar e simplificar a comunicação servidor-subprograma. Módulos do servidor Apache HTTP como mod_perl e mod_php apareceram na mesma época e ganharam popularidade rapidamente. A partir de 2020, todos esses vários métodos, incluindo CGI, permanecem em uso comum.
Detalhes de implementação
Em vez de criar um novo processo para cada solicitação, o FastCGI usa processos persistentes para lidar com uma série de solicitações. Esses processos são de propriedade do servidor FastCGI, não do servidor da web.
Para atender a uma solicitação de entrada, o servidor da web envia informações de variáveis de ambiente e a solicitação de página para um processo FastCGI por meio de um soquete de domínio Unix , um pipe nomeado ou uma conexão TCP ( Transmission Control Protocol ). As respostas são retornadas do processo para o servidor da web pela mesma conexão, e o servidor da web então entrega essa resposta ao usuário final . A conexão pode ser fechada no final de uma resposta, mas os processos do servidor da web e do serviço FastCGI persistem.
Cada processo FastCGI individual pode lidar com muitas solicitações ao longo de sua vida útil, evitando assim a sobrecarga de criação e encerramento de processos por solicitação. O processamento de várias solicitações simultaneamente pode ser feito de várias maneiras: usando uma conexão com multiplexação interna (ou seja, várias solicitações em uma conexão); usando várias conexões; ou por uma combinação desses métodos. Vários servidores FastCGI podem ser configurados, aumentando a estabilidade e escalabilidade.
Os administradores e programadores de sites podem descobrir que separar os aplicativos da web do servidor no FastCGI tem muitas vantagens sobre os interpretadores incorporados ( mod_perl , mod_php , etc.). Essa separação permite que os processos do servidor e do aplicativo sejam reiniciados independentemente - uma consideração importante para sites ocupados. Ele também permite a implementação de políticas de segurança de serviço de hospedagem por aplicativo, que é um requisito importante para ISPs e empresas de hospedagem na web. Diferentes tipos de solicitações de entrada podem ser distribuídos para servidores FastCGI específicos que foram equipados para lidar com esses tipos de solicitações de forma eficiente.
Servidores web que implementam FastCGI
- Nota: a menos que indicado, a integridade da implementação FastCGI é desconhecida
-
Servidor Apache HTTP (parcial)
- Implementado por mod_fcgid . Este módulo costumava ser de terceiros, mas foi concedido à The Apache Software Foundation (ASF) como um subprojeto do servidor Apache em 2009, conduzido por Chris Darroch. Ele suporta apenas sockets de domínio Unix, sem sockets TCP.
- Um módulo mod_fastcgi de terceiros também está sendo usado. Por um tempo, este módulo não compilou mais corretamente no Apache 2.4.x, embora o problema tenha sido resolvido com um fork do projeto original.
- A multiplexação de solicitações por meio de uma conexão é proibida pelo design do Apache 1.x, portanto, isso não é compatível
- No Apache 2.4, mod_proxy_fcgi foi adicionado, suportando servidores TCP FastCGI.
- Caddy
- Cherokee
-
Hiawatha
- Suporte para balanceamento de carga FastCGI
- Suporta servidores FastCGI em chroot
- Jetty
- Kerio WebSTAR
- Lighttpd
- LiteSpeed Web Server
- Microsoft IIS
- Nginx
- NaviServer
- Oracle iPlanet Web Server
- OpenBSD 's httpd (8)
- Servidor da web Open Market
- Resina web e servidor de aplicativos
- Servidor da web Roxen
- Servidor da web ShimmerCat
- Zeus Web Server
Vinculações de linguagem para sua API
FastCGI pode ser implementado em qualquer linguagem que suporte sockets de rede . Como "FastCGI é um protocolo, não uma implementação", ele não está estritamente vinculado a nenhuma linguagem. Existem interfaces de programação de aplicativos (APIs) para:
- Ada
- Delphi , Lazarus Free Pascal
- C , C ++
- Esquema De Frango
- Lisp Comum
- D
- Eiffel
- Erlang
- GnuCOBOL
- Ir
- Esquema de Guile
- Haskell
- VSI BASIC para OpenVMS
- Java
- Lua
- node.js
- OCaml
- Perl
- PHP (via php-fpm ou HipHop para PHP )
- Pitão
- Rubi
- Ferrugem
- SmallEiffel
- Smalltalk : FasTalk e Dolphin Smalltalk
- Tcl
- WebDNA
- Vala (via ligações C)
- Xojo (anteriormente Realbasic, REAL Studio)
Estruturas recentes como Ruby on Rails , Catalyst , Django , Kepler e Plack permitem o uso com interpretadores embutidos ( mod_ruby , mod_perl , mod_python ou mod_lua, por exemplo) ou FastCGI.