Clique aqui e baixe o PDF de minha palestra no MoodleMoot 2015/2 Brasília-DF

Objetivo

Venho a muito tempo acompanhando reclamações de alunos sobre o Moodle e quase todos se refere a lentidão e a falhas sistêmicas. Lentidão e falhas que por simples descuido ou falta de conhecimento causam muitas perdas para as instituições e por vezes faz com que o projeto seja abandonado ou re-modelado.

O Moodle é extremamente pesado ao servidor e não é qualquer que consegue rodar o Moodle com perfeição e isso acarreta um custo maior na hora de hospeda-lo.

Então, quanto mais otimizado seu Servidor e seu Moodle estiver, mais alunos você conseguira neste mesmo servidor e menor será o custo de manutenção da infraestrutura e assim menos problemas.

Então nesta palestra, vou listar todos os pontos que pode ser melhorado para fazer seu Moodle funcionar o mais rápido possível.

Se você é administrador de servidor, o que fazer?

Escolha do Sistema Operacional

Servidores CentOS são de 60% á 80% mais eficientes que servidores com Windows. Mais o que você talvez não sabia e que servidores com CentOS são 3% mais eficientes que servidores com Ubuntu.

Se você usa o Ubuntu, continue com ele, não é tanta diferença a ponto valer a pena a troca.

O site www.paessler.com fez um comparativo e a conclusão foi:

Veja o artigo completo aqui: www.paessler.com/webstress/sample_performance_tests/comparing_php_script_performance_on_linux_and_windows

EN-US : While the Windows based server showed request times between 13 ms and 40 ms, the Linux based server only took 6 ms to 9 ms.

PT-BR : Enquanto o servidor baseado em Windows demorou entre 13 ms á 40 ms para responder, o servidor baseado em Linux só levou 6 ms á 9 ms.

Isso significa que no Windows o PHP demorou 4,4 vezes para executar o mesmo script PHP que no Linux.

Já o site netcraft.com possui tabela do monitoramento de vários servidores pelo mundo, e servidores Windows quase não aparecem na lista.

Veja o artigo completo aqui: uptime.netcraft.com/perf/reports/performance/Hosters?orderby=epercent&tn=august_2015

Já no site www.icts.uiowa.edu fala que os servidores com Windows são de 5 a 6 vezes mais lento que Linux.

Veja o artigo completo aqui: https://www.icts.uiowa.edu/confluence/display/ICTSit/Moodle+Moot+Best+Practices+Workshop#MoodleMootBestPracticesWorkshop-MoodlePlatformRecommendations 

Armazenamento

O maior gargalo do Moodle é o armazenamento. Servidores grandes com HD’s grandes podem sofrer lentidão porque o disco não consegue ler os dados na velocidade que o PHP os solicita. E isso gera lentidão pois o processador é obrigado a aguardar o HD responder antes de prosseguir, e infelizmente esta parte do processador que esta aguardando não consegue fazer outro processamento.

Então o que fazer?

Vou explicar a diferença entre os vários tipos de armazenamentos, seus prós e contras:

HD SSD ou Magnético? 

HD SSD são superiores aos HD magnéticos. Um HD SSD é várias vezes mais rápido que um HD magnético e isso reflete diretamente na velocidade da aplicação, visto que o PHP para funcionar, precisa ler centenas de arquivos do HD.

Para ter idéia, o HD SSD é 40 vezes mais rápido que um HD de uso doméstico.

Mudar para SSD é melhorará a performance do Moodle. E da para melhorar ainda mais? 

Vou descrever como:

RAID?

O RAID é usado para centenas de fins. Pode ser para gerar redundância dos dados e evitar perdas em caso de algum HD parar de funcionar, ou também multiplicar a velocidade de leitura dos dados, ou aumentar a capacidade total de armazenamento.

Vou então falar de alguns das montagens de RAID’s mais comuns:

RAID 0

No RAID 0 é usado dois discos e os dados são divididos em pequenas partes que são escritos sequencialmente em cada um dos discos. A distribuição oferece melhor desempenho comparado a discos individuais. Porém se um dos discos falharem perde-se tudo.

