LINUX.ORG.RU

Очереди в Erlang.

 


0

3

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


erlang

-Hello Mike.
-Hello Joe.

Прости, не удержался. =)

Deleted
()
Ответ на: комментарий от cnupm

Неа.
С сетью понятно, вот как сделать «правильную очередь» локально...

denisE
() автор топика
Последнее исправление: denisE (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

Но это-ж не параллельная очередь.
Если сделать через gen_server, то все упрётся в количество мессаг в mailbox.
Или выход один, делать запить чтение через ets с флагами :
write_concurrency
read_concurrency
?

denisE
() автор топика
Ответ на: комментарий от Minona

Подразумевается очередь, в которую могут писать и читать много процессов.
fifo-очередь, только для многопоточности.

denisE
() автор топика
Последнее исправление: denisE (всего исправлений: 1)

есть же штатные реализации + прикрутить генсервер с ассинхронными вызовами

anonymous
()

Для прода - RabbitMQ, Kafka. В самом Erlang также все это можно сделать, но не нужно

nomad
()

Не, все не то.
Попробую еще раз описать проблему.
Может быть её и нет или она как-то по-другому решается.
Есть ковбой, в нем с кажем есть :
acceptors = 100
max_connections = 1014.
Есть несколько пулов воркеров которые разбиты на задачи и пулы воркеров могут как появляться, так и исчезать.
И заранее, при старте нового пула воркеров, мы не знаем сколько в будущем(в следующую секунду или 10 мин), потребуются воркеров для конкретной задачи.
Вот получается такая штука.
Допустим на старте мы запустили 10 пулов по 100 воркеров, приходит к нам по 100 запросов на каждый воркер, всё гуд(машина не нагружена), и вдруг происходит всплеск и на 3-й пул приходит 1000 запросов, в этом раскладе они лягут в ящики процессов и пока каждый процес до них не догребёт они там будут лежать, а если у нас есть очередь, то мы можем отследить что очередь очень быстро выросла и «адекватного» количества воркеров нет, соответственно мы запускаем нужное количество воркеров и кидаем им задания.
Как-то так, сори если не получилось донести идею, если не ясно выразился, пишите, поропбую как-то по-другому.

denisE
() автор топика
Ответ на: комментарий от denisE

казалось бы - причем тут очереди ...

anonymous
()
Ответ на: комментарий от denisE

Во-первых, откуда необходимость использовать пулы воркеров? Эрланг спокойно переварит сотни тысяч процессов. Их можно поднимать по необходимости, выполнив задачу, они помрут. Точно пулы нужны? Ну если таки нужны, то нужен модуль, который будет распределять задачи по пулам. Возможно, у тебя такой уже есть. Он должен хранить текущее кол-во пулов и воркеров в них. Если кол-во задач на такой-то тип превысит их число, то поднимет новый пул.

anonymous
()

вот честно: не надо тут придумывать пока не получишь нагрузку.

Всё что ты накодишь «для перфоманса» будет неправильным.

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

max_lapshin ★★★★★
()
Ответ на: комментарий от max_lapshin

угу, к этому и пришёл...
Нужно сделать хотя-бы что-то, а потом уже смотреть.
Спасибо.

denisE
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.