Назад | Перейти на главную страницу

Случайные таймауты между зонами в Amazon EC2?

У меня проблемы с TCP-соединениями между двумя экземплярами в EC2. Сначала я подумал, что это инструменты, которые я использовал (JRuby on Rails stack + MongoDB), когда я увидел в моем коде исключения, такие как следующие:

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'

Поэтому, думая, что это проблема программного обеспечения, я не приходил в ServerFault. Я думал, что классы ввода-вывода в JRuby могут быть закрыты после некоторого исследования, но это было не так. Я установил Ruby 1.9.3 и переместил в него весь стек. Конечно, через некоторое время возникло похожее исключение:

A Errno::ETIMEDOUT occurred in anotherfoo#anotherbar:

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

Причина, по которой я обращаюсь к serverfault за помощью, заключается в том, что я действительно считаю, что это может быть проблема с тайм-аутом между зонами в инфраструктуре Amazon, и мне было интересно, может ли кто-нибудь проверить или дать мне предложения по дальнейшей отладке, поскольку у меня заканчиваются решения . Мой сервер приложений находится в us-east-1a. Сервер mongodb находится в us-east-1c. Может быть, это могло быть причиной? Почему я могу поставить на то, чтобы получить эти таймауты, используя AMI Amazon Linux по умолчанию (64-разрядный, XLARGE)?

Новость: сеть ненадежна. Будь то EC2 или local colo, иногда ваша сеть не работает так, как вам хотелось бы. Если ваш код не способен справиться с этим, у вас будут проблемы, независимо от того, где вы принимаете.

При этом зоны доступности EC2 являются географически рассредоточены, поэтому неразумно ожидать, что сеть будет такой же надежной, как LAN (или даже в пределах одной зоны доступности). Перемещение вещей в ту же АЗ мощь повысить вашу надежность, но не до такой степени, чтобы вы могли надеяться избежать наказания с помощью кода, который не учитывает случайные сбои в сети. Итак, исправьте свой код, чтобы он перехватил соответствующие исключения и повторил неудачную операцию.