Vantagens:

  • acesso rápido as informações (até 50% mais rápido);
  • custo baixo para expansão de memória.

Desvantagens:

  • caso algum dos setores de algum dos HD’s venha a apresentar perda de informações, o mesmo arquivo que está dividido entre os mesmos setores dos demais HD’s não terão mais sentido existir, pois uma parte do arquivo foi corrompida, ou seja, caso algum disco falhe, não tem como recuperar;
  • não é usada paridade.
  • O servidor que esta hospedado o site www.eduardokraus.com esta com RAID 0. 

RAID 1

Para a implementação do RAID 1 é necessários no mínimo dois discos. O funcionamento deste nível é simples: todos os dados são gravados em dois discos diferentes; se um disco falhar ou for removido, os dados que estão no outro disco permitem a recuperação total dos dados.

Vantagens:

  • caso algum setor de um dos discos venha a falhar, basta recuperar o setor defeituoso copiando os arquivos contidos do outro disco;
  • segurança nos dados, visto que os dados estão em dois ou mais discos.

Desvantagens:

  • custo relativamente alto se comparado ao RAID 0;
  • ocorre aumento no tempo de escrita.

RAID 5

No RAIS 5 é necessário 3 ou mais discos e os dados são separados em partes e distribuídos entre os discos do RAID. É criado uma combinação de paridade (uma forma de soma de segurança) que garante que se um dos discos derem problemas, os outros terão os dados e é possível recuperar os dados perdidos deste HD.

Vantagens:

  • maior rapidez com tratamento de ECC (Error Correcting Code);
  • taxa de leitura rápida;
  • possibilidade do aumento de área de discos físicos.

Desvantagem:

  • sistema complexo de controle dos HDs.
  • taxa de gravação lenta;

RAID 0+1

Também chamado de RAID 01 é uma combinação do RAID 0 seguido do RAID 1, onde os dados são divididos entre os discos para melhorar o rendimento, mas também utilizam outros discos para duplicar as informações. Assim, é possível utilizar o bom rendimento do RAID 0 com a redundância do RAID 1. No entanto, é necessário pelo menos 4 discos para montar um RAID desse tipo. Tais características fazem do RAID 0 + 1 o mais rápido e seguro, porém o mais caro de ser implantado. No RAID 0+1, se um dos discos vier a falhar, o sistema vira um RAID 0.

Vantagens:

  • segurança contra perda de dados;
  • pode falhar 1 dos HD's, ou os dois HD's do mesmo Disk Group, porém deixando de ser RAID 0 + 1.

Desvantagens:

  • alto custo de expansão de hardware (mínimo 4x HDs).

RAID 1+0

Também chamado de RAID 10 é uma combinação do RAID 1 seguido do RAID 0, onde os dados são divididos entre os discos para melhorar o desempenho. Cada par será espelhado, garantindo redundância, e os pares serão distribuídos, melhorando desempenho. Até metade dos discos pode falhar simultaneamente, sem colocar o conjunto a perder, desde que não falhem os dois discos de um espelho qualquer. É o nível recomendado para bases de dados, por ser o mais seguro e dos mais velozes, assim como qualquer outro uso onde a necessidade de economia não se sobreponha à segurança e desempenho.

Vantagens:

  • segurança contra perda de dados;
  • pode falhar um ou dois dos HDs ao mesmo tempo, dependendo de qual avaria.

Desvantagens:

  • alto custo de expansão de hardware (mínimo 4x HDs);

E…

Agora que sabe como o armazenamento interfere no desempenho, pode-se com pouco custo substituir os HD por novos mais modernos ou um RAID e ter um ganho de desempenho sem necessidade de troca total do servidor. 

Escolha dos softwares

Apache, Nginx, Lighttpd? Qual o melhor? O mais rápido? Qual usar?

O Apache

No Apache, cada conexão cria um novo processo no servidor o que significa uma sobrecarga significativa. Se tens baixo volume de conexões não notarás muita diferença entre este e seus concorrentes. Apache é hoje o melhor e mais estável.

