PHP, IIS e o “old mindset”

Há alguns meses deixei o interior do estado de São Paulo e me mudei para a capital para integrar o time que cuida da área de Web Server Share (WSS) na Microsoft Brasil. Após 5 meses trabalhando como especialista em desenvolvimento web neste time, aceitei o desafio de realizar a mesma função em outro time de produto – Windows Azure.

Acalme-se, este texto não pretende descrever a trajetória profissional do Fabrício. A informação que realmente tem importância para a continuação deste texto e que deve ser considerada neste primeiro parágrafo é: foram 5 meses de trabalho com WSS.

Windows Server Share (WSS)

Como o próprio nome sugere, WSS é uma subarea interna ao time de servidores que possui dentre outras atribuições, a de cuidar da satisfação dos hosters em relação a suíte de tecnologias da Microsoft para este fim.

Como especialista desta área e como parte de minhas atribuições, tive a oportunidade de trabalhar de forma estreita junto aos principais hosters brasileiros entendendo os pontos de problema, propondo soluções, recebendo feedbacks, treinando seus times internos e intermediando junto aos times de produtos na Microsoft Corp. questões transcendentes as minhas possibilidades reais de ajuda.

Atualmente o mercado de hosting no Brasil é liderado basicamente por quatro empresas que juntas, são responsáveis pela maioria esmagadora do mercado. São elas:

  1. Locaweb (São Paulo, SP)
  2. UOL Host (São Paulo, SP)
  3. Tecla / Alog (São Paulo, SP)
  4. Rede Host (Gravataí, RS)

Em ambas tive o prazer de trabalhar de forma bem próxima e hoje posso atestar sobre seu profissionalismo e empenho em sempre entregar ambientes seguros, robustos e altamente disponíveis.

Um dos assuntos mais discutidos em todas as visitas realizadas era: funcionamento do PHP no Internet Information Services. Neste contexto, a primeira pergunta dos responsáveis pelos times técnicos sempre era: “Como está o funcionamento do PHP no IIS?”.

Guarde este ponto, voltaremos a ele em breve.

O ponto principal da discussão que gerou este texto

Ontem (10/04/2012) no trajeto do trabalho para casa, como tradicionalmente faço, resolvi navegar pelo “tweets” de minha  timeline e lá, encontrei a seguinte mensagem do Giovanni Bassi:

O suporte a PHP no Windows/IIS está muito bom!

Naquele momento entendi que a colocação do Giggio foi interessante e pertinente e a “retweetei” com o seguinte comentário:

Segundo a maioria dos hosters, tem performado melhor que no Apache. “@giovannibassi O suporte a PHP no Windows/IIS está muito bom!”

Imediatamente reações (até agressivas) vieram. Em suma, a mensagem trazida por estas reivindicações foi:

PHP com IIS não performa melhor que PHP com Apache e o mercado não diz o contrário mas, se você insiste que sim, informe algum case de sucesso e justificativa técnica que corrobora sua afirmação.

Pois bem, aqui estou para justificar minha posição (baseada em feedbacks de empresas nas quais parte de seu core business trata justamente deste ambiente e que acompanhei por 5 meses, casos reais de aplicações com grandes demandas e aspectos técnicos) em relação a esta questão e responder a boa parte das objeções realizadas na thread.

PHP & IIS: Gambiarra?!

Houve um tempo na história onde, profissionais que trabalhavam majoritariamente com a linguagem PHP não trocavam informações com profissionais que trabalhavam com outras plataformas, especialmente a plataforma .NET. Evidente que os problemas nunca foram derivados das tecnologias (PHP e .NET), mas sim, de algum tipo de preconceito (se com razão ou não, não sou eu quem vai dizer)  que a comunidade open source nutria pela Microsoft. O fato é que, por muitos anos, mesmo com ambas as tecnologias sendo boas, elas nunca convergiram.

Se você trabalha com desenvolvimento web há algum tempo sabe que, as primeiras tentativas para executar aplicações PHP no IIS foram desastrosas. Além de apresentar-se um ambiente extremamente difícil de ser configurado, apresentava baixa performance, problemas de segurança e funcionais. A melhor opção naquele momento sem dúvida era: PHP com Apache preferencialmente sob a plataforma Linux. Felizmente as coisas têem evoluído a níveis outrora inimagináveis.

