10 Dec
Posted by alexf as SEO сервисы, widgets, идеи, траф, холокост
« User generated content в оффлайне | Про сотрудничество »
Сегодня с утра лёг отдохнуть один из серверов с дорами. Вроде бы событие ординарное, но неприятный момент, что на том же сервере сидел трафораспределительный скрипт, что-то вроде ТДС, который обслуживает всё что есть на сервере плюс часть того, что хостится в других местах. В результате довольно приличный шмат трафа улетел в открытый космос, хорошо ещё что дело было ночью по Америке.
Как от этого защититься я теоретически знаю, но практически реализовать не могу, не хватает знаний жабо-скриптов. Нужен такой жаба-скрипт, который бы тянул src из нескольких разных мест, что-то типа <script src=”host1.com” onerror=”host2.com”>. Как это на практике реализовать я пока не сообразил.
Вероятно, можно в статическом скрипте сделать список хостов где лежит ТДС и сначала пытаться загружать скрипт как картинку, если картинка загрузиться – грузить скрипт, а в случае ошибки – переходить к следующему хосту. Либо просто загружать ТДС со всех доступных хостов и чтобы первый отработавший скрипт не давал отработать остальным, это наверное будет шутсрее.
Насколько я знаю, во всех публичных и приватных TDS падение головного хоста тоже является узким местом и никто ещё этой идеи не реализовал. Если кто-то уже сделал, может поделится знаниями?
13 Responses
December 10th, 2007 at 20:41:13
// php gravatar() ?>1У меня сервера пингуют друг друга и шлют СМС при недоступности. Один раз подрывался в 5 утра, запрос ребута и все ок. Но пока встал, пока комп включил, беее
onerror только у , судя по моей книжке. Попробовал набросать код, вот что получилось
var res=’hui’;
var I=new Image();
I.onload=”res=’http://tds1.com/in.cgi’”;
I.onerror=”res=’no’”;
I.src=’http://tds1.com/testimage.gif’;
while (res==’hui’);
if (res==’no’)
{
res=’hui’
I.onload=”res=’http://tds2.com/in.cgi’”;
I.src=’http://tds2.com/testimage.gif’;
while (res==’hui’);
// и так далее…
}
if (res==…
Мне не очень нравиться, т.к. как минимум придется делать hidden к docement.body, чтобы серфер не напрягался моргающими дорами…
December 10th, 2007 at 22:19:49
// php gravatar() ?>2может стоит кэшировать на дорах адрес того куда слать траф?
и потом если тдс доступна – обновлять закэшированный адрес, а если не доступна – слать по старому
December 10th, 2007 at 23:22:38
// php gravatar() ?>3TerVer, пингование решает абсолютно другую проблему (тоже важную). Если сервер упал и не хочет подниматься из-за того что в нём например жёсткий диск полетел – ему не поможет что ты встал в 5 утра.
Кстати, как СМС отправляешь?
andrey, я не понял, как можно что-либо закешировать на дорах? Дор это статическая страница на фрихосте, к которому забыт пароль и так 5000 раз. И серфер её посещает в среднем 1 раз в жизни. Там при всём желании ничего не закешируешь. Иначе бы и вопроса не возникло.
December 11th, 2007 at 08:48:45
// php gravatar() ?>4Некоторые сотовые операторы поддерживают прием смс по мылу. У меня мегафон – поддерживает.
Пингатор я не с первого раза написал. Т.к. в самом простом было две баги: это когда сервер например захлебывался от ботов и тестовая страничка не успевает скачаться за выставленный таймаут – приходит сообщение, захожу на дэдик – он в порядке; а второе, то о чем ты говоришь – если дедик не подымается, то скрипт все шлет и шлет смс, пока его не приходится отключать. Поэтому пингатор мой, теперь смс шлет только если убедится в недоступности и один раз. Забыл сказать, что он не пингует а скачивает с тестируемого дэдика php скрипт, который выполняет тесты.
ЗЫ: в моем первом посте тэги порезались, читать надо “onerror только у img, судя по…”
December 11th, 2007 at 17:30:57
// php gravatar() ?>5Можно воспользоватся тем что отказоустойчивость заложена в архитектуру DNS. Делаешь так:
На сервере 1 подымаешь nameserver для domain.com что-то вроде этого:
domain.com IN A [SERVER1-IP]
domain.com IN NS ns1.domain.com
domain.com IN NS ns2.domain.com
На сервере 2 подымаешь nameserver для того же domain.com, но A уже ведет на сервер 2:
domain.com IN A [SERVER2-IP]
domain.com IN NS ns1.domain.com
domain.com IN NS ns2.domain.com
ns1.domain.com – заводишь на сервер1, ns2.domain.com – на сервер2
В нормальном режиме, клиенты будут балансироватся между серверами равномерно. Если один сервер падает, падает и DNS на нем. Клиенты не дождавшись ответа, скажем от ns2.domain.com обязаны обратится к ns1.domain.com, который отдаст уже IP на живом сервере.
Если нужна большая стабильность – можешь разнести на более чем два сервера TDS.
Так же нужно будет подкрутить поменьше TTL, например до 600 – тогда гарантировано весь траф за 10 минут переключится на рабочий сервер. Хотя для посетителей идущих из поисковика это не очень важно – в большинстве идут уникальные посетители (неуники в основном это тот кто повторно по сепру вернулся).
December 11th, 2007 at 18:21:07
// php gravatar() ?>6to anonymous,
согласен, рабочая схема. Тут только возникает вопрос синхронизации данных на TDS-ках.
December 11th, 2007 at 19:41:02
// php gravatar() ?>7Я всего лишь привел пример как реализовать отказоустойчивость. А вопрос синхронизации статистики возникает в любом случае, если разносишь TDS на разные сервера.
December 13th, 2007 at 15:07:49
// php gravatar() ?>8а есть ли возможность чтоб в нормальном режиме, клиенты не балансировали между серверами, а попадали только на первый сервер? Если например создать 10 НС записей для домена, где 9 первых ведут на сервер1, а последняя запись на сервер2… или как это ещё можно сделать?
December 14th, 2007 at 18:08:52
// php gravatar() ?>9Ka82, можно на разных серверах в днс прописать один и тот же сервер. В случае его падения – на оставшихся серверах переписывать ДНС на другой сервер. Не знаю можно ли это автоматизировать, но в принципе за решение проблемы это покатит.
Лучше всё-же попытаться сделать так как я написал.
Если домен с ТДС не заберут за абуз.
February 18th, 2008 at 12:22:17
// php gravatar() ?>10[...] на TDS заходы со странной страницы с домена – tsm.yst.corp.yahoo.com. [...]
June 24th, 2008 at 02:15:10
// php gravatar() ?>11Есть кстати интересная тема с упаковкой скриптов в PNG-файлы. Может, есть смысл заюзать?
June 24th, 2008 at 15:56:52
// php gravatar() ?>12Модный дизайн, что за тема, хак какой-нибудь?
June 24th, 2008 at 16:48:07
// php gravatar() ?>13Нет, обошлось без хаков. Используется объект Canvas, что ограничивает сферу применения свежими браузерами.
RSS feed for comments on this post · TrackBack URI
Написать комментарий
Про что писал
Календарь
Куйворды
Архив
Подписка на блог
Статистика подписки
Страницы
Комментарии
Последние посты
Blogroll
Счётчики
Свежие записи
Последние комментарии
Интересное на блоге
Самое комментируемое
SEO блог где палят темы is proudly powered by WordPress - BloggingPro theme modified by alexf