Apache tem muitos recursos, sendo os principais:

  • Suporte SSL/TLS;
  • Hosts virtuais;
  • Proxy reverso;
  • Balanceamento de carga;
  • Compressão;
  • Controles de acesso;
  • Reescrita URL (mod_rewrite);
  • Log personalizado;
  • WebDAV Limitado;
  • FLV streaming;
  • FastCGI.

O Apache 2 tem uma longa lista de melhorias. E uma coisa é certa, o Apache tem mais recursos do que os outros dois que estamos comparando aqui e muitos destes não são necessários no Moodle.

O que fazer para melhorar o Apache

Desative todos os módulos que não estão sendo usados. Isso ajuda muito. 

O Nginx

Nginx é um sistema assíncrono, o que significa que todas as solicitações serão atendidas por um único processo no servidor, tornando assim mais rápido a resposta do servidor. Tem todas as principais características que um Apache tem e se concentra em uma pequena gama de recursos que é provavelmente por isso que ele faz essas coisas de forma super eficiente.

A título de comparação, vamos imaginar o Telemarqueting que quando você liga é atendido por uma pessoa que repassa para outra para resolver (Apache) o que demora mais. O Nginx seria o caso de quem atende resolve sem repassar. Muito mais rápido né?

Nginx é a melhor escolha em servidores de entrega de arquivos estáticos, mais no caso do Moodle nota-se pouca diferença, visto que o Moodle por si só consume muitos recursos de servidor.

Moodle corre um pouco mais rápido em Nginx que no Apache.

O Lighttpd

Lighttpd também é um servidor assíncrono e é executado em um único processo  com um único segmento non-blocking I/O.

"único segmento non-blocking I/O” é um detalhe tão técnico que não será tratado nesta palestra.

Nginx e Lighttpd são muito semelhantes e tem características semelhantes. Lighttpd é executado como um único processo com um único segmento, já o Nginx funciona como um processo mestre, mas delega seu trabalho aos processos de trabalho.

Nginx é claramente mais rápido e mais confiável do que Lighttpd. Então se quiser trocar o tradicional Apache, troque pelo Nginx.

Comparação entre ambos

Abaixo uma imagem que mostra quantas solicitações por segundo a DreamHost conseguiu com arquivos estáticos em um mesmo servidor e comparando com os três softwares acima.

Veja que o Nginx conseguiu servir mais de 12 mil arquivos enquanto com mesma quantidade de recursos o apache conseguiu em torno de 1500 arquivos por segundo. 

Lembrando que os testes são em relação a arquivos estáticos (imagens, documentos, etc) e não requer processamento do PHP, que acontece com requisições ao Moodle.

”concurrent connections" é a quantidade de processos sendo executados ao mesmo tempo pelo servidor. Ou seja concorrendo pelo processador.

Nesta outra imagem é mostrado o consumo de memória em relação a uma sequência de solicitações. Veja que com 3 mil processos o apache esta consumindo 1,6GB de memória.

Um detalhe deixo claro aqui. 3 mil concurrent connections no Moodle é muita coisa. Significa que 3 mil pessoas ao mesmo tempo clicaram em um link no Moodle. No caso do Moodle, para 3 mil concurrent connections, só o PHP irá consumir aproximadamente 100GB de memória. 

O mundo maravilhoso seria se conseguíssemos fazer com que o Moodle trabalhasse com os dois. Toda a parte de arquivos fosse gerenciado pelo Nginx e o Moodle pelo Apache. Ai sim seria um mundo perfeito.

E…

O Nginx é mais rápido sim que o Apache. Porém, como o Moodle é significativamente pesado para o servidor, esta diferença não faz muita diferença no desempenho total. 

Pelos testes que eu fiz, o Nginx é aproximadamente 1% à 2% mais rápido que o Apache.

E o Cache

Moodle trabalha com três caches, para que ele possa funcionar. E além destes três, pode-se adicionar outros caches para melhorar mais ainda o desempenho.

Os três caches são:

Cache do Aplicativo