Nos últimos 4-5 anos, a Microsoft vem mudando este quadro e quebrando paradigmas. Tem se aproximado da comunidade PHP e tem implementado diversas iniciativas para incentivar a interoperabilidade de suas soluções. Como prova desta afirmação, basta analisar o container para execução de páginas server-side da empresa, o IIS (Internet Information Services). Hoje temos PHP trabalhando de forma nativa dentro do IIS (utilizando tecnologias como FastCGI e WinCache, ambas construídas com o apoio maciço da comunidade PHP) e não apenas funcionando, funcionando de forma consistente, suportando grandes cargas de requisições e dados. Além disso, a Microsoft tem investido também na construção de drivers e kits de acesso a dados, para que PHP na plataforma Windows, trabalhe nativamente com SQL Server, a plataforma de armazenamento e gerenciamento de dados da empresa.

Alguns (de muitos) links que comprovam este investimento e aproximação por parte da Microsoft, estão listados abaixo:

Evidentemente que o modelo PHP & IIS ao qual defendo neste texto trata-se do ambiente com a seguinte configuração:
  • Windows Server 2008 +
  • IIS 7.0 +
  • PHP 5.3 +
  • FastCGI 1.5
  • WinCache 1.1 for PHP 5.3
Como já mencionamos anteriormente, qualquer tipo de ambiente anterior a este modelo de fato deixa muito a desejar. Assim, considerando as afirmações realizadas acima, temos elementos suficientes para responder parte das indagações realizadas no twitter.
Afirmação no Twitter: “…PHP no IIS é gambiarra como Mono no Apache.”
Resposta: a Microsoft vem estreitando relações com a comunidade open source de forma geral, especialmente com a comunidade PHP. Além de estreitar relações, a Microsoft vem investindo enormes quantias monetárias no desenvolvimento de um ambiente robusto para executar nativamente aplicações PHP em seu container web. Este alto investimento tem como objetivo justamente prover a característica oposta a acusação, logo, PHP no IIS está muito longe de ser uma gambiarra, sendo hoje, um recurso nativo. E esta evolução está apenas começando.

 Voltando aos hosters: testes e feedbacks

Nas primeiras reuniões com os times técnicos dos hosters, antes de respondermos sobre “o funcionamento do PHP no IIS” faziamos uma nova pergunta: quais são os elementos que compõem sua infraestrutura hoje? Esta pergunta vinha justamente da afirmação já realizada anteriormente: as primeiras tentativas de trabalho de PHP com IIS deixavam muito a desejar. De forma contrária, se a infra atendia aos requisitos mencionados no ítem anterior, então apresentávamos o “value proposition” da nova abordagem.

Como o relacionamento com os hosters mencionados no início deste texto era (e é) muito bom, sempre colhíamos os feedbacks após certo de tempo de funcionamento da tecnologia em ambiente de produção.

Especificamente em relação a PHP & IIS, evidentemente que certos problemas se apresentavam no ambiente de produção dos hosters, da mesma forma que PHP & Apache também (mas isso ninguém comenta, né?!). No entanto, todas as ocorrências apresentadas eram tratadas, resolvidas e, posteriormente “escaladas” junto ao time de produto que por sua vez, adicionava o(s) “issue(s)” ao roadmap de correções para atualizações futuras. Na visão da Microsoft, é assim que se constrói um produto robusto: recebendo feedback de quem está na linha de frente. Além disso, é importante mencionar que, os problemas eram encontrados em uma escala de recorrência muito menor do que os aspectos positivos da plataforma também o eram e aí, nossa resposta ao hoster em relação aquela pergunta antiga estava dada.

Neste ponto, penso ser pertinente transcrever alguns trechos de feedbacks de profissionais dos principais hosters brasileiros em relação ao PHP no IIS. Não adiciono os nomes por não ter conseguido autorização dos proprietários para fazê-lo. Assim que for autorizado (se for autorizado), atualizo este post com estes nomes.

Nas primeiras versões da framework (PHP) para IIS simplesmente não dava para usar. Hoje, já consideramos a hipótese de migrar boa parte de nosso ambiente de produção.

