Fork me on GitHub
Você esta em:Home » Desenvolvimento » Você gostaria de melhorar em até 500% a performance do seu Magento com Amazon + Nginx + Varnish?

Você gostaria de melhorar em até 500% a performance do seu Magento com Amazon + Nginx + Varnish?


Recentemente o novo White Paper do Magento mostrou que em testes se teve um aumento de até 500% na performance ao utilizar Nginx + Varnish

É neguinho, o bagulho é doido!!! Eu confesso que para chegar há uns 500% deve-se ter muitas configurações no servidor, mas para chegar há +/- uns 250 é facim rs

Cache Optimized with Nginx: Nginx + PHP-FPM + Varnish — A solução do momento! Vários benchmarks estão demonstrando Nginx+PHP-FPM como uma solução rápida e robusta para magento, além de bastante simples.

O teste foi feito com uma instalação padrão do magento enterprise, com 50 categorias e 100.000 produtos(O Loko meu!!!!) cadastrados. Foram utilizados os softwares Siege e Gatling para as simulações.

Confirmação da realidade:

In our performance testing the two optimized configurations—Cached Optimized with Varnish and Cache
Optimized with Nginx performed exceptionally well. The external cache provided by Varnish and Nginx with
PHP-FPM shows improvements of up to 500% compared to the Standard configuration (Apache + MySQL).

Bem apesar de se tratar de algo novo, o pessoal não perde tempo e já se tem milhares de posts na web descrevendo cada um desses itens. Em minhas pesquisas até o momento cheguei no seguinte ponto: Amazon ( EC2 + RDS + S3 ) + Nginx + PHP-FPM + PHP APC + Varnish + Gzip, vejam a velocidade que ficou o meu teste http://177.71.246.143

Existem ainda um outro e-commerce que não foi feito em Magento mas usam essas mesmas configurações, vejam http://csprinter.com

Mais ainda existe muita coisa para ser estudada, e confesso que consegui colocar um server com as configurações acima em 3 dias, isso sem antes nunca ter mexido com Amazon. Só em uma parte que tratava o Firewall do Amazon fiquei rs… 8h para descobrir rsrrsrs. É fogo, aprender sozinho é brabo rs. Bem Sozinho não por contei com ajuda de uns amigos meus como o Ricardo Martins que escreveu um super post descrevendo uma parte braba que bastou seguir a receita de bolo.

Veja mais detalhes nesse post feito pelo brother Alex Bragahttp://www.alexbraga.net/novo-white-paper-com-testes-de-perfomance-do-magento.html#more-254

Em seu blog o brother Ricardo Martins explicou a parte cabulosa de como configurar o Magento com NGinx na Amazon. Bem vamos lá então, não irei ser bobo e explicar tudo aquilo que os brother fizeram, mas irei passar abaixo o caminho das pedras para estudos dos mesmos.

Mas eu não sou Sysadmin, porque preciso saber disso?

Você já ouviu falar em DevOps? Se não, se ligue! rs Veja mais em:

http://webholic.com.br/2011/05/09/saiba-por-que-a-importancia-do-movimento-devops-so-ira-crescer/

Acorda!!! Atualize-se rsrs

Amazon Webservices

A Amazon Web Services oferece um conjunto completo de serviços de aplicativos e infraestrutura que permitem que você execute praticamente tudo na nuvem: desde aplicativos empresariais e projetos de dados grandes a jogos sociais e aplicativos móveis.

Um dos benefícios essenciais da computação em nuvem é a oportunidade de substituir diretamente gastos com a infraestrutura principal por preços variáveis baixos, que se ajustam de acordo com sua empresa.

Resumindo um ótimo cloud que acabara de vez com qualquer provedor no Brasil! Em meus testes achei ele melhor que Alog (Para mim a Alog era o melhor IDC aqui no Brasil, num cloud da Alog já cheguei a ver clientes pagando de 1.000 à 2.000. O Server era show um Opteron Quad Core Xeon com 16gb de memória Ram, porém de nada adianta um server desse se o uptime e o SLA não são respeitados)

