Разрыв монолита: балансировка нагрузки VS рабочих

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

Однако это монолит, и обработчики событий запускаются под тем же процессом, который управляет API. Ответ на один запрос API эффективен, но процессор процесса быстро задушит управление работой API +.

У меня есть два способа масштабирования:

  1. Смещение фоновых задач рабочим

  2. Сделать баланс кластера и нагрузки одним и тем же процессом

Хотя оба подхода должны быть реализованы в долгосрочной перспективе: какой из них должен быть первым для масштабирования?

Мое предположение заключается в том, что не здоровый монолит легче исправить с помощью опции (1), в то время как опция (2) охватывает ранее важные потребности в инфраструктуре (поэтому она будет оптимальной для хорошо структурированных монолитов)

3 голоса | спросил SystematicFrank 31 SunEurope/Moscow2017-12-31T11:04:21+03:00Europe/Moscow12bEurope/MoscowSun, 31 Dec 2017 11:04:21 +0300 2017, 11:04:21

1 ответ


2

У меня слишком мало информации, чтобы дать определенный ответ, но у меня есть приложение для обработки пакетов, где подход (2) является предпочтительным по сравнению с подходом (1). По сравнению с подходом (1) я получил более миллиона пакетов в секунду более высокую производительность с подходом (2). Причиной этой улучшенной производительности является снижение затрат на межпроцессорную связь.

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

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

Теперь я не знаю, насколько велика ваша задача. Тысячи задач в секунду? Миллионы задач в секунду? Я могу видеть выгоду в рабочем подходе, если ваша скорость работы - это всего лишь тысячи задач в секунду. При миллионах задач в секунду вы начнете обнаруживать, что рабочий подход неэффективен.

ответил juhist 31 SunEurope/Moscow2017-12-31T12:36:56+03:00Europe/Moscow12bEurope/MoscowSun, 31 Dec 2017 12:36:56 +0300 2017, 12:36:56

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132