Com PHP 5.3, FastCGI 1.5, WinCache for IIS 7.5, IIS 7.5 e Windows Server 2008 R2 o número de tickets em nosso sistema de suporte caiu cerca de 70%.

Com a nova versão do IIS e do PHP tivemos uma grata surpresa nos testes de performance que realizamos aqui na Rede Host.

Fonte: Rede Host

Aproveitando a citação da Rede Host, gostaria de apresentar os resultados de um teste realizado internamente na empresa. Evidentemente que, para publicar estes resultados, tenho a autorização deles.

Qual foi o teste realizado?

Foi utilizada a ferramenta “ab” do pacote “apache2-essentials” em Linux, devidamente configurada para efetuar 1000 conexões no total e 100 conexões concorrentes, segundo a linha de comando a seguir:

[root@localhost ~]# ab -n 1000 -c 100 http://ipdoservidordeteste/index.php

No arquivo index.php foi colocado apenas o código de verificação de variáveis do PHP:

<!--?php phpinfo(); ?-->

Observação: no servidor IIS (para fins de testes) foi ativado o módulo WinCache Extension for PHP. Os resultados ilustram os testes com e sem esse módulo.

Foram realizadas no total 5 repetições de cada teste para cada um dos servidores e, ao final, tirou-se a média simples dos resultados.

Os ambientes de testes

Servidor 1:

  • 4 núcleos de 2.4 GHZ
  • 6GB de memória
  • Sistema operacional Windows 2008 R2 SP1
  • VHD de 30GB dinâmico
  • IIS 7.5
  • PHP 5.3.10

Servidor 2

  • 4 núcleos de 2.4 GHZ
  • 6GB de memória
  • Sistema operacional Red Hat Enterprise Linux 5.8 64 Bits
  • VHD de 30GB dinâmico
  • Apache 2.2
  • PHP 5.3.10

Servidor 3

  • 4 núcleos de 2.4 GHZ
  • 2GB de memória
  • Sistema operacional Red Hat Enterprise Linux 5.8 64 Bits
  • VHD de 30GB dinâmico
  • Apache2-Essentials (utilizado para realizado os testes de estress)

Os resultados obtidos

O resultado obtido para “PHP & IIS com WinCache habilitado” pode ser visualizado na Figura 1.


Figura 1. Resultado dos testes no primeiro ambiente com WinCache habilitado

Informações extraídas:

Processo: php-cgi.exe
Utilização de CPU: ~ 17%
Utilização de RAM: ~ 6.300K

De forma análoga, o resultado obtido para “PHP & IIS com WinCache desabilitado” pode ser visualizado na Figura 2.

Figura 2. Resultado dos testes no primeiro ambiente com WinCache desabilitado

Informações extraídas:

Processo: php-cgi.exe
Utilização de CPU: ~ 22%
Utilização de RAM: ~ 17.000K

Finalmente, o resultado obtido para “PHP & Apache no Linux” nos dois ambientes dedicados para este fim pode ser visualizado na Figura 3.

Figura 3. O resultado do processamento dos testes nos dois ambientes Red Hat

Informações extraídas:

Processo: php-cgi
Utilização de CPU: ~ 24%
Utilização de RAM: ~ 18.500K

O que o teste nos mostra?

No ambiente utilizado para a realização dos testes, o resultado mostrou-se favorável a execução do PHP em ambiente Microsoft, tenho um ganho de desempenho considerável se comparado ao Apache no Linux.

Utilizando o módulo de Win Cache para IIS e PHP, o ganho de desempenho foi ainda maior, pois reduziu o tempo de execução de cada página e minimizou a utilização de recursos do servidor.

Afirmação no Twitter: “Dizer que “o mercado diz” é muito vago. Se o PHP é tão performático no IIS então me prove até eu me interessar.”

Resposta: Se o mercado brasileiro de hosting é comandado por quatro empresas e dessas 4 três me reportam sucesso na adoção de PHP for IIS 7.5 e Windows Server 2008 R2, me dou ao direito de concluir que SIM, o mercado diz. Está vago agora?. Espero sinceramente que estes feedbacks e os resultados obtidos pelo teste acima, possa ao menos levar aqueles que questionaram a tecnologia a pensar se estão tão certos assim.

