Melhor arquitetura AWS?

2

O objetivo é ter o máximo de redundância possível para que possamos nos recuperar rapidamente de falhas de instâncias ou de quaisquer outros problemas. Nossa configuração atual da AWS para um Rails WebApp que executamos é a seguinte:

  • Instância do EC2 em que temos uma AMI da configuração inicial. Também criamos novas AMIs toda vez que fazemos uma alteração na configuração da instância.
  • Codebase, diretórios de usuários da instância e alguns arquivos de configuração ao vivo em um volume do EBS (os arquivos são rsynced à noite ou ligados por links simbólicos) que é montado pela instância do EC2
  • Backups semanais completos do volume do EBS para o bucket do S3 e backups incrementais noturnos
  • O WebApp usa o banco de dados hospedado pelo RDS definido como 10 dias de recuperação

Alguém tem alguma sugestão para tornar isso ainda mais robusto? (Nós quase fomos pegos com nossas calças e não queremos que isso aconteça novamente ...)

    
por Chris 31.10.2010 / 17:45

2 respostas

3

Você também pode executar várias instâncias do EC2 e balancear a carga entre elas. Também deve colocar seu tempo de atividade acima de 99,99%, se ainda não estiver lá. Pelo que entendi uma única instância do EC2 está em torno de 99,95% ou 99,5% + de tempo de atividade, balanceamento de carga-los e rockets até 99,99% ou melhor, muitas vezes atingindo a faixa + 99,999%. De qualquer maneira que poderia ajudar também ...

... e outra ideia é deixar um hot swappable do EC2. Além disso, possivelmente mantenha um repositório RDS com hot swap também, caso a cópia de produção seja corrompida ou algo assim.

... e outra ideia, mantenha uma instância do EC2 inicializada com mySQL, como uma última cópia de emergência se algo estiver relacionado à cópia do RDS.

... e última ideia, execute um serviço hospedado em nuvem com carga de troca dinâmica ou carga balanceada - ou hot swappable E de carga equilibrada em uma nuvem secundária, como Rackspace ou outro host em nuvem compatível com RoR.

Espero que ajude. :)

    
por 31.10.2010 / 17:55
2

Eu quero secundar, Adron. Se você precisar de mais disponibilidade, o balanceamento de carga será o caminho a seguir.

Configuração sugerida

  1. Obtenha um serviço de DNS hospedado como dnsmadeeasy ou dyndns . [A ideia é obter um serviço global que permita o balanceamento de carga round-robin com TTLs extremamente baixos. Uma API é uma vantagem para uma integração suave.)
  2. Dois balanceadores de carga elásticos (ELB) para failover.
  3. Uma matriz de servidores de aplicativos por trás deles.

É claro que os ELBs precisam de verificações de integridade para os servidores de aplicativos configurados.

Se os ELBs não funcionarem para você (por exemplo, taxa de transferência limitada ou eventualmente consistente ;-)), procure em Haproxy . É um ótimo software. Você teria que executar isso em duas instâncias separadas - eu iria com c1.medium ou m1.small tipo de instâncias.

Monitoramento & Alertando

Também é importante monitorar a configuração em todos os componentes. Não apenas para alertar, mas também para planejamento de capacidade.

Sugiro que consulte o AWS CloudWatch ou um serviço como ServerDensity . Depende de quanto você quer construir em casa, por exemplo é mais fácil entrar no ServerDensity e configurar o monitoramento e o alerta, enquanto o CloudWatch exige outra solução para extrair os dados e analisá-los e depois alimentá-los em alertas.

    
por 01.11.2010 / 15:36