View
768
Download
1
Category
Preview:
Citation preview
OU?
COM?
Uma questão de arquitetura
EU Sidney F, drogado e prostituido.
Há 6 anos ainda luta para se livrar do
WebForms. Ativista contra a entrada de novas
drogas na vida do desenvolvedor moderno
como Coffeescript.
Internet
Primeiro Passo Admita que você tem um problema
“Um homem que
não conhece sua
história está fadado a
repeti-la”
IIS 1.0
• 1995
• ONE-WAY
• Apenas arquivos estáticos
• Arquitetura Monolitica
(MTX.EXE)
• Add-on do Windows NT 3.51
IIS 2.0
• 1996
• TWO-WAY, sofrivel
• Surge o CGI
• Ainda é Monolitico
• Embutido no Windows NT 4
IIS 3.0 e 4.0
• 1998
• TWO-WAY, ainda sofrivel
• Ainda é Monolitico
• Windows NT 4 (Service Pack 3)
• IIS 4 era Option Pack
IIS 5.0 • 2000
• TWO-WAY, fácil
• Core Monolitico, com pontos
de extensão
• DLLHOST.EXE
• Windows 2000
• ASP é criado (uhuuuuu)
IIS 6.0 • 2003
• TWO-WAY, bem fácil
• Core com multiplos niveis de
isolamento
• W3WP.EXE
• Windows 2003 e XP
• .NET entra em cena
IIS 7.0 e 7.5
• 2008
• MULTI-WAY, bem fácil
• Completamente reescrito
• Windows 2008 e Vista
• Arquitetura baseada em plugins
Overview of IIS 6.0
Architecture
http://www.microsoft.com/technet/prodtechnol/
WindowsServer2003/Library/IIS/843df643-1dbb-
4fb6-910d-ec1965fa9e43.mspx?mfr=true
Internamente
é assim
HTTP.SYS
http://sitequalquer.com/TESTE.HTM
http://sitequalquer.com/IMAGEM.PNG
http://sitequalquer.com/DrogaPesada.aspx
Static Provider .NET Provider
http://sitequalquer.com/RotaLouca/13
W3WP.EXE
SVCHOST.EXE
Como está
configurado o
mapeamento de
requisições?
var result =
command.ExecuteNonQuery(
“UPDATE Tabela SET Ativo=1“
);
A thread fica parada
apenas aguardando a
resposta do Banco de
Dados
Tempo do I/O L1: 3 instruções
L2: 14 instruções
RAM: 250 instruções
DISK: 41,000,000 instruções
NETWORK: 240,000,000 instruções
var result =
command.ExecuteNonQuery(
“UPDATE Tabela SET Ativo=1“
);
// 240.000.000 + tempo de
processamento do banco depois
print(result.TotalCount);
.NET Provider
Program Counter
Para de Processar
Program Counter
Volta a Processar
}
Milh
ões
de inst
ruçõ
es
perd
idas
6 T
hre
ad
s o
cup
and
o m
em
ória
Como evitar este
desperdicio?
NodeJS
http://s3.amazonaws.com/four.livejournal/20091
117/jsconf.pdf
Porque NodeJS?
Eu gosto e gosto não
se discute.
Como funciona a
arquitetura no
NodeJS?
LIBEV
http://sitequalquer.com/TESTE.HTM
http://sitequalquer.com/IMAGEM.PNG
http://sitequalquer.com/DrogaPesada.aspx
Static Provider Sua Aplicação
http://sitequalquer.com/RotaLouca/13
JS Libraries
var result =
command.ExecuteNonQuery(
“UPDATE Tabela SET Ativo=1“,
function(result){
// faz algo com o retorno
}
);
Node JS
function (result) { … }
LIBEV 1a Requisição
PC processa
Código chama IO
PC volta p/ LIBEV
O tempo que para o IO retornar e
acionar o callback pode levar muito mais
de 240.000.000 instruções se lembram?
Vamos liberar a Thread para processar
outra coisa
É possivel usar o
NodeJS junto com
IIS?
Internamente
ficaria assim
É possivel desenvolver
considerando o IO
Bloqueante no .NET?
Mas meus sistemas
legados é possivel
mudar essa arquitetura?
Dúvidas?
Só por hoje Obrigado
Recommended