Azure?

Se o assunto ao qual estamos dissertando aqui é PHP & IIS, não podemos deixar de fora uma análise ainda que superficial da plataforma de nuvem pública da Microsoft – O Windows Azure. Evidente que meu objetivo aqui não é apresentar os conceitos fundamentais da plataforma mas sim, lembrar aos questionadores de plantão que, toda aplicação web PHP que é executada na plataforma Azure está sob o “guarda-chuva” do IIS com os mesmos componentes mencionados no início deste texto.

Pois bem, se o ambiente técnico de execução é o mesmo apresentado anteriormente, talvez faltem cases para Azure. Não, não faltam. Existem centenas de grandes players que executam aplicações de grande porte (High Scalability) no Azure. Para apresentar neste post, fui autorizado a publicar dois players: um site comum e uma aplicação de nível mais baixo. São elas:

  • Site de moda da Lilian Pacce: é um site pessoal de uma das mais badaladas comentaristas de moda do Brasil. Seu blog chega a 60.000 acessos mês. Para um blog, é muito não? PHP & IIS são responsáveis por sua execução em uma Web Role simples. Se quiser visitar o blog, basta seguir o link.
  • Vivavie: sistema para acúmulo de pontos através de suas atividades na internet. Com o formato de rede social, você consegue gerenciar seus pontos, conectar seus amigos e receber promoções exclusivas de produtos de acordo com seu perfil. São mais de 50 milhões de acessos mês (é High Scalability?). O sistema é escrito em PHP e roda sob IIS na plataforma Azure.
Afirmação no Twitter: “é? me diz então um site grande com PHP que esteja rodando no IIS.

Resposta: Existem N outros casos. Uma pena realmente não poder dizer. Mas acho que 50 milhões de acessos devem servir…

Porque o PHP tem funcionado tão bem no IIS?

Existem três elementos principais nos quais os esforços do time de produto da Microsoft foram concentrados para disponibilizar um ambiente robusto para a execução de PHP no IIS: o próprio IIS, o FastCGI e o WinCache.
Eu poderia discursar sobre cada um destes elementos aqui apresentando as principais melhorias implementadas, mas seria algo como reinventar a roda. Assim, abaixo listo os principais links que descrevem em detalhes essas features:

Conclusões

Houve um tempo na história do desenvolvimento para web em que, “rodar” aplicações web escritas em PHP, só funcionava de forma satisfatória no Apache e preferencialmente, com alguma distribuição de Linux. Felizmente esta realidade mudou e desenvolvedores PHP podem usufruir da completude da plataforma Windows para escrever suas aplicações.

IIS é hoje uma das principais opções para hostear aplicações web, proporcionando altos níveis de segurança e robustez.

Afirmar que PHP rodando no IIS é gambiarra demonstra no mínimo desconhecimento do mercado.

VAMOS QUEBRAR O “MINDSET” pessoal!

468 ad

