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:
- Locaweb (São Paulo, SP)
- UOL Host (São Paulo, SP)
- Tecla / Alog (São Paulo, SP)
- 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:
- Microsoft é uma das empresas que mais contribuem para o desenvolvimento de software livre
- Microsoft e a comunidade Open-Source
- PHP como feature nativa do IIS
- Portal da comunidade PHP SP rodando sob IIS (vide rodapé)
- Microsoft e PHP – Uma parceria de sucesso
- Windows Server 2008 +
- IIS 7.0 +
- PHP 5.3 +
- FastCGI 1.5
- WinCache 1.1 for PHP 5.3
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]
[/php]
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.
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.
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?
- Texto oficial sobre WinCache: http://br2.php.net/manual/pt_BR/intro.wincache.php
- Informações sobre WinCache no site oficial do IIS: http://www.iis.net/download/wincacheforphp
- Excelente post sobre WinCache: http://blog.calevans.com/2009/09/06/wincache/
- Meu post sobre FastCGI: https://fabriciosanchez.com.br//?p=2254
- Site oficial do FastCGI for IIS: http://test.fastcgi.com/drupal/node/2
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!
Pingback: Retrospectiva 2012 – Fabrício Sanchez