Plack é uma implementação em Perl da especificação PSGI. Ela foi criada para resolver o problema das múltiplas interfaces de implantação de aplicações web em servidores. O PSGI é baseado no Rack (Ruby) e no WSGI (Pytho9n), agregando as melhores features dessas duas especificações.
Arquitetura
O Plack possui diversos componentes que podem ser combinados para construir uma stack completa e autônoma para a web.
- Handlers: adaptadores para diversos servidores web e interfaces de gateway, como Apache 1 e 2, nginx, CGI, FastCGI e um servidor web autônomo implementado pelo próprio Plack. São esses componentes que vão executar a aplicação propriamente dita e realizar coisas como pre-fork e load balancing.
- Loaders: componentes que carregam a aplicação em conjunto com um Handler. A forma como a aplicação é carregada pode ter bastante impacto na execução da aplicação, como por exemplo, carregar as bibliotecas antes dos forks acontecerem, para se aproveitar do copy-on-write e diminuir a assinatura de memória. Outros casos também incluem carregamento sob demanda, que é útil para desenvolvimento, além do gerenciamento de sinais para recarregamento graceful.
- Aplicações .psgi: o PSGI define um formato para as aplicações, que devem ser escritas em Perl.
- Executores: utilitários para uso em linha de comando que controlam os diversos aspectos da execução da aplicação. O Plack implementa um executor que se chama plackup e é tipicamente usado em desenvolvimento para “subir” uma versão light da aplicação.
- Construtor de Aplicações: o Plack permite que você combine componentes de forma arbitrária usando a semântica fornecida pelo builder:
- Middlewares: são componentes intermediários entre a web e as aplicações e cuidam de coisas como compressão/descompressão de conteúdo, caching e manipulação de headers. Existem centenas disponíveis no CPAN implentando as mais diversas funcionalidades.
- Frameworks: Catalyst; Dancer; Mojo; CGI::Application; Jifty
- Testers: o Plack possui uma série de emuladores de requisições que são úteis para realizar testes. Dessa forma, tanto o cliente HTTP, quanto o servidor são executados e se comunicam dentro do mesmo processo, o que elimina o overhead de criar um par requisição/resposta em HTTP.
- Servers: servidores autônomos de HTTP.
- Starman: servidor com pre-forking de alta performance, serve até 7000 requisições por segundo com uma única CPU.
- Twiggy: servidor assíncrono, útil para execução em ambientes sem fork, serve até 4000 requisições por segundo numa única CPU.
http://videolog.tv/video.php?id=959830
***
Este artigo foi publicado originalmente na Revista iMasters. Acesse e leia todo o conteúdo.