10 Comentários

  1. Fabrício,

    Muito bom o post, este tipo de post com número ajudam muito a ver as inovações que a Microsoft e outras empresas ou comunidades fazem.

    Parabéns!

    • Obrigado Fabian. Está na hora da galera começar a olhar PHP na plataforma .NET de forma diferenciada. []s

  2. É triste quando os camaradas transformam logomarca em religião.

    Começam se achar os detentores da verdade e que um quadro tecnológico e mercadológico nunca poderá mudar.
    Pois tem mudado e eles estão com a mente em 1990 ainda.

    Demonstram um preconceito ridiculamente infantil e falam hipocritamente sobre ter mente aberta.

    Quando eles menos imaginarem, serão dinossauros e o mercado vai vomitar eles.

  3. Post fantastico!!! Eu participei de 2 cases com a migraçao do PHP em cima do apache Para o IIS…. Esses portais tem pelos 1 milhao de pages view/mensal… E sem sombra de duvidas é mais performatico que o Apache… Quem fala q PHP so roda bem em apache… Creio q esteja um pouco fora do mundo de tecnologia… Ou seja, vamos pensar fora da caixa!!!

    Abs,

  4. Toma essa “istas”!
    iuHAuih
    Ótimo post Fabrício!
    Parabéns!

  5. Muito esclarecedor, confesso, que ha algum tempo atrás (2 ou 3 anos) tentamos usar PHP com IIS, se não me engano oferecido pela GoDaddy na época, hoje temos cerca de 400mil acessos por mes neste site, e estamos pensando seriamente em começar a usar azure/iis/php e este post ajudou muito!

    Obs. Cara ainda existe muito disso na net, meu é melhor que o seu (tecnologia), será que um dia vão entender que o melhor é a interoperabilidade, e que para cada caso, você analisa a melhor tecnologia, citando o Giovanni Bassi “Cara sou desenvolvedor, eu programo bem em C#, PHP, Ruby” não tem tecnologia melhor, tem a tecnologia certa para o cliente certo!

  6. Bom, vamos lá…

    Primeiramente gostaria de passar por cima de toda retórica pró (e anti) Microsoft. A questão no Twitter não foi essa, até porque ouso afirmar que em boa parte das situações, um site mediano em C# / IIS pode ser muito mais “performático” do que um equivalente em PHP/Apache.

    Partindo direto para os testes. Creio que um teste invocando apenas phpinfo não seja exatemente um bom termômetro para um teste comparativo. Qualquer site envolve no mínimo operações com banco de dados e como a maioria dos sites em PHP usam MySQL, deveria-se ter no mínimo feito uma comparação usando chamadas a esse banco. Digo isso pq analisar itens de forma isolada causa conclusões precipitadas como achar que uma linguagem é fácil apenas vendo uma apresentação da construção de um Hello World.
    Acredito que qualquer pessoa que tenha “conhecimento de mercado” saiba disso.

    Você utilizou no teste uma ferramenta que proporciona incremento de performance no IIS, mas aparentemente não usou nada equivalente no Apache/Linux. Com o recurso desabilitado os resultados ficaram próximos da solução Apache/Linux, observando que em ambos os casos Windows, o número de requests/segundo foi inferior ao Apache/Linux.

    É interessante observar também que os testes foram feitos em ambiente virtualizado, considerando a menção ao VHD. Obviamente que uma máquina Windows virtualizada em Windows tende a ter performance superior a uma maquina Linux virtualizada dentro do Windows, pelas óbvias (e elogiáveis) otimizações feitas pela Microsoft.

    Indo ao termo “mercado”:

    Sim, realmente, as 4 empresas são as maiores “no” Brasil, mas não há nada que indique que a maioria dos sites de brasileiros esteja hospedados com eles, o que “relativiza” o uso deles como referencial. Contribui ainda para essa relativização os constantes problemas que tanto a Locaweb quanto a UolHost apresentam. Basta fazer uma busca aos termos “uolhost” e “locaweb” no Twitter para verificar a quantidade de reclamações (algo que também ouço quase que diariamente dos meus conhecidos que trabalham com desenvolvimento web).

    Os relatos que vejo pela internet (por exemplo, os citados no site http://highscalability.com/ ) com a descrição de infraestruturas utilizadas em sites (tema que me interessa muito), em sua maioria são de soluções Apache / Linux, ou ainda ,o que vem crescendo muito, Nginx / Linux. A grande maioria desses sites tem um volume altíssimo de requests e vivem criando soluções mirabolantes para aumentar a performance de suas soluções, alguns chegando inclusive ao ponto de alterar o código fonte do Banco de Dados (como é o caso do Twitter com o Mysql) ou escrever compiladores próprios de PHP (como é o caso do Facebook). Não creio que a escolha deles (e de várias outras pequenas e grandes startups espalhadas por milhares de instâncias Linux no Amazon AWS, como Instagram, Pinterest, etc) tenha sido feita por paixão ao software livre, por ódio a Microsoft ou mesmo por falta de grana para pagar licenças Windows.

    Usar PHP no IIS ou Mono no Apache apenas para “quebrar regras” não faz muito sentido para mim. Se eu preciso usar PHP, porque não aproveito e já rodo em instâncias Linux que são muito mais baratas e terei a garantia que qualquer biblioteca de terceiros irá rodar? E por outro lado, se já desenvolvo em C# (lembrando que a maioria dos devs C# usa Visual Studio/Ambiente Windows, então o problema não é dinheiro), por que não rodar em um servidor IIS/Windows, até pq normalmente desenvolve-se aplicações C# que gravam seus dados em SQL Server.

    Na minha opinião, old mindset é estar fechado em um mundo (no caso, Microsoft) e acreditar que ele possui a melhor solução em todas as situações.

    • Cássio entendo seus pontos, acredite.

      Eu sempre defendi e continuo defendendo a ideia de que “bala de prata” não existe. O fato de acreditar na Microsoft e em suas tecnologias não faz de mim um enclausurado neste universo. Trabalhei em empresas que utilizavam Java e PHP por 3 anos e não teria o menor pudor em adotá-las novamente para uma solução se esta as pedissem. Meu trabalho de mestrado inclusive, teve parte escrita em Java (porque atendia a demanda melhor que outras tecnologias). O que estou tentando mostrar é: PHP & IIS deixou de ser uma “gambiarra”. A realidade é que ambas as tecnologias (PHP e IIS) passaram por uma forte evolução e já podem ser consideradas “sim” em ambiente de produção. Penso que “não é porque já foi melhor (PHP e Apache), que sempre será melhor.

      Em relação ao teste, vamos lá, temos que saber perder. Nos quesitos avaliados, o Apache perdeu, simples assim. Pode ser que para outros aspectos, isso se repita ou não (prefiro não conjecturar e sim trabalhar com números, que foi o que apresentei).

      Em relação ao “mercado”, a minha afirmação “o mercado diz” foi justificada no post. Você pode ter uma leitura diferente, sem problemas. Além disso, para dizer “mercado” incorporei a plataforma Azure no contexto.

      Não creio que tanto eu quanto você consigamos mudar as opiniões um do outro. Respeito sua opinião e estou certo de que respeita meus pontos também.

      Espero que sinceramente, esta discussão tenha servido para apresentar a comunidade algum tipo de valor.

      []s

    • Cássio, Tive que efetuar testes aqui na empresa para encontrar formas de melhorar a perfomance do IIS, então usei O Wincache, e fiz diversos testes de comparação entre IIS com Wincache x IIS sem Wincache x Apache. referente a tua afirmação dos testes terem sido efetuados em ambiente virtualizado Microsoft, meus colegas do time de Linux aqui da empresa disseram o mesmo. Então eles prepararam um servidor físico com instalação do CentOS para efetuarmos os testes. E a performance continuou sendo superior, e eles tiveram que aceitar que o PHP está “trabalhando” melhor com o IIS. A ferramenta de testes é nativa para Linux, do pacote apache2-essentials, para efetuar testes de benchmarking do apache. Além disso foi feito testes de comparação com wordpress que tem mais conteúdo do que uma página tanto no Windows Quanto CentOS e a performance continuou melhor no Windows.

  7. Pessoal,

    Acompanho o crescimento do PHP no IIS desde as primeiras versões no IIS, e realmente existe duas épocas, antes e depois do FastCgi. Realmente foi uma melhoria enorme na performance do PHP no IIS, o reaproveitamento dos processos. Primeiro saiu no Zend, sendo necessário instalar o software deles para gerenciar o PHP no servidor Windows, e depois foi lançado para implementar no IIS.
    Depois disso a Microsoft começou a participar ativamente nos lançamento das novas versões do PHP com a criação do http://windows.php.net/, e performance melhorou mais ainda.
    Eu também trabalho com apache, e o que diferencia um do outro é a pessoa quem configura. Como o PHP já roda já tem um bom tempo bem no linux, material explicando têm muito, ensinando facilmente como instalar e muita gente sequer sabiam que o PHP rodava no Windows, muitos ficavam achando que eu estava enganado. Hoje em dia está diferente, quase todos já sabem e uma grande parte confia em aplicações rodando em PHP no IIS. Volto a dizer, é sempre necessário efetuar alguns tunning no arquivo de configuração do fastcgi para melhorar ainda mais o FastCgi, como é bom fazer no apache também.
    Hoje em dia confio muito no IIS como também no Apache, escrevi muito sobre o IIS e também sobre o PHP no meu blog, e volto a dizer, usem e abusem do PHP no IIS que é altamente confiável!

Deixe um comentário

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


nove − 3 =