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

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:

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.

Referências

links externos