30
Django no IIS7 Guilherme Medeiros @FReNeTiC_Br www.FReNeTiC.com.br

Django no iis7

Embed Size (px)

DESCRIPTION

Uma análise sobre como rodar o Django no IIS 7 em um servidor Windows

Citation preview

Page 1: Django no iis7

Django no IIS7Guilherme Medeiros@FReNeTiC_Brwww.FReNeTiC.com.br

Page 2: Django no iis7

Era uma vez...

Page 3: Django no iis7

...In a galaxy far, far away...

•Uma empresa bem grandona▫700+ funcionários

•Em um ambiente padronizado▫Microsoft

HyperV no Blade System Servidores Windows Server 2012

Clientes Windows 7 Em testes para o Windows 8

Active Directory

Page 4: Django no iis7

...um pequeno projeto de intranet que cresceu demais...•O que era para ser uma agenda de contatos

▫PHP 5.0▫Mysql com poucas tabelinhas

•Cresceu à saltos quanticos▫Sistema de controle de arquivos (GED)▫Controle de custos de telefonia▫BDGC▫Fluxo de Caixa

Sistema de campeonato de Air Hockey▫MySQL ficou GIGANTE (quase 1GB)

Page 5: Django no iis7

...mas cresceu errado...

•Não acompanhou a evolução do PHP▫PAREM DE RIR!!!!!

▫Do PHP5.0 para o PHP5.5 a linguagem mudou, e melhorou, muito!!!!

▫PAREM DE RIR!!!!!!!

•Sem padrão de projeto▫Nem MVC nem nada =/

•Sem documentação▫Mas meu chefe não pode saber disso...

Page 6: Django no iis7

O mal apareceu!!!!

Page 7: Django no iis7

Em forma de renovação

•MySQL é legal, mas Oracle é muito melhor▫Migrar todo o código escroto de MySQL

puro para um ORM que possa ser utilizado para qualquer banco

Mas vamos usar o Oracle 11g

•Organizar os códigos▫Refatorar, tirar funcionalidades que

ninguém usa, otimizar rotinas, tornar legível toda aquela zona

Page 8: Django no iis7

Em forma de necessidade

•Documentar▫O projeto precisa de documentação

URGENTEMENTE•Versionar

▫Sair do sistema GO HORSE•Dividir responsabilidades

▫A EUquipe está crescendo

Page 9: Django no iis7

E uma estratégia foi traçada

Page 10: Django no iis7

Migra tudo para o PHP5• Seria legal utilizar um framework

▫Mas qual????? Zend, Synfony, Code Igniter, Cake, Laravel, Fuel,

Solar, Aura, Fat Free, Phalcon, YAF, YII, PPI, Kohana, Jelix, Akelos, Slim, Lithium, Sonata...

▫Cansei de escrever

▫Excesso de Dependency Injection▫Excesso de uso do “confuso” Composer▫Futuro incerto

Muitos estão mudando o seu padrão para utilizar DI e Composer...

▫Estrutura de pastas/projetos nem sempre adaptável

Page 11: Django no iis7

Hora de penser no plano B

Page 12: Django no iis7

E por que não Python?•Python é Python

▫Não vou falar da sintaxe da hora, nem das baterias incluidas e nem do resto...

•Python tem uma boa performance para a Web•A gama de frameworks para a WEB é bem

menor▫Não fica a sensação de “mais do mesmo”

•Django▫Tem um filme sobre ele e sua licença de uso

DJANGO LIVRE!!!!

Page 13: Django no iis7

Um estranho no ninho

Page 14: Django no iis7

Django dentro do IIS7.5•Manter todo o padrão Microsoft

Freetards escrevendo #chatiado no Twitter•Controle de acesso feito pelo Active

Directory Molesa isso no IIS

•Suporte Mim programador, tu Administrador da rede com

certificação•Num sei, só sei que foi assim

By Chicó•Por que o desafio foi aceito!!!!

Page 15: Django no iis7

Quem vive de sonho é padeiro!!!

Page 16: Django no iis7

Botando para funcionar•IIS7.5 tem suporte nativo a FCGI

▫Então tem como colocar o Python “dentro” do IIS

•IIS7.5 possui módulos para rewrite e proxy▫Tem que instalar por fora, mas não é coisa do

outro mundo•Windows não é *NIX

▫É melhor FLAME WAR BITCHES!!!

▫Não roda gUnicorn nem uWSGI Na verdade, nada que dependa de PCNTL