Este cache é o banco de dados e a MoodleData aonde ficam todos os dados e arquivos enviados pelos alunos.

Este cache poderá ser otimizado com melhoria do armazenamento (HD) do servidor.

Cache da Sessão

Este cache é responsável por guardar quem é o aluno que esta navegando pela página. É formado pelo Cookies e por um arquivo guardado no servidor.

Pode-se fazer testes, transferindo a Sessão do base de dados para arquivo, ou vice versa. Lembre-se que esta mudança desconecta todos os usuários.

Cache do pedido

É o cache do que esta sendo processado pelo servidor no pedido que o aluno fez e será perdido assim que a página for enviada ao aluno.

Neste caso é necessário comparar os tipos diferentes de memória do mercado e verificar qual é a mais rápida.

Os caches extras

Vou apenas falar do Memcache. 

Memcache

O Memcache utilizando no servidor, junto com o banco de dados, permite você aumentar a perfomance do Moodle de uma maneira impressionante, fazendo cache de dados na memória. Carregar dados do Memcache ao invés de carregar de um banco de dados ou do sistema de arquivos, tem um impacto muito grande na perfomance do Moodle.

Sem o Memcache, conforme o aluno acessa o Moodle, os dados são carregados do banco de dados e estes dados são analisados e após usados limpos da memória. Assim que este dado for necessário, uma nova consulta com banco de dados é feita.

Quando se usa o Memcache, assim que o dado é carregado do banco de dados, este dado é salvo no Memcache e no próximo acesso deste aluno ou de outros alunos, ao invés de buscar do banco de dados novamente é consultado primeiro no Memcache. Se estas informações sofrerem alteração os dados do Memcache será apagado para ser carregado do banco de dados da próxima vês que for necessário.

E…

Em testes que fiz, a diferença de perfomance após a adição do Memcache foi muito significativa e diminuiu drasticamente o número de falhas pelo banco de dados estar sobrecarregado.

Escolha do banco de dados

PostgreSql, MySql ou Oracle? Qual o melhor? O mais rápido? Qual usar?

Oracle e PostgreSql são banco de dados robustos criados para grande quantidade de dados. Mysql é um banco de dados mais simples que tende a se tornar lento quando recebe uma quantidade considerável de dados.

Se seu moodle for pequeno, menos de 500 alunos ativos, então o MySql é sua melhor opção de banco de dados. MySql é super rápido, simples de instalar, configurar e instalar o Moodle. Tende a ser mais rápido em pequenas quantidades de dados, mais perde perfomance quando recebe uma carga muito grande de dados.

Leia em https://docs.moodle.org/29/en/Arguments_in_favour_of_PostgreSQL um texto do Martin Langhoff com argumentos a favor do PostgreSQL.

E se você é administrador do Moodle, o que fazer?

Se você for o administrador do Moodle também pode trabalhar para melhorar a performance do moodle. Existe algumas ações que você pode fazer para melhorar o desempenho do Moodle. 

A seguir alguma delas:

A Descrição geral do desempenho

A Descrição geral do desempenho é uma página do Moodle que mostra os detalhes mais críticos do desempenho do Moodle. Para ver esta página em seu Moodle, siga até Administração do site > Relatórios > Descrição geral do desempenho e verifique se algum dos itens esta em vermelho ou amarelo.

Abaixo como deve estar seu Moodle:

E abaixo um exemplo de Moodle super lento:

Só isso resolve?

Não, mais é um bom caminho já.

Desative os Logs Legados

Para isso siga até Administração do site > Plugins > Logging > Gerenciar locais de armazenamento de log e desative os Logs Legados.

Os Filtros

Siga até Administração do site > Plugins > Filtros > Gerenciar filtros e desative todos os filtros que não forem necessários.

Use argumentos com barra

Arquivos (imagens, uploads, etc) são fornecidos através de um script utilizando 'slash arguments’ (argumentos com barra). Este método facilita o cache por parte de navegadores, servidores proxy, etc.

Para habilitar vá em Administração do site > Servidor > HTTP e marque a opção Use argumentos com barra.

