Высокий трафик с несколькими плохими хостингами

Сложная ситуация здесь!

Ситуация сейчас: у нас главный сервер делает только свои вещи. Данные меняются каждую секунду на нем. Нам нужен веб-виджет (HTML-данные), чтобы поделиться с другими сайтами. Этот виджет должен обновляться каждую минуту. Данные виджета будут меняться каждую секунду. Все остальные посетители сайта должны видеть эту информацию. Мы не можем справиться с таким большим трафиком. Сервер нужен онлайн 24/7, и они не будут подключаться к нему каждую минуту. Я говорю о миллионе показов в месяц.

Решение, над которым мы работаем: получить несколько планов хостинга. Все хостинги будут хранить данные HTML, которые будут показаны посетителям. Каждая учетная запись хостинга будет делать cronjob каждую минуту на наш главный сервер. Получает HTML и сохраняет его до следующего cronjob. Вот как мы перемещаем трафик с нашего основного сервера в другое место. Теперь это часть, где посетители сайта будут подключаться к HTML, хранящемуся на наших хостингах. Код вниз соединяется с первым хост-сервером, если он не отвечает через некоторое время, он соединится со вторым. И продолжайте цикл, пока некоторые из них не вернут HTML-данные. Конечно, если они загрузятся на 100%, мы получим еще один новый хостинг.

<script>
server_1 = 'http://hostingserver_one.com/';
server_2 = 'http://hostingserver_two.com/';

wait_for_response = 5000;
one_minute = 60 * 1000;
half_minute = 30 * 1000;
right_away = 1;

current_refresh_minute = one_minute;
current_refresh_server = server_1;

function ajaxRequestInfo() {
    $.ajax({
        type: 'GET',
        url: current_refresh_server,
        timeout: wait_for_response,
        data: {},
        success: function(data) {
            $(".data_for_refresh").html(data);
        },
        complete: function(data) {
            window.setTimeout(ajaxRequestInfo, one_minute);
        },
        error: function() {
            changeRefreshServer();
            window.setTimeout(ajaxRequestInfo, right_away);
        },
        async: true
    });
}

function changeRefreshServer() {
    if (current_refresh_server == server_1) {
        current_refresh_server = server_2;
    } else if (current_refresh_server == server_2) {
        current_refresh_server = server_3;
    } else if (current_refresh_server == server_3) {
        current_refresh_server = server_1;
    }
}

$(document).ready(function() {
    ajaxRequestInfo();
});

Вопрос: это лучший способ сделать?! Если нет, то что лучше. Я уверен, что многие из вас уже прошли эти ситуации, но это мой первый:)

4 ответа

Решение

Разговор о миллионе файлов html выглядит для меня странно, но вы можете справиться с этим более точно.

Две вещи, которые вам нужно беспокоиться, это то, что

балансировка нагрузки и использование большего объема памяти, чем может обеспечить один веб-сервер.

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

По сути, я установил стандартную WordPress на сервер, который делает ProxyPass. Затем я настроил сайт и установил расширения и шаблоны. Я настроил базу данных SQL на этом сервере, в нашем случае это также прокси, но было бы идеально изолировать ее на своем сервере или во внешней службе базы данных, такой как Xeround. В моих конфигурациях WordPress, apache, mysql и memcached я всегда указываю IP-адреса внутренней частной сети, поскольку все мои серверы в iWeb являются Smart Servers. Это исключает трафик в сети общего пользования. Это делает настройку намного безопаснее.

Я прочитал это здесь, вы можете найти больше идей здесь

Ультракинг- это ш / ж вам нужно беспокоиться

Теперь, в вашем случае, у вас есть несколько html-файлов, которые идут сервер за сервером, чтобы узнать конкретный файл пользователя. Но это не очень хорошая идея, чтобы найти на всем сервере. Вместо этого у одного объекта json будет информация о том, какой сервер содержит какую информацию. Теперь сценарий будет "Пользователь"> попадет на ваш сайт (содержит информационный объект о каждом сервере) >> запрос пользователя на файл> объект "json-файл"> попадет в ваш уникальный файл.

Это позволит более уменьшить трафик на ваш сервер. Спасибо

[редактировать]

Все зависит от стратегии планирования, которую вы используете для работы с пользователями. Вы не можете справиться с одним пользователем, если вы придерживаетесь стратегии, и правильный выбор инструмента не дает ориентира.

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

Вы должны поместить некоторую форму распределения нагрузки перед массивом веб-серверов, которые обслуживают ваш (HTML) контент.

Веб-серверы также должны быть изолированы от вашего сервера "data/main", используя некоторый общий кэш, чтобы избежать загрузки последнего. Смотрите Memcached для примера.

Трудно получить детали в ответе Stackru. Кроме того, число, которое вы цитируете, не выглядит для меня слишком высоким, и я чувствую (и чувствую только), что минимальное количество серверов разумного размера с правильно включенным кэшированием должно легко справиться с этими значениями.

1 миллион показов может показаться большим трафиком, но в действительности большинство веб-серверов могут справиться с такой нагрузкой в обычных ситуациях. Если вы работаете на общем сервере или VPS, я понимаю, что 1 миллион может быть слишком большой нагрузкой, вам следует обратить внимание на выделенный хостинг или увеличить спецификации VPS, если это ваша ситуация. У вас также могут возникнуть проблемы с масштабированием вашего кода / базы данных и т. Д., Которые замедляют работу.

Хотя в вашем подходе нет ничего плохого, это может быть лучше решено с помощью более точной настройки, но если вы хотите пойти по пути двух серверов, вам следует изучить балансировку нагрузки и хостинг в облаке с эластичными ресурсами, такими как, например, Moo, рекомендованный AWS или Azure, а не чем полагаться на код Javascript на стороне клиента для отправки трафика на правильный сервер.

Миллион в месяц - это не так уж плохо. Вы можете справиться с этим, даже если клиенты подключаются к вам напрямую для получения данных. Просто разместите большую часть вашего виджета извне и попросите его загрузить крошечный текстовый файл с основного сервера с помощью javascript xmlHttpRequest, а затем перенести его в удобный для пользователя дизайн. Для сравнения, мой сервер получает 6 миллионов хитов в месяц. Средний размер каждого из них составляет 15 кБ. Это гораздо больше, чем вам нужно. И вот сюрприз: этот "зверь" сервера является роутером SOHO DD-WRT под моей таблицей.:)

РЕДАКТИРОВАТЬ: Вы все еще можете управлять этим с включенным GZIP на лету. Не то чтобы это имело смысл с выходными данными менее 100 байтов, которые я предлагаю вам сделать.

Другие вопросы по тегам