O Desempenho é fundamental! Notas sobre o desempenho Magento

O desempenho do Magento é fundamental.

Ao longo dos últimos meses, dedicamos uma parte significativa de recursos a diagnosticar e a optimizar o desempenho do Magento. Agora que a lista de funcionalidades do Magento 1.0 está praticamente concluída, teremos muito gosto em partilhar convosco algum do nosso trabalho e esforço que tem por objectivo um Magento rápido e furioso. Estamos muito entusiasmados com os resultados dos nossos testes.

Com funcionalidades tão complexas, a performance e a flexibilidade podem por vezes ser afectadas, e o Magento não é nenhuma excepção à regra. Mas existem ganhos em cada melhoria realizada, e começamos a ver resultados significativos na última versão. Abaixo está uma lista de algumas das melhorias no desempenho que foram introduzidas na última versão.


  • Joins do menu do topo rescritas, menu do topo é guardado em cache

  • Adicionada indexação para navegação por camadas e procura

  • Adicionado junção automática e remoção de espaços em branco enquanto o JavaScript é carregado

  • Bloco do rodapé em cache

  • Implementada a directiva no xml do layou para evitar o carregamento de blocos desnecessáriost, ignorados os blocos left/right em páginas com apenas uma coluna

  • A maioria dos atributos da encomenda são fixos e foram movidos para uma nova tabela

  • Câmbio, endereço câmbio e entidades dos itens do câmbio guardados separadamente

  • Melhorias significativas na geração das etiquetas populares

  • Implementado a API de cache para uso em Mage_Core_Model_Abstract e módulos “descendentes” (que fazem extends)

  • Removidas consultas à base de dados do catálogo e página principal (ex: reduzido o número total de consultas de 700 para 60 na página principal e de 500 para 100 na listagem de produtos ).

A partir dos nossos testes de desempenho constatamos que a última versão do Magento melhora o desempenho da versão 0.8.17420 por quase o dobro. Abaixo mostramos um gráfico de um dos testes de carregamento que corremos utilizando Apache Benchmark (ab) comparando as duas versões do Magento. Vimos resultados semelhantes no nosso teste e comparações entre as duas versões.


image

FVM (Faça você mesmo) Melhorias no desempenho

Enquanto continuamos a melhorar a performance do Magento, existem optimizações adicionais que os utilizadores Magento podem utilizar para melhorar o desempenho num ambiente de servidor simples

  • Instalar um cache opcode de PHP como APC ou XCache. Este procedimento pode aumentar significativamente a resposta do PHP ao colocar em “cache” o código PHP num método de bitcode intermediário, o que permite ao interpretador evitar recompilar o código para cada pedido
  • Confirme que o seu apache tem a directiva Keepalives activa. Keepalives são um “truque” em que múltiplos pedidos HTTP podem ser tunelados por uma única conexão TCP. Como a configuração de cada conexão TCP implica tempo adicional, este procedimento pode reduzir o tempo que demora a descarregar todos os ficheiros (HTML, JavaScript, imagens) de um site.
  • Utilize um sistema de ficheiros memory-based para o directório var do Magento. O Magento faz uma utilização exaustiva do sistema de ficheiros para cache e armazenamento de sessões. O componente mais lento num servidor é o disco rígido, por isso mesmo se tiver um sistema de ficheiros “memory-based” como tmfs, pode evitar todos os ciclos IO extra ao armazenar os ficheiros temporários em memória ao invés do seu lento disco rígido
  • Modifique a configuração do seu servidor MySQL para tirar partido da RAM do seu servidor. A maioria dos distribuições Linux vem com uma configuração moderada do MySQL para ter a certeza que este correr num vasto conjunto de hardware. Se tem RAM disponível (1GB ou superior), talvez queira realizar algumas modificações do MySQL. Um exemplo de my.cnf está abaixo, apesar de poder ser necessário consultar a documentação para uma lista completa de directivas de configuração e definições recomendadas.

Exemplo my.cnf:


image

Hora de um Cluster?

Como qualquer revendedor onine sabe, um negócio em crescimento significa problemas em crescimento. Se a sua loja é um enorme sucesso, então precisa inevitavelmente de uma plataforma de hardware mais capaz, o que significa deixar o mundo de apenas um servidor e mudar-se para um ambiente cluster com dois ou mais servidores

Existem várias formas de o conseguir, mas um típico primeiro passo é adicionar mais servidores e coloca-los numa “load balancer”, que irá distribuir o carregamento pelos vários servidores. Este método é popular porque: (a) um servidor é mais barato que um servidor de base de dados; e (b) não existe limite para o número de servidores que pode adicionar

Nota: Uma limitação actual do Magento é que não existe nenhum método oficial de propagar as imagens do catálogo para cada “web node”. Se não está confortável para montar um ambiente deste tipo, então será melhor contratar um profissional.

Um segundo método envolve uma táctica de desempenho chamada “replicação de base de dados”. Ao utilizar a replicação, necessita de ter duas ou mais base de dados no seu “cluster”.  Uma será a “master” e as restantes serão chamadas de “slaves”. A “master” é a única base de dados que aceita qualquer tipo de consultas de escrita. Estas consultas de escrita são depois replicadas para cada um dos “slaves” em tempo real (ou muito próximo). A vantagem desta configuração é que o Magento pode enviar consultas de leitura para cada um dos servidores “slave”, guardando assim todas as consultas de escrita para a base de dados “master”. Uma base de dados é tradicionalmente um componente difícil de escalonar horizontalmente, por isso a replicação é um bom acordo

A configuração inicial para a replicação MySQL não está nos planos deste documento, mas podemos enviá-lo para os especialistas. Aqui está um tutorial que explica todos os detalhes.

Assim que a sua replicação MySQL estiver a funcionar, configurar o Magento para utilizar múltiplos servidores de base de dados é uma tarefa relativamente simples. O único ficheiro que necessita de editar é app/etc/local.xml. Um exemplo é mostrado abaixo. Como pode verificar, existem duas conexões de base de dados configuradas, uma chamada default_setup e outra chamada default_read. A conexão default_setup será utilizada para todas as consultas de escrita e a default_read para todas as consultas de leitura.

Exemplo app/etc/local.xml:
image

Este tópico apenas cobriu algumas das bem conhecidas tácticas para melhorar o desempenho de um site. Contudo, cada ambiente de cada site é diferente, por isso a maioria das vezes compensa contratar um profissional para o aconselhar sobre as melhores soluções possíveis para o seu caso. Mas se está confortável em ambientes Linux e confiante no que toca a ficheiros de configuração, experimente alguma das sugestões acima. Pode ser que tenha uma boa surpresa

Tem algumas ideias? Gostaríamos de ouvi-las. Deixe um comentário ou junte-se ao Grupo de Optimização do Desempenho do Magento.

Join the Dialogue ( 0 comments )

Leave a Reply





Smileys



Next entry: Magento vence 'Favorito da audiência' em Under the Radar session

Previous entry: Vídeo: Criar múltiplas Lojas

Download Magento