Лучшие практики для противостояния дневному всплеску трафика запуска

В Java все переменные, которые вы объявляете, на самом деле являются «ссылками» на объекты (или примитивы), а не самими объектами.

При попытке выполнить один метод объекта , ссылка просит живой объект выполнить этот метод. Но если ссылка ссылается на NULL (ничего, нуль, void, nada), то нет способа, которым метод будет выполнен. Тогда runtime сообщит вам об этом, выбросив исключение NullPointerException.

Ваша ссылка «указывает» на нуль, таким образом, «Null -> Pointer».

Объект живет в памяти виртуальной машины пространство и единственный способ доступа к нему - использовать ссылки this. Возьмем этот пример:

public class Some {
    private int id;
    public int getId(){
        return this.id;
    }
    public setId( int newId ) {
        this.id = newId;
    }
}

И в другом месте вашего кода:

Some reference = new Some();    // Point to a new object of type Some()
Some otherReference = null;     // Initiallly this points to NULL

reference.setId( 1 );           // Execute setId method, now private var id is 1

System.out.println( reference.getId() ); // Prints 1 to the console

otherReference = reference      // Now they both point to the only object.

reference = null;               // "reference" now point to null.

// But "otherReference" still point to the "real" object so this print 1 too...
System.out.println( otherReference.getId() );

// Guess what will happen
System.out.println( reference.getId() ); // :S Throws NullPointerException because "reference" is pointing to NULL remember...

Это важно знать - когда больше нет ссылок на объект (в пример выше, когда reference и otherReference оба указывают на null), тогда объект «недоступен». Мы не можем работать с ним, поэтому этот объект готов к сбору мусора, и в какой-то момент VM освободит память, используемую этим объектом, и выделит другую.

16
задан Anant Singh---Alive to Die 5 June 2015 в 19:06
поделиться

7 ответов

Чтобы подготовить или обработать скачок (или пик) производительность, я сначала определил бы, готовы ли Вы посредством некоторого простого тестирования производительности с чем-то как jmeter.

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

Однако, учитывая Ваши ограничения времени, другие шаги для взятия должны были бы подготовить статические версии содержания, которое привлечет самое высокое внимание (такое как пресс-релизы, если день запуска). Также удостоверьтесь, что Вы лучше всего используете клиентское кэширование (1, меньше запроса к Вашему серверу может иметь все значение). Сеть, уже разработанная для чрезвычайно высокой масштабируемости и кэширования контента эффективного использования, является Вашим лучшим другом в этих ситуациях.

существует превосходный подкаст на высокой масштабируемости на радио разработки программного обеспечения на дизайне нового веб-сайта Опекуна , когда вещи успокаиваются.

удача на запуске

1
ответ дан 30 November 2019 в 22:37
поделиться

Имейте размеры сначала, затем оптимизируйте. Вы сделали какое-либо испытание на нагрузку? Где узкие места?

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

кроме того, как Ваши результаты испытания на нагрузку выдерживают сравнение с Вашим ожидаемым трафиком? Можно ли обработать 2x ожидаемый трафик? 5x? Как легкий/быстрый может Вы получать & выпустить дополнительное оборудование? Я уверен, что бизнес-требование не состоит в том, чтобы перестать работать во время запуска, поэтому удостоверьтесь, что Вы имеете партии из доступной способности, можно всегда выпускать его впоследствии, когда загрузка стабилизировалась, и Вы знаете то, в чем Вы нуждаетесь.

9
ответ дан 30 November 2019 в 22:37
поделиться

Я, по крайней мере, факторизовал бы все статическое содержание. Установите другой vhost где-то в другом месте и загрузите весь graphics/css/js на него. Можно купить некоторые дополнительные циклы, разгружающие обслуживание того типа содержания. Если Ваш действительно соответствующий можно подписаться и использовать сервис распространения контента. Существуют партии, теперь подобные Akamai и довольно дешевые.

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

Удача, это будет полезный опыт!

3
ответ дан 30 November 2019 в 22:37
поделиться

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

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

2
ответ дан 30 November 2019 в 22:37
поделиться

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

0
ответ дан 30 November 2019 в 22:37
поделиться

Я, лично, сделал бы несколько вещей

1) Вставленный в своего рода подсистему балансировки нагрузки / система репликации баз данных

, Это означает, что можно было распространить сервис через несколько серверов. Не мочь позволить себе иметь больше чем один сервер постоянно? Используйте Amazon E3 - Это хорошо для помещения на месте для вещей как это (включите еще несколько серверов для обработки загрузки)

2) Код в некоторой "Высокой Загрузке" ограничения

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

3) Нагрузочный тест... Используйте что-то как ApacheBench к стресс-тесту Ваши серверы.

4) Лично, я думаю, что выключение "Активных" Соединений лучше. Это может немного уменьшить общую производительность, но - это означает, что вместо того, чтобы иметь что-то, где сайт работает хорошо на несколько человек, и другие получают тайм-ауты, все получают непоследовательный сервис, если это добирается до того уровня

, Формат Linux сделал хорошую статью о, "Как пережить slashdotting"..., который я нашел полезными в прошлом. Это доступно онлайн как PDF

1
ответ дан 30 November 2019 в 22:37
поделиться

Основные первые шаги для защиты вашего сайта от высокого трафика.

1) Используйте недорогой инструмент, например https://browsermob.com/, для нагрузочного тестирования вашего сайта. Как минимум, вы должны рассчитывать на 100 тысяч уникальных посетителей в час. Если вы размещаете рекламу на главной странице MSN, то рассчитывайте на 500 тысяч уникальных посетителей в час.

2) Переместите весь статический графический/видео контент в CDN. Edgecast и Amazon - два отличных варианта.

3) Используйте Jet Profiler для профилирования сервера MySQL, чтобы проанализировать все медленно выполняющиеся запросы. Небольшие изменения могут принести огромную пользу.

1
ответ дан 30 November 2019 в 22:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: