precisa de conselhos sobre como construir uma arquitetura escalável para o moodle

5

Estou pensando em projetar uma arquitetura para um site de educação baseado em moodle, que atenderá a vários milhares de usuários no começo, mas precisa ser capaz de crescer para suportar centenas de milhares a milhões de usuários em vários países.

Eu estava pensando em um balanceador de carga para distribuir solicitações para vários servidores da web. Os servidores da web podem ser divididos por algumas veiculações estáticas e algumas veiculando conteúdo dinâmico. Então é escrever para um nó mestre do mysql e ler dos nós escravos.

Que tipo de balanceador de carga funcionará bem com o moodle, devo obter uma solução de balanceador de carga de hardware de um dos fornecedores ou criar um com solução de código aberto como LVS ou proxy reverso?

Eu estava planejando usar o servidor apache para servir as páginas da web em primeiro lugar, à medida que as cargas se tornam mais altas, divididas em servidor da Web lighttpd para conteúdo estático e servidor de aplicativos apache para conteúdo dinâmico. Coisas como compactação gzip, cache de squid, memcache também serão implementadas, se necessário.

Para o hardware do servidor da web, devo usar um servidor de soquete único one-u ou uma solução blade? Qual deles acabará sendo mais barato para executar e expandir? A Supermicro tem um produto interessante com dois servidores em chassi 1u e 4 servidores em chassi 2U com infiniband. Alguém aqui já tentou esses servidores antes?

Para o armazenamento, devo usar uma SAN ou um servidor de armazenamento, como o armazenamento unificado da Sun 7000 será suficiente. Para uma configuração de cluster do mysql, devo ter dois sistemas de armazenamento diferentes, para usar no acesso de escrita do nó mestre e outro para o escravo ler? Ou todos os nós devem ter armazenamento separado?

Como este site provavelmente será mais pesado em operações de leitura, que consideração deve ser feita para o cluster do mysql e a configuração do armazenamento?

Para a parte de gerenciamento, estou planejando usar dsh, ganglia, nagios, splunk, kickstart.

Para backup, estou planejando um autoloader de fita LTO. Este site será usado principalmente para a região da Ásia, portanto, haverá várias horas de tráfego baixo durante a noite. Qual é a melhor maneira de fazer backup de um cluster do mysql? Posso desativar temporariamente a gravação e retirar o mestre para realizar o backup?

Por favor, informe se você tem experiência com a criação deste tipo de site escalável, a maior parte da minha experiência tem sido em trabalhar com grandes caixas unix, ou pequenas caixas unix / linux independentes. Então, esse tipo de implementação escalável é a primeira vez para mim.

Obrigado

Robert.

    
por Robert 02.09.2009 / 08:13

3 respostas

4

Robert, você é claramente um cara esperto, mas respeitosamente, consiga um consultor com conhecimentos prévios de domínio, ou comece a construir algo pequeno agora e veja onde ele leva você. Não há como responder sua postagem; tem muitos conceitos abstratos e não números concretos.

Algumas ideias:

will serve several thousand users at first ... grow to support hundreds of thousands to millions of users

Prove que você precisa desse nível de escala primeiro. Não crie uma arquitetura de scale-out antecipando os usuários que nunca aparecem. Desculpe se eu pareço duro, mas 99% de todos os sites não crescem até o fim da escala. Veja o estouro de pilha / falha de servidor; eles estão atendendo a um milhão de usuários por mês a partir de um punhado de servidores razoavelmente convencionais.

should I get a hardware load balancer solution from one of the vendors, or build one myself with open source solution

Depende das suas habilidades e da sua situação em relação ao tempo versus dinheiro. Uma vez construídas, as ofertas de código aberto e comercial funcionam praticamente da mesma maneira. As soluções comerciais tendem a ter estatísticas melhores e interfaces de gerenciamento mais agradáveis, prontas para uso.

For the web server hardware, should I use one-u single socket server or a blade solution?

Pergunte ao seu fornecedor de servidores por preços. Pergunte ao seu datacenter sobre a densidade de energia, ou seja, seu equilíbrio preferencial entre tamanho e consumo de energia - muitas vezes você terá energia limitada, então uma solução densa como blades pode não lhe render nada.

For the storage, should I use a SAN or storage server like Sun unified storage 7000 will be sufficient.

Obtenha SAN quando você tiver uma necessidade comprovada de SAN; então você também entenderá melhor o que sua SAN precisa resolver para você.

Since this website will likely be more heavy on read operations, what consideration should be made for the mysql cluster and storage setup?

Crie uma solução de cache realmente boa. Cache de página inteira, como o Squid (Varnish), ou cache de dados do aplicativo, como o Memcached, ou uma combinação de ambos. Considere a invalidação de cache, você poderia precisar limpar rapidamente o conteúdo de seus caches para evitar que ele seja exibido novamente?

What is the best way to back up up a mysql cluster?

As opiniões variam, mas uma abordagem comum é ter um MySQL escravo dedicado apenas para backups e usar algo como o InnoBackup ou o Maatkit para uma solução de backup com autotransformação.

Editar: Se você realmente vai construir isso do zero agora, por favor, dê uma boa olhada na computação em nuvem antes de confirmar. A computação em nuvem não é apenas sobre escalabilidade, mesmo que a escalabilidade seja uma grande força. Certos serviços que vêm como parte do pacote podem realmente ajudar a tornar as operações do dia a dia mais fáceis. Alguns exemplos:

  • Imagens instantâneas ao vivo de volumes do Amazon EBS facilitam backups de banco de dados.
  • A Amazon tem o balanceamento de carga como um conjunto e esquece o serviço (obviamente, mais recursos limitados do que um bom balanceador de carga auto-hospedado, mas fácil de começar).
  • O Rightscale possui um amplo monitoramento de servidor incorporado em suas imagens, o que facilita a introspecção de planejamento / aplicação de capacidade.
