ASP.NET Core -  O servidor web Kestrel


Neste artigo veremos o Web Server Kestrel e sua atuação na ASP .NET Core.

A forma como hospedamos nosso aplicativo na ASP.NET Core passou por algumas mudanças drásticas em comparação com a versão anterior da ASP.NET. (Veja a primeira parte do artigo)

O Kestrel é a nova maneira de hospedar as aplicações na ASP.NET Core Application. Ele é executado dentro do processo do aplicativo, tornando-o completamente autocontido (self-contained).

O que é o Kestrel

O Kestrel é um servidor HTTP baseado em E/S assíncrona, em eventos, de código aberto e multiplataforma. Ele foi desenvolvido para hospedar aplicações ASP.NET Core em qualquer plataforma, e, está incluído por padrão nas aplicações ASP.NET Core.

Ele é baseado no libuv sendo de código aberto e esta diponível no GitHub.

O Kestrel dá suporte aos seguintes cenários:

  • HTTPS
  • Atualização do Opaque usado para habilitar o WebSockets
  • Soquetes do UNIX para alto desempenho protegidos pelo Nginx
  • HTTP/2 (exceto em macOS†)

Porque usar o Kestrel ?

Os aplicativos ASP.NET mais antigos são fortemente acoplados ao IIS - Information Internet Service.

O IIS é um servidor da Web completo com todos os recursos que você precisa de um servidor da Web. Ao longo do tempo ele se tornou um servidor web maduro e estável, e, adicionou muitos recurso o que o tornou pesado. Tornou-se um dos melhores servidores da Web e, ao mesmo tempo, é um dos mais lentos.

Assim, as aplicações ASP.NET estavam fortemente acopladas com o IIS e carregava o peso do IIS.

Com a ASP .NET Core isso mudou.

As aplicações ASP.NET Core agora estão completamente desacopladas do IIS. Esse desacoplamento faz com que o ASP.NET Core seja executado em qualquer plataforma :  Windows, Mac ou Linux.

Ocorre que as aplicações ASP .NET Core ainda precisam ter a capacidade de ouvir e atender solicitações HTTP e enviar a resposta de volta para o cliente. É aí que entra Kestrel.

Usando o Kestrel

O servidor Kestrel é executado in-process no ASP .NET Core Applications. Portanto, ele é executado independentemente do ambiente no qual reside; ele esta disponível no namespace Microsoft.AspNetCore.Server.Kestrel.

Vamos dar uma espiada nas classes Program e Startup de uma aplicação ASP .NET Core criada com o template Empty, ou se uma aplicação vazia. (veja o artigo anterior)

A classe Program contém o método Main estático, que é o ponto de entrada para o nosso aplicativo.

O método Main chama CreateDefaultBuilder, responsável por criar o host do aplicativo da web.

O CreateDefaultBuilder é um método auxiliar e chama o método UseKestrel para registrar o Kestrel como o servidor que será usado para hospedar nosso aplicativo.(veja o código fonte: aqui )

Existem duas maneiras de usar o Kestrel :

  1. Self-Hosting (Autocontido)
  2. Atrás de outro Web Server

1- Usando o Kestrel no modo Self-Hosting

No modo Self-Hosting as aplicações ASP.NET Core ouvem diretamente as solicitações HTTP da Internet, conforme mostrado na imagem abaixo:

2- Usando o Kestrel atrás de outro servidor

O Kestrel não é um servidor Web completo, e, por isso mesmo ele é mais rápido.

Acontece que não é aconselhável executar o Kestrel como um servidor da Web independente no ambiente de produção. Recomenda-se executá-lo por trás de um servidor da Web completo como IIS, Nginx, apache etc. Nesse cenário, o servidor da Web atua como um servidor proxy reverso.

O servidor proxy reverso recebe a requisição HTTP da Internet e a transmite para o servidor do Kestrel exatamente como é recebido.

O IIS pode receber a requisição HTTP e executar algum processamento útil, como registro em log, solicitação de filtragem, reescrita de URL antes de passar a requisição para o kestrel.

O diagrama a seguir mostra como é isso é implementado:

 

Existem muitas razões pelas quais você deve usar este modelo na produção:

  1. Segurança
  2. Poder limitar sua área de superfície exposta. Ele fornece uma camada adicional opcional de configuração e defesa;
  3. Simplificar o balanceamento de carga;
  4. Configuração SSL;
  5. Apenas seu servidor proxy reverso requer um certificado SSL e esse servidor pode se comunicar com seus servidores de aplicativos na rede interna usando HTTP simples;
  6. Compartilhar IP Único com vários Endereços;
  7. Solicitação de Filtragem, registro em log e URLs, etc.;
  8. Poder garantir que o aplicativo seja reiniciado se houver falhas;

O método CreateDefaultBuilder chama o UseIISIntegration, que informa ao ASP.NET que o aplicativo usará o IIS como um proxy reverso na frente do Kestrel.

Alternativas para Kestrel

O Kestrel não é a única maneira de hospedar aplicativos ASP.NET Core. Há outra implementação de servidor Web disponível no Windows conhecida como HTTP.SYS

O HTTP.sys é um servidor HTTP que roda somente do Windows com base no driver de kernel Http.Sys.

Quando usar o HTTP.sys ?

1 - Quando você precisar expor o servidor diretamente na Internet sem usar o IIS;
2 - Uma implantação interna requer um recurso não disponível no Kestrel, como a autenticação Windows.

O HTTP.sys é uma tecnologia madura que protege contra muitos tipos de ataques e fornece a robustez, a segurança e a escalabilidade de um servidor Web completo. O próprio IIS é executado como um ouvinte HTTP em cima do HTTP.sys.

Temos assim um panorama da atuação do Kestrel e sua importância na ASP .NET Core.

"Bom é louvar ao SENHOR, e cantar louvores ao teu nome, ó Altíssimo;
Para de manhã anunciar a tua benignidade, e todas as noites a tua fidelidade;"
Salmos 92:1,2

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

Referências:


José Carlos Macoratti