SlideShare uma empresa Scribd logo
1 de 30
Django no IIS7
Guilherme Medeiros
@FReNeTiC_Br
www.FReNeTiC.com.br
...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
...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)
...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...
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
Em forma de necessidade
• Documentar
 ▫ O projeto precisa de documentação
   URGENTEMENTE
• Versionar
 ▫ Sair do sistema GO HORSE
• Dividir responsabilidades
 ▫ A EUquipe está crescendo
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
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!!!!
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!!!!
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
Botando para funcionar
• ISAPI e WSGI no IIS7
 ▫ Até que existem projetos para isso
    Mas aparentemente estão mortos
      RIP
Caso 1: FCGI
• PYWIN32
• Django-Windows-Tools
     http://pypi.python.org/pypi/django-windows-tools
 ▫ Colocando o IIS para controlar os processos
   Python/Django
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
Facilidade de implementação
• FCGI
 ▫ Easy
• Proxy Rewrite
 ▫ Instalar os módulos necessários - NORMAL
 ▫ Utilizando:
    Django Runserver – NORMAL
    Waitress – HARD
    Apache - NIGHTMARE
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)
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
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
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
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...
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
Django no iis7

Mais conteúdo relacionado

Semelhante a Django no iis7

Monitoramento de System Calls com DTrace
Monitoramento de System Calls com DTraceMonitoramento de System Calls com DTrace
Monitoramento de System Calls com DTraceRafael Barbolo
 
HTTP, Requisição e Resposta
HTTP, Requisição e RespostaHTTP, Requisição e Resposta
HTTP, Requisição e RespostaThiago Rondon
 
QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)
QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)
QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)Mayara Fernandes
 
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Fabiano Weimar
 

Semelhante a Django no iis7 (7)

Performance HyperV
Performance HyperVPerformance HyperV
Performance HyperV
 
Monitoramento de System Calls com DTrace
Monitoramento de System Calls com DTraceMonitoramento de System Calls com DTrace
Monitoramento de System Calls com DTrace
 
HTTP, Requisição e Resposta
HTTP, Requisição e RespostaHTTP, Requisição e Resposta
HTTP, Requisição e Resposta
 
Servidor apache
Servidor apacheServidor apache
Servidor apache
 
QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)
QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)
QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)
 
Aplicações web realtime
Aplicações web realtimeAplicações web realtime
Aplicações web realtime
 
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
 

Django no iis7

  • 1. Django no IIS7 Guilherme Medeiros @FReNeTiC_Br www.FReNeTiC.com.br
  • 2.
  • 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