Page 17: Django no iis7

Botando para funcionar

•ISAPI e WSGI no IIS7▫Até que existem projetos para isso

Mas aparentemente estão mortos RIP

Page 18: Django no iis7

Caso 1: FCGI

•PYWIN32•Django-Windows-Tools

http://pypi.python.org/pypi/django-windows-tools

▫Colocando o IIS para controlar os processos Python/Django

Page 19: Django no iis7

Caso 2: Proxy Rewrite

•Instalar Modulo Rewrite http://

www.iis.net/downloads/microsoft/url-rewrite

•Instalar Modulo Proxy http://

www.iis.net/downloads/microsoft/application-request-routing

•Rodar um servidor para a aplicação Runserver do Django Apache 2.2 com mod_wsgi Waittress

▫http://docs.pylonsproject.org/projects/waitress

Page 20: Django no iis7

Instalando

Page 21: Django no iis7

Facilidade de implementação

•FCGI▫Easy

•Proxy Rewrite▫Instalar os módulos necessários - NORMAL▫Utilizando:

Django Runserver – NORMAL Waitress – HARD Apache - NIGHTMARE

Page 22: Django no iis7

Rodando

Page 23: Django no iis7

Ab –c 10 –n 10000

Time taken for tests (Seconds)0.00

200.00

400.00

600.00

800.00

1000.00

1200.00

HTMLFCGIRunServerWaittressApache

Requests per second0.00

500.00

1000.00

1500.00

2000.00

2500.00

3000.00

HTMLFCGIRunServerWaittressApache

Time per request(ms)0.00

20.00

40.00

60.00

80.00

100.00

120.00

HTMLFCGIRunServerWaittressApache

Page 24: Django no iis7

Ab –c 100 –n 10000

Time taken for tests (Seconds)0.00

20.00

40.00

60.00

80.00

100.00

120.00

140.00

HTMLFCGIRunServerWaittressApache

Requests per second0.00

500.00

1000.00

1500.00

2000.00

2500.00

HTMLFCGIRunServerWaittressApache

Time per request(ms)0.00

2.00

4.00

6.00

8.00

10.00

12.00

14.00

HTMLFCGIRunServerWaittressApache

Failed Requests0

10

20

30

40

50

60

70

80

HTMLFCGIRunServerWaittressApache

Page 25: Django no iis7

Ab –c 1000 –n 10000

Time taken for tests (Seconds)0.00

10.00

20.00

30.00

40.00

50.00

60.00

70.00

HTMLFCGIRunServerWaittressApache

Requests per second0.00

50.00

100.00

150.00

200.00

250.00

300.00

350.00

400.00

HTMLFCGIRunServerWaittressApache

Time per request(ms)0.00

1.00

2.00

3.00

4.00

5.00

6.00

7.00

HTMLFCGIRunServerWaittressApache

Failed Requests0

1000

2000

3000

4000

5000

6000

7000

8000

9000

10000

HTMLFCGIRunServerWaittressApache

Page 26: Django no iis7

Seu rei mandou dizer

Page 27: Django no iis7

Botando os pingos nos is (ou seria iis?)•FCGI vs Proxy Rewrite

▫FCGI é muito mais fácil de implementar Só foi preciso instalar duas bibliotecas do PyPi

▫O único desempenho relevante no Proxy Rewrite foi o do Apache

Tanto para concorrencia 10 (-c 10) quanto para concorrencia 100 (-c 100) o desempenho do FCGI é apenas metade do Apache

▫As perdas de requisições Com concorrencia 1000 (-c 1000) o Apache passa

a perder 20% dos pacotes▫Nem comento o Runserver e o Waittress

Page 28: Django no iis7

Tá difícil de comparar

•Cada gráfico possui um campo HTML Esse é o desempenho ideal

▫Desempenho do IIS servindo um arquivo estático Index.html

•O objetivo para cada método é ter o mesmo desempenho do HTML

Difícil pra caramba...

Page 29: Django no iis7

Decreto Real

•O ambiente final é controlado▫Sabe-se a quantidade máxima de usuários

que podem entrar simultaneamente (os funcionários da empresa) Mas é difícil acontecer pois existe “turno”

▫Nesse caso, os desempenhos são bem parecidos

Retorno da requisição na casa dos MS (milessegundos)

•A facilidade de uso vence nesse caso▫The winner is

FCGI com Django-Windows-Tools

Page 30: Django no iis7

GG