3. ...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
4. ...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)
5. ...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...
6.
7. 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
8. Em forma de necessidade
• Documentar
▫ O projeto precisa de documentação
URGENTEMENTE
• Versionar
▫ Sair do sistema GO HORSE
• Dividir responsabilidades
▫ A EUquipe está crescendo
9.
10. 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
11.
12. 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!!!!
13.
14. 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!!!!
15.
16. 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
17. Botando para funcionar
• ISAPI e WSGI no IIS7
▫ Até que existem projetos para isso
Mas aparentemente estão mortos
RIP
18. Caso 1: FCGI
• PYWIN32
• Django-Windows-Tools
http://pypi.python.org/pypi/django-windows-tools
▫ Colocando o IIS para controlar os processos
Python/Django
19. 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
20.
21. Facilidade de implementação
• FCGI
▫ Easy
• Proxy Rewrite
▫ Instalar os módulos necessários - NORMAL
▫ Utilizando:
Django Runserver – NORMAL
Waitress – HARD
Apache - NIGHTMARE
22.
23. Ab –c 10 –n 10000
1200.00 3000.00
1000.00 2500.00
800.00 2000.00
HTML HTML
600.00 FCGI 1500.00 FCGI
RunServer RunServer
400.00 1000.00
Waittress Waittress
200.00 Apache 500.00 Apache
0.00 0.00
Time taken for tests (Seconds) Requests per second
120.00
100.00
80.00
HTML
60.00 FCGI
RunServer
40.00
Waittress
20.00 Apache
0.00
Time per request(ms)
24. Ab –c 100 –n 10000
140.00 2500.00
120.00
2000.00
100.00
HTML 1500.00 HTML
80.00
FCGI FCGI
60.00 1000.00
RunServer RunServer
40.00 Waittress Waittress
500.00
20.00 Apache Apache
0.00 0.00
Time taken for tests (Seconds) Requests per second
14.00
80
12.00
70
10.00 60
HTML
8.00 50 HTML
FCGI
6.00 40 FCGI
RunServer
4.00 30 RunServer
Waittress
20 Waittress
2.00 Apache
Apache
10
0.00
Time per request(ms) 0
Failed Requests
25. Ab –c 1000 –n 10000
70.00 400.00
60.00 350.00
50.00 300.00
HTML 250.00 HTML
40.00
FCGI 200.00 FCGI
30.00
RunServer 150.00 RunServer
20.00 Waittress Waittress
100.00
10.00 Apache Apache
50.00
0.00 0.00
Time taken for tests (Seconds) Requests per second
7.00 10000
9000
6.00
8000
5.00 7000
HTML 6000 HTML
4.00
FCGI 5000 FCGI
3.00
RunServer 4000 RunServer
2.00 Waittress 3000 Waittress
Apache 2000
1.00 Apache
1000
0.00 0
Time per request(ms) Failed Requests
26.
27. 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
28. 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...
29. 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