Se o HTTP é síncrono, por que uma aplicação Web responde a várias solicitações ao mesmo tempo? Vamos entender o que acontece desde que o navegador faz uma solicitação HTTP, passa pelo IIS, é processado pela aplicação e retorna para o usuário.
HTTP e IIS
Como o HTTP é síncrono, mas meu site responde a muitas requisições de uma vez? Parece mágica, mas tem a ver com linhas de código e o jeito que o IIS gerencia tudo.
Uma conversa interessante:
- Quando usar async?
- Async é para operações de IO.
- Então o HTTP é assíncrono?
- Não, o HTTP é síncrono. Dá para acreditar?
- Se é síncrono, por que responde várias requisições de uma vez?
- O navegador faz várias requisições, e o IIS é que gerencia isso.
- Então por que usar
Task
ouasync Task
na minha Controller? - Para melhorar a capacidade de resposta.
Vamos mergulhar no que é o IIS.
Este post será dividido em duas partes:
- Explorando como uma solicitação Web funciona com ASP.NET e IIS.
- Como as Actions assíncronas melhoram o uso das threads no
Worker Process
do IIS.
IIS
O IIS conecta a web e os usuários. Parece complexo? Na verdade, é só um servidor que escuta na porta 80.
Basicamente, é um "computador comum" que, rodando o IIS, vira um servidor. Escutar é a habilidade chave quando falamos de HTTP.
Protocolo HTTP
Temos o Cliente e o Servidor. Eles precisam de uma conexão e regras para se falarem (obrigado, TCP/IP).
Pense assim: o HTTP traz a mensagem e o TCP/IP garante que chegue.
HTTP envia as mensagens e espera o melhor.
IIS não é ASP.NET
Surpresa! O IIS não se preocupa com ASP.NET, ele pode rodar páginas PHP também.
Arquitetura
HTTP.sys é como um super-herói discreto. Ele escuta na camada Kernel e entrega os pedidos para o IIS.
Tem dois modos: Kernel e User. Um é o chefe, o outro ainda está aprendendo.
HTTP.sys coloca os pedidos na fila até que o Worker Process
cuide deles. Se falta alguém, o WWW Service
faz aparecer.
O WAS
lê as configurações e prepara tudo.
Application Pool
Separa os apps como dois fãs de séries que não se entendem.
Worker Process
O Worker Process toma conta das solicitações no ASP.NET.
Processando Requisições
O HTTP.sys captura a solicitação, o IIS processa, tudo isso com a ajuda dos Applications Pools.
O Worker Process
lê a URL e decide: MVC? Ativa o HttpRuntime. ASP.NET Core? Usa o AspNetCoreModule.
Depois, a resposta volta pelo HTTP.sys.
Conclusão
Agora que fizemos piadas, vamos falar sério. Antes de mergulhar em Async e Await no ASP.NET, conheça mais sobre o IIS.
Nos veremos na próxima parte, onde falaremos sobre Thread Pools e como a programação assíncrona ajuda no backend.
Tem dúvidas? Vamos conversar.
Parte 2 disponível!
Quer saber mais? Vá para a Parte 2
Referências
- Introduction to IIS Architectures
- Professional Microsoft IIS - Ken Schaefer, Jeff Cochran, Scott Forsyth, Dennis Glendenning, Benjamin Perkins
- Hosting ASP.NET Core Applications on IIS – A Detailed Look