E se você é professor ou conteudista, o que fazer?

Não pense que você não tem nada a fazer. Todos tem um papel muito importante para fazer o Moodle mais rápido.

Segue uma pequena lista do que você pode fazer para melhorar o desempenho do Moodle.

Os blocos

O bloco Atividade recente é um dos blocos mais pesado do Moodle. Então se não for realmente necessário, remova-o.

Segundo bloco que deve ser removido é o o bloco Usuários Online que é um pouco lento se o Moodle possuir muitos usuários cadastrados. Este bloco habilitado na página inicial do Moodle é pesado de mais. 

E depois remova todos os blocos que não forem necessários no curso. Um bloco não usado é um pouco a mais de recurso que estará sendo usado, que podia ser usado para navegação de alunos.

Uploads

Uploads de arquivos é outro grande problema. 

Por exemplo arquivos Word, e toda família Office, tendem a guardar muito lixo e SEMPRE devem ser convertidos em PDF antes de enviar ao Moodle. Somente não converta se os alunos precisarem editar e responder.

Imagens

Todas as imagens usadas no Moodle devem ser redimensionadas e otimizadas ao máximo.

Se uma imagem que será postada no Moodle for adicionado em um espaço de 600px de largura, postar uma imagem de 1200px é muito desperdício.

Quer um exemplo? Veja a logo do Moodle abaixo:

Se eu salvar ela com 600px de largura ela necessitará aproximadamente 11KB de disco. Mais se eu salvar ela em 1200px (dobro) ela irá ocupar 38KB em disco (3,5x mais). Pode parecer pouco, mais lembre-se, esta é apenas uma das imagens do Moodle.

Otimizar é comprimir esta imagem mais ainda a ponto dela ficar o menor possível sem perder qualidade visível.

Veja abaixo 4 logos do Moodle que eu otimizei. Dois deles são PNG 600px e 1200px e dois JPG também 600 e 1200px.

Veja que o ImageOptim reduziu uma das logos em 63%. E o PNG que ele comprimiu não tem nenhuma perda visível. Isso significa que esta imagem ocupará 63% menos recursos que a imagem original.

No Linux ou Windows use o Leanify.

Pode não parecer muito, mais lembre-se que esta é uma das imagens. Moodle tem quantas imagens?

Vídeos

Jamais faça upload de vídeo no Moodle. Moodle não foi feito para trabalhar com vídeos nativamente e você deve usar serviços especializados para isso.

Já conhece a MoodleTeca?

Arquivos do MS-Office

É muito comum a inserção de arquivos MS Office no Moodle que contenham imagens e fotos. Nessa situação, um documento com apenas algumas fotos pode se transformar num arquivo muito grande com dezenas de megabytes de tamanho.

A título de exemplo, se você tirar uma foto com resolução de 8MP, este gera um arquivos JPG de aproximadamente 4MB. Se adicionar esta imagem a um arquivo do MS Office e mesmo que você deixando uma imagem bem pequena no documento o arquivo ficará com pelo menos 6MB. E se você apagar a imagem no documento, o arquivo continuará com 6MB.

No caso específico do Word, o seu problema é que ele insere lixo dentro de seus documentos. Para você ver isso da seguinte forma:

  • Pegue um documento grande do Word;
  • Selecione tudo;
  • Copie para a área de trabalho;
  • Abra um novo documento;
  • Cole o texto;
  • Salve esse novo documento criado com um novo nome. 

Compare o tamanho dos dois arquivos, o documento original e a cópia e você verá que o novo documento é menor que o documento original! 

Então, se não precisar enviar MS Office, envie em PDF.

Paginação do curso

Se seu curso possuir muitos tópicos é ideal que você pagine seu curso. Para isso edite as configurações do curso e em Formato do curso mude o Layout do curso para Mostrar um tópico por página.

Desta forma seu cursos aparecerá assim: 

Assim, economiza recursos. Muitos.

E…

Desative todos os recursos que não são necessários;

Desativar todos os recursos que você e seus alunos não usam;

Gostou? Não esqueça de curtir!