2016-04-04 4 views
9

Чтобы реализовать слабый бот, мне нужно иметь дело с «API обмена в режиме реального времени». Это API на основе WebSocket, который позволяет получать события от Slack в режиме реального времени и отправлять сообщения как пользователь. подробнее: https://api.slack.com/rtmКак масштабировать слабый бот до 1000 команд

Чтобы создать бот только одна команды, мне нужно открыть одно подключения WebSocket и слушать его события.

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

  • 1 команда => 1 WebSocket соединение
  • 2 команды => 2 WebSocket соединения
  • N команд => N WebSocket соединения

, что я должен сделать, чтобы масштабировать свою WebSocket соединения для бесконечных команд?

Какая архитектура может обрабатывать автомасштабирование соединений 1000-х сетевых соединений?

ответ

7

С слабину розетками, у вас есть много вещей, чтобы масштаб:

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

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

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

+0

Это правда, что Node может управлять множеством одновременных сокетов, но латентность становится более непредсказуемой в масштабе. Если у вас есть код, чувствительный к производительности, стоит использовать какую-то систему кластеризации, чтобы равномерно распределить нагрузку по нескольким процессам, поэтому кратковременная ошибка в одном не забивает все. – tadman

Смежные вопросы