por 02.09.2009 / 12:26
1

Embora eu não saiba muito sobre as especificidades do Moodle, posso oferecer algumas dicas para escalabilidade geral.

Blades e SANs são frequentemente mal vendidos pelos fornecedores. Eu suspeito que um cluster de servidores 1U de commodity provavelmente seria o melhor para suas necessidades. Há vários datacenters que não aceitam sistemas blade porque o consumo de energia é muito alto e os requisitos de refrigeração também são muito necessários!

Sou um grande fã do Gluster para armazenamento distribuído / replicado, talvez você ache interessante investigar como alternativa a uma solução SAN de um grande fornecedor.

Uma pilha inteira de HP DL360s também funcionaria (ou servidores de commodities mais baratos (eu recomendo o DNUK)). Eu duvido seriamente que você precisaria de interconexões Infiniband entre seus servidores (a infraestrutura é cara e, em grande parte, desnecessária para propósitos de serviço da web, se você estivesse fazendo modelagem HPC da expressão genômica, minha resposta poderia ser diferente!)

Com relação à infra-estrutura de rede (se você tiver que considerar isso também ...), eu recomendo roteadores Cisco, com switches Cisco Catalyst ou HP Procurves (bastante pareados, IMO e mais baratos)

No que diz respeito ao balanceamento de carga, um servidor linux dedicado executando o LVS manipulará facilmente o tráfego para vários nós do cluster. Se você tivesse o dinheiro ($ 30k +), então um citrix netscaler poderia ser a plataforma correta de armazenamento em cache / aceleração / balanceamento de carga, mas tenha em mente que você precisaria de 2 (idealmente 3) deles para redundância.

Você provavelmente deve tentar incluir o memcache desde o início, é fácil adicionar escalabilidade e melhora muito o desempenho do cache, especialmente ao ler de um cluster de banco de dados MySQL. Há outras coisas que você pode fazer para ajustar seu desempenho no MySQL também, como usar o InnoDB no MyISAM.

Eu suspeito que você estaria melhor com um cache de proxy reverso, como o Varnish, ao contrário do Squid, que funciona melhor como um cache do lado do cliente. Você pode facilmente ter alguns nós de cache Varnish dedicados ou executar o Varnish no mesmo servidor que os servidores Apache / lighttpd.

Tente evitar entrar em um estado em que você obtenha o aprisionamento de fornecedores, pois isso pode ser muito caro quando se trata de problemas de licenciamento. É muito possível construir um site escalável usando software livre / de código aberto. É claro que os balanceadores de carga de software não serão tão rápidos quanto os de hardware com ASICs dedicados, mas com uma boa infraestrutura de rede, ele pode chegar bem perto.

For the management part I am planning to use dsh, ganglia, nagios, splunk, kickstart.

Só precisa adicionar um fantoche a essa lista e você será o vencedor. Fique atento ao licenciamento caro do splunk (quando você começa a processar 10s de GB de logs por dia, ele pode mordê-lo).

O Munin é uma excelente ferramenta de monitoramento gratuita e tem vantagens sobre aplicativos como o Zabbix, porque ele pode configurar gráficos automaticamente a partir do script de plug-in (para que você não precise acompanhar o que está monitorando).

    
por 02.09.2009 / 12:33
1

Embora eu nunca tenha administrado um sistema Moodle que possa ser considerado grande (no máximo, tendo alguns milhares de usuários ativos) e tenho quase certeza de que você tem mais experiência com Linux do que eu, posso oferecer algumas observações.

Uma instalação do Moodle com milhões de usuários seria uma ordem de magnitude maior do que qualquer outra que eu tenha ouvido falar. Até mesmo a Open University, com estudantes espalhados pelo Reino Unido e pelo mundo, está antecipando apenas 200 mil usuários. Grandes universidades americanas tendem a ter apenas dezenas de milhares de usuários. Para uma boa ideia do tamanho, dê uma olhada no link Você realmente terá milhões de pessoas usando o sistema? Todos eles vão aparecer de uma vez ou se matricular gradualmente ao longo dos anos? Você não precisa de um sistema capaz de lidar com milhões se você só conseguir 10.000 no primeiro ano. Além disso, muitas instituições têm números teóricos de alunos que usarão o Moodle, mas apenas uma pequena porcentagem deles realmente usa o sistema. Em resumo, comece pequeno e aumente a escala.

Uma distro Linux tornará a vida mais fácil ao administrar o Moodle. A ajuda da comunidade online disponível não está orientada para o Windows!

Considere recrutar um parceiro local do Moodle (desculpe, eu sou novo e, portanto, não posso postar este segundo link) se você estiver falando sério sobre isso. Eles podem oferecer conselhos com base na experiência pessoal de configuração e administração de sistemas Moodle.

O Moodle é geralmente muito fácil em recursos do sistema. Basta observar os bancos de dados, pois a taxa de transação pode ser muito grande. Você não mencionou isso, mas considere separar servidores de banco de dados do servidor da Web e concentrar recursos no armazenamento em cluster do banco de dados. Com o armazenamento em cache (eaccelerator ou memcached), o acesso à web é insignificante. O armazenamento de arquivos também é geralmente não-intensivo e um link para um arranjo de ataque decente, local ou em uma máquina separada, é tudo o que é necessário. Se você tem uma SAN, use-a. Se não, basta ficar com coisas simples.

Como sempre, backup, backup, backup!

Boa sorte!

    
por 02.09.2009 / 15:45