Отказоустойчивая загрузка .js с последовательности серверов?

Давайте представим страницу веб-страницы, которой необходимо загрузить файл javascript (например, my.js). Можно ли организовать следующую последовательность аварийной загрузки?

  1. Если сервер А работает, загрузите my.js с сервера А.
  2. В противном случае, если сервер B работает, загрузите my.js с сервера B.
  3. В противном случае, если сервер C работает, загрузите my.js с сервера C.
  4. ...

Если да, то как действовать? Спасибо.

P.S.: Я только что нашел yepnopejs. Кто-нибудь рекомендует это?


person Jérôme Verstrynge    schedule 16.09.2011    source источник
comment
Это звучит не как вопрос программирования, а как вопрос для сред Active-Active Cluster. Вы можете попробовать ServerFault.   -  person John Hartsock    schedule 16.09.2011
comment
@ Джон, нет, нет, речь идет не о кластеризации, серверы не обязательно являются частью одного и того же кластера.   -  person Jérôme Verstrynge    schedule 16.09.2011
comment
Посмотрите на [этот вопрос] [1] [1]: stackoverflow.com/questions/5257923/   -  person Infeligo    schedule 16.09.2011


Ответы (1)


Я видел эту технику, позволяющую откатиться, если CDN не работает. Если ваш js-файл имеет какое-то проверяемое свойство, такое как глобальная переменная (я назвал ее маркером), вы можете попытаться загрузить файл с сервера A, проверить наличие маркера и, если он не найден, выполнить еще одну попытку.

<script type="text/javascript" src="http://server_A.tld/my.js"></script>
<script type="text/javascript">
if( !window.marker ) {
    document.write(
        '<script type="text\/javascript" src="http:\/\/server_B.tld\/my.js"><\/script>'
    );
}
</script>

Обновление. Нет опасности, что все скрипты будут работать с использованием этой техники. Джон Резиг объясняет это в своем блоге. Скрипты можно загружать параллельно и в любом порядке, но они должны выполняться по порядку.

Вот скрипт, демонстрирующий

person meouw    schedule 16.09.2011
comment
Хорошо, но уверены ли мы, что второй оператор (то есть запись документа) будет выполнен после неудачной попытки загрузки из A? Другими словами, уверены ли мы, что это строго последовательно? (извините, если вопрос звучит глупо, но я не специалист по javascript) - person Jérôme Verstrynge; 16.09.2011
comment
Часто ли CDN выходит из строя? - person cherouvim; 16.09.2011
comment
@cherouvim Маловероятно, но не невозможно, я думаю. - person meouw; 17.09.2011