2010-08-11 2 views
0

Итак, чтобы ускорить время загрузки, мы создаем кучу имен хостов CDN для обслуживания изображений и активов. Какой лучший способ последовательно использовать один и тот же хост для одного и того же актива? Например. button.gif всегда получает от http://assets-15.ourserver.com.Как последовательно обслуживать активы с одного и того же хоста CDN?

Я думал о том, чтобы придумать какое-то правило, где хеш файла md5 каким-то образом отображается на сервере (не может использовать имя самого файла, так как много похожее: «button-home.gif», button-about.gif "и т. д.). Я не уверен, что это самый эффективный способ, но похоже, что это сработает.

У кого-нибудь есть опыт работы с подобными вещами? Мне нужно языковое агностическое решение, потому что это будет использоваться несколькими языками.

EDIT: объяснение Yahoo о том, как это ускоряет вещи: http://developer.yahoo.com/performance/rules.html#split

+0

Будьте осторожны с этими yahoo.com. Рекомендации в отношении электронных тегов в частности менее оптимальны и убедили людей в односерверных системах (где электронные теги никогда не имеют проблем здесь), чтобы отключить их. Теперь, убедившись, что они работают правильно, это хороший момент (и очень важный в вашем случае), но совет вводит в заблуждение. В этом отношении я подозреваю, что идея с несколькими именами хостов, которые вы здесь делаете, в будущем станет потерей нетто, хотя она по-прежнему остается чистой при текущих настройках браузеров по умолчанию. –

ответ

1

Когда я сделал что-то подобное, все соответствующие ресурсы имели номера идентификаторов в любом случае, поэтому я просто использовал это как основу. Тем не менее, это не слишком сложно распространить на не-номера.

Существует баланс количества хостов, которые вы используете, при слишком большом количестве служебных запросов хоста, превосходит преимущество нескольких имен хостов, поэтому снаружи вы, вероятно, будете иметь около 12, возможно, меньше.

Это само по себе означает, что простой хэш, скорее всего, будет разделен на заданный диапазон достаточно легко, без необходимости быть особенно умным.

Недостаточно путаницы в кодировании, поскольку ваше приложение имеет дело с IURI полностью (в этом случае обработка utf-8 уже является проблемой, с которой вы столкнулись), или нет, и в этом случае каждый символ в выведенная URI форма пути (то есть имя, используемое в фактическом URI) будет находиться в диапазоне ASCII.

Нет необходимости в криптографической защите или что-то в этом роде, так как это не угроза безопасности, чтобы угадать используемый сервер. Это будет не конец света, если одна или две страницы немного принесут немного одного сервера другому (случайность будет иметь место с совершенным, так или иначе).

Следовательно, просто пробегает символы в абсолютном пути URI для изображения (все после хоста с первого раза или вперед), добавляя их целочисленное значение друг к другу, а затем используйте по модулю эту часть Имя хоста.

Если вы хотите ограничить количество обработанных символов для проблем с производительностью, сделайте это с конца назад, так как это будет иметь наибольшее отклонение.

То, что «button-home.gif» похоже на «button-about.gif», не является проблемой, так как на самом деле они не очень похожи друг на друга, как это видно в результате процесса, подобного этому.

Если вы когда-либо увеличиваете количество используемых имен хостов, попробуйте сделать это как кратное предыдущему числу, так как это приведет к максимально возможному количеству ресурсов, сохраняющих свои старые URI.

+0

Ага, это было бы прекрасно. Я даже не думал о чем-то вроде суммирования персонажей - отличная идея :) –

+0

Иногда решения могут быть настолько простыми, что их трудно понять, когда вы целый день занимались сложностями. –

+0

@JonHanna У нас есть 3 псевдонимов двух CDN-серверов. Я использую контрольную сумму строки и деля моду на 6, чтобы получить, какой ресурс должен быть подан с какого сервера. Но если есть 200 активов, они не делятся на 6 ведер. Могу ли я сделать что-то большее для эффективного распределения нагрузки? –

1

Точка в сеть доставки контента (CDN) является загрузка актива, сервер, ближайший к пользователю.

Загрузка данного ресурса с явного сервера поражает цель CDN. Я предполагаю, что он не поддерживается. Если вам нужно загрузить актив из явного местоположения, не кладите его на CDN, ставьте его на центральный сервер.

+0

Возможно, я недостаточно объяснил себя - все они будут обслуживаться с CDN, но у нас есть разные имена хостов ресурсов, указывающие на то же происхождение. Мы пытаемся разделить активы между именами хостов, чтобы ускорить работу: http://developer.yahoo.com/performance/rules.html#split –

+0

Все в порядке, но при использовании CDN вы все равно не должны указывать, какой сервер активы идут. Вы должны полагаться на CDN, чтобы правильно направлять свой запрос, чтобы максимально увеличить скорость как географически, так и балансировку нагрузки на нескольких серверах (с использованием разных доменных имен). –

+0

Это не указывает, с какого источника они происходят. Скажем, я размещаю свои активы на сайте asset-origin.ourserver.com и создаю 2 имени хоста CDN, assets-1.ourserver.com и assets-2.ourserver.com. Конечные точки CDN оба указывают на asset-origin.ourserver.com, но я хочу распространять запросы между именами хостов для лучшего времени загрузки в браузере. Таким образом, button.gif всегда должен быть загружен из assets-1.ourserver.com, а логотип.gif всегда загружается из assets-2.ourserver.com. –