Есть Caching Server (Varnish): он по запросу получает данные от Amazon S3, сохраняет их какое-то время и передает клиенту. Мы столкнулись с проблемой недостаточной емкости канала в 1Гбит. Пиковая нагрузка в течение 4 часов полностью заглушает канал. Производительности сервера пока хватает. Приблизительно 4,5 ТБ данных передается в день. Накапливается более 100 ТБ в месяц.
Первая мысль, которая приходит в голову, - просто добавить еще один порт 1GBit и спокойно спать, пока 2GBit не станет достаточно (это может произойти довольно быстро) или один сервер не сможет с этим справиться.
И тогда нам просто нужно добавить новые серверы кеширования. Но теперь нам нужен Load Balancer, который будет отправлять запросы по одному и тому же URL-адресу, всегда на одном и том же сервере (чтобы избежать множественных копий одних и тех же кешированных объектов).
Вот вопросы:
Нужен ли балансировщику диапазон, равный сумме всех диапазонов серверов кэширования? Что делать, если в балансировщике нет портов?
Да. Добавьте каналы большего размера или используйте географическую балансировку нагрузки CDN.
Стоит ли добавить больше балансировщиков или решить проблему с помощью Round robin DNS?
Фактически это то же самое решение. Вы добавляете дополнительные балансировщики и вставляете их в циклический DNS. Или, как я сказал ранее, более разумной альтернативой является использование географической балансировки нагрузки.
Каковы стандартные подходы к таким проблемам?
Используйте DNS, который будет отвечать ближайшим к пользователю сервером, и разместите такие серверы по всему миру. У этого есть и другие преимущества, такие как предоставление пользователям возможности работать с малой задержкой.
Кто-нибудь может посоветовать хостинг-компании, которые могут решить эту проблему? Нам интересны рынки Америки и Европы.
Для географической балансировки нагрузки DNS вам следует погуглить. Вам понадобится служба DNS более высокого уровня, но вы сможете ее найти. В Европе вам обязательно стоит взглянуть на OVH, который имеет действительно большую сеть и может предоставить вам мультигигабитную пропускную способность. Что касается США, я не знаю.
Да, балансировщик нагрузки должен иметь возможность обрабатывать весь накопленный трафик от / ко всем серверам. Итак, я бы рекомендовал использовать балансировщик нагрузки с одним восходящим каналом 10 ГБ и другими портами 1 ГБ, подключенными к нескольким кэширующим серверам. Аппаратный балансировщик нагрузки может быть более эффективным для обработки такого огромного трафика.
Ваш лимит будет составлять максимум 10 ГБ при условии, что балансировщик нагрузки сможет без проблем обрабатывать весь трафик.
Балансировщик нагрузки также может проверять работоспособность серверов, прежде чем направить запрос на любой сервер, у которого более высокая доступность поставщика.
Необходимо выбрать подходящий алгоритм балансировки нагрузки, чтобы избежать кэширования дубликатов и предоставить нужные данные нужному пользователю.