Tempos limites aleatórios entre zonas no Amazon EC2?

1

Estou tendo problemas com conexões tcp entre duas instâncias no EC2. Eu pensei no princípio que eram as ferramentas que eu estava usando (pilha JRuby on Rails + MongoDB) quando eu via exceções como as seguintes no meu código:

A Mongo::OperationFailure occurred in foo#bar:

Mongo::OperationFailure
.bundle/jruby/1.8/gems/mongo-1.6.2/lib/mongo/util/tcp_socket.rb:76:in 'read'

Então, pensando que isso é um problema de software, eu não vim para o ServerFault. Eu pensei que as aulas de IO em JRuby poderiam ser escolhidas depois de alguma pesquisa, mas isso não era exato. Eu fui em frente e instalei o Ruby 1.9.3 e movi a pilha inteira para ele. Com certeza, depois de um tempo, uma exceção similar surgiu:

A Errno::ETIMEDOUT occurred in anotherfoo#anotherbar:

Connection timed out
mongo (1.6.2) lib/mongo/util/tcp_socket.rb:70:in 'readpartial'

A razão pela qual eu venho ao serverfault para obter ajuda é porque eu acredito que isso pode ser algum problema de tempo limite entre zonas na infraestrutura da Amazon e fiquei me perguntando se algum pode verificar ou me dar sugestões de como depurar ainda mais isso enquanto eu estou executando de soluções. Meu servidor de aplicativos está em us-east-1a. O servidor mongodb está em us-east-1c. Talvez isso possa ser uma razão? Por que posso apostar a obtenção desses tempos limite usando um Amazon Linux AMI padrão (64 bits, XLARGE)?

    
por imaginative 06.05.2012 / 03:09

1 resposta

2

Newsflash: a rede não é confiável. Seja o EC2 ou o local, às vezes sua rede não funcionará como você gostaria. Se o seu código não for capaz de lidar com isso, você terá problemas, não importa onde esteja hospedando.

Dito isto, as zonas de disponibilidade do EC2 estão geograficamente dispersas, por isso não é razoável esperar que a rede seja tão confiável quanto uma LAN (ou mesmo dentro do mesmo AZ). Mover as coisas para o mesmo AZ pode melhorar sua confiabilidade, mas não ao ponto de você poder esperar por um código que não leve em conta o soluço ocasional da rede. Portanto, corrija seu código para que ele capture as exceções apropriadas e repita a operação com falha.

    
por 06.05.2012 / 04:21