A minha comparação foi em cima de uma instancia Micro da Amazon. Com a instancia Micro vc poderá ficar um ano sem pagar nada e depois vai para uns +/- 40usd, lógico isso pode chegar a até o mesmo preço que meus clientes pagavam na Alog, isso depende de suas configurações no Amazon.

Amazon Webservices

Para os passos a seguir recomendo o auxilio de um sysadmin Linux ou no mínimo que se tenha conhecimentos avançados na adm do Linux

Navegando na web encontrei um super ebook feito pela galera do Planeta Tecnologia. Com ele vc facilmente entenderá como levantar uma instancia no Amazon, configurar IP, configurar acesso ao SSH e SFTP, setar os DNS e configurar o Registro.br e algumas configurações do LAMP, mas essa parte eu recomendo usarem o tutorial feito pelo Ricardo Martins(próximo tótico).

Siglas básicas da Amazon rs (Supletivo, supletivo…)

  • EC2 (Rapidamente ao ponto o server cloud)
  •  RDS (Rapidamente ao ponto o Banco de Dados)
  • S3 (Rapidamente ao ponto o CDN)
  • Cloudwatch (Rapidamente ao ponto um server de relatórios e envios de alertas)
  • Route53 (Rapidamente ao ponto um server de configurações do DNS)
  • SES – (Rapidamente ao ponto um server para envio de emails)

