2015-02-27 2 views
0

Как ejabberd обрабатывает действительно большое количество запросов. Напр.Как ejabberd обрабатывает действительно большое количество запросов

  • У меня только 1 экземпляр работает.

Я предполагаю:

  • Давайте mod_offline.erl, например
  • Этот модуль запускается на ejabberd_admin когда сервер запускается
  • Использование gen_server обратных вызовов.

- Есть только один экземпляр этого модуля бега или есть несколько экземпляров модуля работает одновременно - Если несколько, то сколько таких случаев?

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

Не могли бы вы предоставить несколько указателей?

Я очень новичок в erlang и ejabberd. Пожалуйста, помогите мне понять, как ejabberd заботится о высоких требованиях.

С наилучшими пожеланиями,

ответ

1

Типичным Erlang способом делать вещи, чтобы породить процесс за самостоятельную задачу (или набор задач).

Процесс нереста дешевый, и планирование очень легкое и обычно обрабатывается для вас автоматически - так что это простой способ моделирования массивно одновременной проблемы в Erlang (и обмен сообщениями в чате является прекрасным примером такой проблемы) ,

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

Чтобы лучше справиться с подобными вещами, я рекомендую написать несколько программ Erlang с нуля, которые касаются одновременного ввода пользователем. Сетевое программирование в Эрланге легко. Написание нескольких серверов с нуля даст вам много информации о том, почему поведение OTP работает так, как они делают.

Я работаю над промежуточной инструкцией, которая начинается с обсуждения архитектуры, которая может пролить свет на это. Первая (преднамеренно унииоматическая и не-OTP) итерация кода иллюстрирует множество основных идей, по которым обрабатываются сетевые запросы, и как процессы порождаются для моделирования различных параллельных элементов системы. Это все еще продолжается, но то, что существует до сих пор, должно иллюстрировать некоторые из вопросов, о которых вы спрашиваете: The ErlMUD Commentary.

+0

так, например, для каждого режима offline_message, ejabberd будет порождать процесс erlang? – GJain

+0

@ user2384694 offline_message, вероятно, помещается в очередь (или таблицу, которая работает как очередь), которая выставляется на основе некоторых критериев (например, предполагаемый пользователь, подключенный к сети). Но вам нужно будет проверить код, чтобы быть уверенным; ejabberd известен своей плохой документацией - место, чтобы понять это, вероятно, будет RabbitMQ (он был первоначально основан на ejabberd, но лучше документирован и немного легче понять IMO).В любом случае сообщения - это просто сообщения (а не процессы), но пользовательское соединение и другие элементы системы (каналы и т. Д.) - это процессы. – zxq9

+0

Большое спасибо за ваши ответы – GJain

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