O fato é: o Moodle é um pouco pesado. Não consigo dizer algo contrário. Sua complexidade exige isso. Mas há algumas formas de melhorar a performance do servidor, com simples (ou não) customizações.
Por exemplo: Por que não dividir o processamento do sistema em mais de um computador? Essa pode ser uma opção interessante, e que pode gerar bons resultados. A estrutura desse novo ambiente exige uma customização pequena do moodle. Vamos ver passo a passo:
1- Configurando os servidores WEB
a) Para que haja mais de um servidor processando o moodle, vamos primeiro entender e separar os serviços do nosso ambiente em três partes:
Em nosso cenário mais crítico, vamos supor que esses três serviços já estejam em servidores diferentes. Qual desses serviços utiliza mais processamento, é mais critico e pode acarretar em lentidão ? Os relatórios apontam que é o servidor web, com o apache e PHP. Este irá processar todas as páginas do Moodle. Neste exemplo vamos aumentar a quantidade de servidores WEB, e então dividir a carga do processamento em 2 servidores . Esta é uma técnica chamada load balance. O load balance funciona da seguinte forma: Cada vez que um aluno chamar o seu site (ou seja, digitar no navegador o endereço do site), o serviço de load balance irá direcionar a solicitação a um dos servidores WEB existentes. Quando outro aluno chamar o site, então este será direcionado a outro servidor WEB, diferente do primeiro. Dessa forma as solicitações são divididas. Veja
Nessa estrutura temos dois servidores web, utilizando um único servidor de banco de dados. Existem várias técnicas de balanceamento. em nosso exemplo vamos utilizar a técnica chamada Round Robin. Ela funciona exatamente como descrevi na imagem acima, e pode ser instalada facilmente. Veja no final desse post alguns sites que sugiro e ensinam como instalar e configurar um load balace utilizando Round Robin pois nossa intenção é apenas mostrar como isso impacta no moodle. Bem, no Round Robin ,o que ocorre é que o mesmo aluno pode ser direcionado a servidores web diferentes,veja: primeiro acesso - aluno digitou o site e foi direcionado ao servidor 1, onde se autenticou. segundo acesso - quando ele clicou para visualizar um curso, foi direcionado ao servidor 2. Este mostrou a tela de login novamente. Por quê? simples: Ele se autenticou no servidor 1 e não no servidor 2. Isso acontece porque, por padrão, o moodle 1.9.x armazena as informações de autenticação do usuário na sessão do PHP, que por sua vez armazena no próprio servidor local, em forma de arquivo. A sessão no moodle contém as informações de um aluno que foi autenticado, e estas ficam gravadas no PHP, no disco local(HD) , em forma de arquivo, por isso apenas o servidor WEB1 possuia os dados de autenticação do aluno autorizado a acessar, e o servidor WEB2 não tinha nenhuma dessas informaçoes, e negou o acesso. Para solucionar esse problema é necessário que o repositório de informação da sessão do aluno seja única e compartilhada entre os dois servidores, sendo assim, os dois servidores reconheceriam que o aluno X está autenticado, idependente de qual servidor está utilizando. Como fazer isso?
2- Configurando o Moodle
Lembra que utilizamos apenas 1 servidor de banco de dados? O moodle possui uma opção para armazenar a sessão do aluno em um servidor de banco de dados (ao invés do arquivo), e este é um ambiente único para os dois servidores. No menu esquerdo, procure o ícone Servidor e clique no item Manipulação de Sessão. Na página que surgir, escolha a opção “Use o banco de dados para informações da sessão ”. Quando você salvar, todos os usuários conectados terão que reconectar.
Você pode utilizar essa técnica mesmo não tendo um servidor de balanceamento. Há melhorias na performance mesmo assim. (obs. No moodle 2.0 essa opção já vem por padrão) É necessário testar o sistema para ver se a aplicaçao se comporta bem. Pode ser que haja algum problema com o moodle 1.9.x e sessões no banco de dados postgreSQL. O fato é, se ocorrer algum problema e você não conseguir se autenticar mais para voltar como estava, então acesse o banco de dados, na tabela mdl_config, altere o valor do campo dbsessions para 0(zero) novamente.
3-Configurando o Moodledata
Como manter os dados dos alunos atualizados nos dois servidores web? Por exemplo: o aluno envia um trabalho quando este estiver conectado no servidor 1. Amanhã, quando acessar novamente e for direcionado ao servidor 2, ao tentar acessar estes arquivos, ele simplesmente não encontra, pois cada servidor tem o seu próprio moodledata, tendo o seu trabalho enviado para o servidor 1 e não no 2. Para isso a saída é ter um único diretório moodledata compartilhado para os dois servidores web. Esse diretório pode estar em um STORAGE ou em outro servidor de arquivos. Ele deve ser mapeado virtualmente nos dois servidores WEB. Não se esqueça que após fizer isso, será necessário alterar o config.php para encontrar essas pastas.
4- Configurando o Banco de dados
Após fazer isso, é necessário melhorar a indexação ta tabela no moodle que armazenarão esses dados, a mdl_sessions2 O problema é que ela não foi bem indexada e com o tempo, essa tabela começa a ficar lenta. Essa funcionalidade foi reformulada no moodle 2.0 (vamos aguardar seu lançamento) e não precisa ser feita nessa versão em diante. Utilize o seguinte script para MySQL ALTER TABLE mdl_sessions2 ADD INDEX mcreated_ix (created); ALTER TABLE mdl_sessions2 ADD INDEX modified_ix (modified); Bom! Agora falta configurar o tamanho (em megas) que o mysql aceita como pacote de informações. Com a sessão no banco de dados , pode ocorrer que em um restore/backup de curso , ocorra um erro da seguinte forma “Session Replace: Got a packet bigger than 'max_allowed_packet' bytes” Por padrão temos no MySQL 1 mega como de limite do tamanho de um pacote SQL para ser processado. Quando isso não for suficiente, o erro é apresentado. Para solucioar esse problema, rode no banco de dados o seguinte comando, para MySQL: set global max_allowed_packet = 16777216; O valor foi setado para 16 megas. Pode não ser suficiente ainda. Parece que o mysql suporta mais de 1 gigabyte para essa variável.
5- Configurando o servidor WEB.
Mesmo após todas essas configurações, em um caso no gerenciador de erros do moodle http://tracker.moodle.org/browse/MDL-16641 dizia que há problemas de performance utilizando esse mecanismo que mostramos até agora no moodle. Mas isso se dá por um problema de desenvolvimento nas versões 1.9.x ou mais antigas. Nos horários de pico, o servidor fica muito lento, dando LOCK nas tabelas de sessão, impedindo que os alunos escrevam ou atualizem essa tabela. Então a sugestão de saída de um dos programadores, Greg Milsted , foi alterar as seguintes páginas PHP: /lib/adodb/session/adodb-session.php /lib/adodb/session/adodb-session2.php Onde encontrar o comando $binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : ''; Deve-se substituir para $binary = $conn->dataProvider === 'mysql' ? '' : '';
6- Final
Recomendo essas modificações caso você tem dificuldade no desempenho do seu sistema ou muitos alunos acessando ao mesmo tempo. Os links para conhecerem mais e instalarem o Round Robin estão abaixo, mas sugiro também outras pesquisas sobre essa ferramenta. Link 0 Link 1 Link 2 Um abraço a todos!
Por: Paulo Porto Maciel