01 – Download do Ebook Planeta Tecnologia (https://s3-sa-east-1.amazonaws.com/jpamznsp/ebook_AWS_Portugues.pdf)

Configurando Magento com NGinx

Realmente o Ricardo fez uma receita de bolo, Não fez firula e foi direto ao ponto! O tutorial explica como se instalar o Apache, ops! Já foi mano rsrs agora é a vez do Nginx

Site oficial do projeto http://wiki.nginx.org/Main | http://nginx.org/en/ 

Nginx - O Nginx é um servidor web open source que faz praticamente tudo que o Apache faz, só que muito mais rápido! Sim, a época de ouro do Apache acabou, temos um novo garoto popular na área.

le possui um excelente desempenho e um consumo de memória baixíssimo, o que o torna ideal para o VPS que temos em mãos para este tutorial. Logue-se via SSH no seu VPS com os dados enviados pela hospedagem e vamos colocar as mãos na massa!

OBS: Sabe o Htaccess? Joga fora! O Nginx não usa o htacces! (É nessa parte é uma pena :( Eu já estava aprendendo a proteger meus arquivos por htacces rsrs) Mas não se preocupe vc não ficará na mão! Configurando o Nginx ele irá fazer tudo que o htaccess faz. Acho que esse é boom! do tutorial do Ricardo

PHP-FPM - O PHP-FPM é uma alternativa ao PHP FastCGI com algumas funcionalidades adicionais voltadas a sites com grandes números de acessos, o que é exatamente o que estamos querendo aqui.

PHP-APC – Resumindo mal e porcamente, o APC é um cache de op-code que aumenta significativamente o desempenho do seu site.

02 – Tutorial de como configurar o Magento com NGinx na Amazon. (http://ricardomartins.net.br/magento-2/configurando-magento-com-nginx-na-amazon/)

Observações Importantes:
Segue o comando Linux para trocar as permissões dos arquivos e pastas

Para mudar a permissão dos arquivos: $ find . -type f -exec chmod 644 {} \;
Para mudar a permissão das pastas: $ find . -type d -exec chmod 755 {} \;

$chmod -R o+w media var
$chmod o+w app/etc

Ajustando o Gzip

gzip é um método de compressão de arquivos (lembram do ZIP e do RAR?) utilizando também no mundo WEB.. O seu navegador consegue receber um arquivo .js compactado com gzip e utilizá-lo da mesma forma.

Edite o arquivo sudo vi /etc/nginx/nginx.conf

Eu comentei o do Ricardo e Coloquei abaixo asim:

#gzip on;
#gzip_comp_level 2;
#gzip_proxied any;
#gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;

# Habilita o gzip Thiago Belém:
gzip on;
gzip_http_version 1.1;
gzip_vary on;
gzip_comp_level 6;
gzip_proxied any;

# Mime-types que serão compactados
#gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;

# http://blog.leetsoft.com/2007/7/25/nginx-gzip-ssl
gzip_buffers 16 8k;

# Desabilita o gzip para alguns navegadores
gzip_disable “MSIE [1-6].(?!.*SV1)”;

Ou seja, só adaptei o tutorial do brother Thiago Belém http://blog.thiagobelem.net/habilitando-gzip-em-servidores-nginx/

Instalando o Varnish (O Cara!)

Red Bull pode até te dar asas, mas é o Varnish Cache que fará seu blog voar

Varnish é um acelerador HTTP projetado para sites web dinâmicos com alto volume de conteúdo . Em contraste com outros aceleradores HTTP, muitos dos quais começaram a ser projetados como proxies do lado cliente ou servidores gerais, o Varnish foi projetado desde o início como um acelerador HTTP.

Ele é como os famosos tanks dos MMORPGs: fica na linha de frente levando porrada e deixando as coisas mais fáceis para quem está atrás poder fazer seu serviço. Além de acelerar seu website, o Varnish também pode ser uma bela linha de segurança contra ataques DDoS, então o considero essencial em qualquer setup.

Basicamente ele fará um full cache de seu site, mas preservará algumas partes dinâmicas de seu site ou e-commerce.

Veja mais em: http://www.fabrizio-branca.de/make-your-magento-store-fly-using-varnish.html

Para instalar o varnish no Amazon Linux, execute o comando:

$ yum install varnish

Após instalado edite o aquivo executando o comando abaixo:

$ sudo vi /etc/varnish/default.vcl

Edite a linha onde seta o backend default com seu ip externo ou eu achei melhor colocar assim 127.0.0.1 e coloque a porta padrão do seu Nginx, onde a minha é a 80.

OBS: Por default vem o Varnish vem confg na portal 6081 mude para 80.

backend default {
set backend.host = “127.0.0.1″;
set backend.port = “80″;
}

Obs: A configuração acima demostra de forma básica a utilização do Varnish, e existem outras configurações avançadas caso queira deixar ainda mais tunnado.

Agora basta executar os comandos

$ service php-fpm restart

$ service nginx restart

$ service varnish restart

Uma última configuração seria executar o comando

$ ntsysv

E marcar o Varnish, para que sempre quando o server for reiniciado, inicie de forma automática também o Varnish.

OBS: Para instalar o módulo Page Cache é pré requisito se ter o Varnish instalado, ou seja, pelo que eu vi ele é ligado ao Varnish diretamente, casando o funcionamento do Varnish com o Magento. Um espetáculo! Pois o módulo acaba virando uma interface do Varnish, facilitando as configurações do mesmo!

Veja que ele cria na pasta /app/etc do Magento o seguinte arquivo XML contendo:

<config>
<global>
<cache>
<request_processors>
<varnishcache>Phoenix_VarnishCache_Model_Processor</varnishcache>
</request_processors>
</cache>
</global>
</config>

Ou seja, ele não se trata de apenas um módulo, ele faz muito mais do que isso e deixa o seu Magento redondo para trabalhar com o Varnish! ;)

O Módulo PageCache Varnish para Magento

O módulo se chama PageCache powered by Varnish e pode ser encontrado no magento connerct em http://www.magentocommerce.com/magento-connect/pagecache-powered-by-varnish.html

Com ele é possível configurar alguns parametros do uso do varnish, como por exemplo informa-lo as variáveis do Magento como: ___store,___SID,currency,order e quais as páginas que não executará o varnish como a onestepcheckout e a checkout,…

Depois de instalado vá em Sistema/Configurações/Avançado/Sistema/PageCache powered by Varnish settings

Em Disable caching for routes, coloquei assim:

  • checkout
  • customer
  • moneybookers
  • paypal
  • wishlist
  • onestepcheckout
  • onepagecheckout
  • admin

E em Disable caching vars, coloquei assim:

___store,___SID,currency,order

Pronto seu server esta configurado e super rápido no Amazon + Nginx + Varnish + PHP-FPM + Gzip + PHP APC

Bônus 171 – A bosta do Ioncube :(

Bem geralmente existem algumas empresas que estragam nossa brincadeira compilando o módulo rs, entao como fiquei 4h só para conf isso abaixo explico de forma simples como conf o Ioncube no Amazon:

Primeiramente baixe o Ioncube, verifique qual o tipo do seu sistema o meu é 64bits http://www.ioncube.com/loaders.php

Para o tutorial baixei esse: http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz

1. Download ionCube loaders

# wget http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz

2. Extraia

# tar zxvf ioncube_loaders_lin_x86.tar.gz

3. Mova para /usr/local

# mv ioncube /usr/local/

4. Adicione a referencia em php.ini file

Depending on PHP version select ioncube_loader_lin_5.x.so and ioncube_loader_lin_5.x_ts.so files

# ls /usr/local/ioncube/
ioncube_loader_lin_4.1.so ioncube_loader_lin_4.4.so ioncube_loader_lin_5.1.so ioncube_loader_lin_5.3.so
ioncube_loader_lin_4.2.so ioncube_loader_lin_4.4_ts.so ioncube_loader_lin_5.1_ts.so ioncube_loader_lin_5.3_ts.so
ioncube_loader_lin_4.3.so ioncube_loader_lin_5.0.so ioncube_loader_lin_5.2.so ioncube_loader_lin_5.4.so
ioncube_loader_lin_4.3_ts.so ioncube_loader_lin_5.0_ts.so ioncube_loader_lin_5.2_ts.so ioncube_loader_lin_5.4_ts.so

# vi /etc/php.ini

zend_extension=/usr/local/ioncube/ioncube_loader_lin_5.3.so
zend_extension_ts=/usr/local/ioncube/ioncube_loader_lin_5.3_ts.so

5. Verifique se esta tudo ok

Digite no console do ssh assim:

$php -v

Se aparecer um erro com o código  ELFCLASS32 significa que a versão baixada do Ionxube esta errada. baixe a versão correta.

Agora se aparecer assim:

Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
with the ionCube PHP Loader v4.2.2, Copyright (c) 2002-2012, by ionCube Ltd.

Configurando o APC

edite o arquivo /etc/php.d/apc.ini

apc.enabled=1
apc.shm_size=512M
apc.num_files_hint=10000
apc.user_entries_hint=10000
apc.max_file_size=5M
apc.stat=0
apc.optimization=0
apc.shm_segments=1
apc.enable_cli=1
apc.cache_by_default=1
apc.include_once_override=1

Configurando acesso FTP com o vsftpd

Como já vimos, para se acessar o server da Amazon é necessário ou o arquivo .PEM ou do arquivo .PPK. Só que além de não ficar elegante de passar isso para nossos clientes que estão acostumados com acesso por FTP com usuário e senha, ainda se abre o acesso a todo o Sistema Operacional pelo SSH.

Então acabei criando esse tutorial que vou explicar etapa por etapa de como configurar o acesso pelo FTP com o serviço vsftpd

E agora? Onde esta meu site? Como faço para editar meus arquivos?

Com o Nginx seu site ficará na pasta /usr/share/nginx/html/

Ativando acesso via FTP ao seu servidor do Amazon

Primeiramente libere as portas de acesso no seu console do Amazon em SecurityGroups
Portas a serem liberadas

  • 20-21
  • 1024-1048

Entre via ssh no seu terminal e mude para o super usuário (Nota quando não estamos como o super usuário e queremos apenas executar um comando basta ser precedido por “sudo” mas se quiser digitar mais de um comando do super usuário basta digitar “sudo su”)

$sudo su

Instale o VSFTPD como comando:

$yum install vsftpd

Edite o arquivo do vsftpd

$ vim /etc/vsftpd/vsftpd.conf

Cancele a autenticação anonima
anonymous_enable=YES

Mude para:
anonymous_enable=NO

Verifique que o pasv_enable
pasv_enable=YES

Adicione as seguintes linhas no final do arquivo
pasv_max_port=51000
pasv_min_port=50000
port_enable=YES
pasv_enable=YES

Reinecie o serviço de FTP assim

service vsftpd restart

Vamos adicionar o usuário de FTP com 
useradd deivison

E criar uma senha para ele
passwd deivison

Edite o arquivo sudoers
$ vim /etc/sudoers
E abaixo da linha root ALL=(ALL) ALL adicione essa

deivison ALL = NOPASSWD: ALL

OBS: Onde deivison seria o nome do usuário que você criou :p

Como esse arquivo tem privilégios para escrita saia dessa forma

:qw!  (para sair forçando a gravaçao do arquivo)

vá na pasta do usuário que você criou

$ cd /home/deivison/

Dentro da pasta crie a pasta .ssh assim

$ mkdir .ssh

Copie as permissões do usuário ec2-user para as pasta .ssh do novo usuário

$ cp /home/ec2-user/.ssh/authorized_keys /home/deivison/.ssh/

Mude o dono do arquivo .ssh para o novo usuário que você criou

$chown -R deivison:deivison .ssh

Aplique as permissões nas pastas

chmod 700 .ssh/
chmod 600 .ssh/*

Pronto! Para que o serviço de FTP seja sempre inicie quando seu servidor for reiniciado marque ele depois do comando ntsysv

Digite no consolte

$ ntsysv

Busque o serviço vsftpd e o marque- o, assim ele será sempre iniciado junto com o Linux.

Bem já finalizamos, mas como eu disse acima que a pasta que contém os arquivos do servidor nginx fica em outra pasta, toda vez que vc logar por FTP irá cair na pasta do seu usuário. Então recomendo criar um link dentro da pasta do seu usuário para a pasta que contém os aquivos do seu site:

OBS: Na verdade eu não coloquei direto o html, pois com certeza haverá os casos que você precisará criar BKPs do seu site, então os coloque abaixo da pasta html e assim não serão visíveis pelo navegador

ln -s /usr/share/nginx/ /home/deivison/nginx

Show é isso ai! Agora você consiguira acessar pelo seu programade FTP, ou editor preferido o seu site no Amazon por FTP, basta colocar o seu usuário e senha criados e apontando para o seu IP e porta 21.

OBS: As vezes será necessário desabilitar/habilitar o passivo FTP do seu editor.

Pronto FIM!

Não sou sysadmin, mas acho que com esse tuto dá para fazer algo +/- rs, caso tenham melhorias favor comentar as mesmas que add ao POST, vlw.

Bônus: CDN com o S3 do Amazon

Depois irei fazer mais 2 tutoriais explicando como usar e configurar o S3 (CDN) no Magento com o módulo OnePica

Ops, já achei um pronto veja http://planetatecnologia.com/como-montar-bucket-s3-em-instancia-ec2

Recomendações de leitura:

Outras referencias:

Sobre o Autor

Designer, Web Developer & Linux Administrator

Meu nome é Deivison Arthur, tenho 29 anos, sou Administrador Linux, Analista de Sistema, Webdesigner e Pesquisador. há mais de dez anos. Nasci no Rio de Janeiro, atualmente trabalho como Gerente de Tecnologia e E-commerce at Grupo FFernandes e Freelancer nas horas vagas. Desenvolvimento em Joomla, Wordpress, Drupal, Magento e outros GPLs...

Quantidade de Artigos : 114

Comentários (33)

Enviar Comentário

© 2012 Powered By Wordpress, Deivison Arthur

Ir para cima