Как получить FailureType в резервном методе при использовании @HystrixCommand

Некоторые люди скажут, что двух потоков слишком много - я не совсем в этом лагере: -)

Вот мой совет: measure, don ' Предположим, что должно быть настроено и изначально установить его на 100, затем отпустите свое программное обеспечение в дикое состояние и проверьте, что произойдет.

Если ваше использование потока достигает максимума 3, тогда 100 слишком много. Если он остается на уровне 100 в течение большей части дня, увеличьте его до 200 и посмотрите, что произойдет.

Вы могли фактически использовать ваш код для мониторинга вашего монитора и настроить конфигурацию для

Для пояснения и уточнения:

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

которые я считаю необходимыми для производительности):

  • минимальное количество активных потоков.
  • максимум число нитей.
  • завершение потоков, которые не использовались некоторое время.

Первый устанавливает базовую линию для минимальной производительности с точки зрения клиента пула потоков (это количество потоков всегда доступно для использования). Второй устанавливает ограничение на использование ресурсов активными потоками. Третий возвращает вас к базовой линии в спокойное время, чтобы свести к минимуму использование ресурсов.

Вам необходимо сбалансировать использование ресурсов, когда неиспользуемые потоки (A) используются для использования ресурсов, не имея достаточного количества потоков для выполнения work (B).

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

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

Во-первых, количество доступных соединений DB. Это может быть жестким пределом, если вы не можете увеличить его в СУБД - я собираюсь предположить, что ваша СУБД может принимать неограниченное количество соединений в этом случае (хотя в идеале вы также должны это измерить).

Затем количество потоков, которые вы должны зависеть от вашего исторического использования. Минимальный минимум, который у вас должен иметь бег, - это минимальное количество, которое у вас когда-либо имело + A%, с абсолютным минимумом (например, и сделать его настраиваемым точно так же, как A) 5.

Максимальное число нитей должен быть вашим историческим максимумом + B%.

Вы также должны отслеживать изменения поведения. Если по какой-либо причине ваше использование переходит на 100% доступного в течение значительного времени (так, чтобы это повлияло на производительность клиентов), вы должны увеличить максимальное допустимое значение до тех пор, пока оно снова не B% выше.

< hr>

В ответ на «что именно я должен измерить?» вопрос:

То, что вы должны конкретно определить, - это максимальное количество потоков при одновременном использовании (например, ожидание возврата из вызова БД) под нагрузкой. Затем добавьте коэффициент безопасности 10% для примера (подчеркнуто, поскольку другие плакаты, кажется, принимают мои примеры в качестве фиксированных рекомендаций).

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

0
задан Qoobee 31 December 2018 в 03:56
поделиться

0 ответов

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

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