|
Механизм обработки очереди
|
|||
---|---|---|---|
#18+
Приветствую! Подскажите, пожалуйста, какие есть механизмы/приложения/фреймворки, чтобы реализовать параллельный механизм обработки сообщений из очереди. Собственно сама задача: есть несколько сокетов, по которым постоянно приходят сообщения. Все сообщения сохраняются в таблицу А в БД. Вскоре, из этой таблицы А строки забираются отсортированные по дате записи в БД и передаются парсеру, который обрабатывает их, модифицирует и складывает модифицированные записи в другую таблицу Б. Код: java 1. 2. 3. 4. 5. 6. 7. 8.
Есть необходимость разделить THREAD1 на несколько потоков, чтобы быстрее забирать данные на обработку. Но не совсем понимаю, в какую сторону копать, чтобы не нарушить логику обработки данных на выходе из парсера. В частности, каждая запись обрабатывается парсером разное время, но отдаваться на выходе должна строго в отсортированном порядке по дате изначальной записи. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2019, 21:02 |
|
Механизм обработки очереди
|
|||
---|---|---|---|
#18+
qi_ip, Нужно партиционировать входной поток. Это можно сделать по-разному, например поделить отрезок времени за который запрашиваются данные или взять остаток от деления таймстампа или идентификатора на количество партиций. Вопрос, если вы все равно результат пишете в таблицу, которую можно как угодно сортировать, зачем сохранять порядок при записи? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2019, 21:21 |
|
Механизм обработки очереди
|
|||
---|---|---|---|
#18+
qi_ip, 1. Зачем промежуточно писать в бд? 2. Какая очередность при параллельной работе? Шутите? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2019, 21:48 |
|
Механизм обработки очереди
|
|||
---|---|---|---|
#18+
fixxerqi_ip, Нужно партиционировать входной поток. Это можно сделать по-разному, например поделить отрезок времени за который запрашиваются данные или взять остаток от деления таймстампа или идентификатора на количество партиций. Вопрос, если вы все равно результат пишете в таблицу, которую можно как угодно сортировать, зачем сохранять порядок при записи? Потому что результат с таблицы Б сразу же забирается и отправляется дальше. И получается, что если, например, запись под номером 1, все еще в обработке, а запись под номером 2 уже обработалась, то нарушается последовательность команд. PetroNotC Sharpqi_ip, 1. Зачем промежуточно писать в бд? Изначально при получении сообщений есть минимальные проверки и отправка подтверждения получения сообщения. Плюс нужно сохранять данные на случай, если вдруг приложение упадет. PetroNotC Sharpqi_ip, 2. Какая очередность при параллельной работе? Шутите? Поэтому и создал топик, так как хотел узнать, возможность реализации этого момента )))) Если бы шутил...хех ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2019, 22:05 |
|
Механизм обработки очереди
|
|||
---|---|---|---|
#18+
qi_ip, Возможность есть. Так называемый механизм watermark. Это значение максимального таймстампа на всех партициях. Партиции безопасно писать записи старше текущего значения watermark. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2019, 22:21 |
|
Механизм обработки очереди
|
|||
---|---|---|---|
#18+
qi_ipИзначально при получении сообщений есть минимальные проверки и отправка подтверждения получения сообщения. Плюс нужно сохранять данные на случай, если вдруг приложение упадет.это же логи. Или архивация. Получил фио из сокета, отдай копию в фоновый поток и пусть он в фоне сохраняет. А основной от сокета сразу это ФИО отдал на обработку функции function бизнесЛогика(фио) Так? qi_ipPetroNotC Sharp2. Какая очередность при параллельной работе? Шутите? Поэтому и создал топик, так как хотел узнать, возможность реализации этого момента )))) Если бы шутил...хех Вас еще раз спросить? Какой дурак ставит задачу параллельной работы требуя очередности? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2019, 00:54 |
|
Механизм обработки очереди
|
|||
---|---|---|---|
#18+
qi_ipПриветствую! Подскажите, пожалуйста, какие есть механизмы/приложения/фреймворки, чтобы реализовать параллельный механизм обработки сообщений из очереди. Собственно сама задача: есть несколько сокетов, по которым постоянно приходят сообщения. Все сообщения сохраняются в таблицу А в БД. Вскоре, из этой таблицы А строки забираются отсортированные по дате записи в БД и передаются парсеру, который обрабатывает их, модифицирует и складывает модифицированные записи в другую таблицу Б. Код: java 1. 2. 3. 4. 5. 6. 7. 8.
Есть необходимость разделить THREAD1 на несколько потоков, чтобы быстрее забирать данные на обработку. Но не совсем понимаю, в какую сторону копать, чтобы не нарушить логику обработки данных на выходе из парсера. В частности, каждая запись обрабатывается парсером разное время, но отдаваться на выходе должна строго в отсортированном порядке по дате изначальной записи. Спасибо! Посмотрите на очередь с приоритетом - приоритет понятно по дате. https://www.rabbitmq.com/priority.html Но это все одно не даст Вам требуемого результата так как в вашем случае в любой момент может прийти данные за прошлую неделю Вы можете буферизовать в очереди несколько тысяч записей и потом уже их раздать на обработку как вариант, но на мой взгляд сортировать данные проще когда уже они попали в БД если у вас там не стоит в постановки к примеру аномали детекшин перед тем как в базу писать ну и тд. Поговорите с архитектором может он чего не договаривает ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2019, 02:44 |
|
Механизм обработки очереди
|
|||
---|---|---|---|
#18+
PetroNotC Sharpэто же логи. Или архивация. Получил фио из сокета, отдай копию в фоновый поток и пусть он в фоне сохраняет. А основной от сокета сразу это ФИО отдал на обработку функции function бизнесЛогика(фио) Так? Буду посмотреть такой вариант Какой дурак ставит задачу параллельной работы требуя очередности? Никто не ставит такую задачу ))) Основная цель - ускорить обработку данных парсером, так как на входе накапливаются данные. Поэтому это и был вопрос :) SergunkaНо это все одно не даст Вам требуемого результата так как в вашем случае в любой момент может прийти данные за прошлую неделю Сотрировка идет по времени поступления запроса, то есть, если даже данные содержат информацию прошлой недели, все равно будет сортироваться по времени поступления запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2019, 08:45 |
|
Механизм обработки очереди
|
|||
---|---|---|---|
#18+
qi_ip, Расскажите подробнее, что за данные ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2019, 09:05 |
|
Механизм обработки очереди
|
|||
---|---|---|---|
#18+
qi_ipНикто не ставит такую задачу ))) Основная цель - ускорить обработку данных парсером, так как на входе накапливаются данные. Поэтому это и был вопрос :) Значит сортировку исключаем из вопроса. Нечего сортировать. Парсер потокобезопасный? Если да, то в поток его. Если нет, то несколько экземпляров парсера. Это узкое место по вашим словам. Если ДВЕРЬ узкая, то либо строите рядом три двери, либо три дома (процесса) с такой узкой дверью. Код: java 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2019, 09:17 |
|
Механизм обработки очереди
|
|||
---|---|---|---|
#18+
Потом, как всегда, окажется, что узким местом была база. И если предварительно не писать или писать асинхронно, то обработчик вытягивает. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2019, 11:34 |
|
Механизм обработки очереди
|
|||
---|---|---|---|
#18+
yvprodqi_ip, Расскажите подробнее, что за данные Данные - обычные текстовые сообщения-команды, но их большой поток (минимум 30-50 команд в секунду) и разных размеров (от 100 байт до 65 кб). PetroNotC SharpЗначит сортировку исключаем из вопроса. Нечего сортировать. Исключить не получиться. Вот смотрите: допустим есть клиент, который постоянно посылает команды. Эти команды обрабатываются парсером, модифицируются и передаются/возвращаются другим клиентам. И если, например, пришли команды: 1. Включить 2. Выгрузить данные 3. Остановить выгрузку 4. Выключить , то и на другой клиент после парсера они должны попасть в том же порядке. В случае, если команды 2 и 3 обрабатываются в среднем 1 секунду, а 1 и 4 500 мс может получиться так, что сначала придут команды 1 и 4, а потом только 2 и 3. Причем, комнда от клиента 1 пришла одна, а после обработки парсером она посылается сразу клиента 2-10, в зависимости, от того для скольких клиентов она предназначена. fixxerПотом, как всегда, окажется, что узким местом была база. И если предварительно не писать или писать асинхронно, то обработчик вытягивает. Сейчас добавляю в код тайминги, чтобы понять, где идет затык, на обработке в Java или же на insert/update в БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2019, 11:49 |
|
Механизм обработки очереди
|
|||
---|---|---|---|
#18+
Еще никто не предлагал партиционировать по userId и пихать все в кафку? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2019, 11:55 |
|
Механизм обработки очереди
|
|||
---|---|---|---|
#18+
забыл ник, я к этому и вел, партиционировать по какому нибудь бизнес-правилу и писать в разные очереди ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2019, 12:05 |
|
Механизм обработки очереди
|
|||
---|---|---|---|
#18+
Подскажите, может кто читал, где можно найти опенсорс коды или просто описание работы серверных приложений, например, таких как телеграм или ватцап или чем-то похожих мессенджеров. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2019, 12:06 |
|
Механизм обработки очереди
|
|||
---|---|---|---|
#18+
qi_ipСобственно сама задача: есть несколько сокетов, по которым постоянно приходят сообщения. Все сообщения сохраняются в таблицу А в БД. Вот с этого момента - фигня какая-то. Никто такую постановку не примет. С сокетами никто не работает. Должен быть над-сокетный протокол. SOAP, например. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2019, 12:09 |
|
Механизм обработки очереди
|
|||
---|---|---|---|
#18+
qi_ip, на joker Олег Анастасьев рассказывал про фреймворк мессенджера в одноклассниках, но в открытом доступе вроде еще нет ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2019, 12:12 |
|
Механизм обработки очереди
|
|||
---|---|---|---|
#18+
yvprodзабыл ник, я к этому и вел, партиционировать по какому нибудь бизнес-правилу и писать в разные очереди +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2019, 12:19 |
|
Механизм обработки очереди
|
|||
---|---|---|---|
#18+
qi_ipПодскажите, может кто читал, где можно найти опенсорс коды или просто описание работы серверных приложений, например, таких как телеграм или ватцап или чем-то похожих мессенджеров. Jabber?! ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2019, 12:21 |
|
Механизм обработки очереди
|
|||
---|---|---|---|
#18+
maytonqi_ipСобственно сама задача: есть несколько сокетов, по которым постоянно приходят сообщения. Все сообщения сохраняются в таблицу А в БД. Вот с этого момента - фигня какая-то. Никто такую постановку не примет. С сокетами никто не работает. Должен быть над-сокетный протокол. SOAP, например. Обмен данных идет по вебсокету ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2019, 12:24 |
|
Механизм обработки очереди
|
|||
---|---|---|---|
#18+
Посмотри на это https://docs.oracle.com/javase/8/docs/api/java/util/PriorityQueue.html Может поможет. И давай модульный тест или макет что ты уже написал. Трудно говорить об ангелах на кончике иглы... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2019, 12:56 |
|
Механизм обработки очереди
|
|||
---|---|---|---|
#18+
qi_ipИ если, например, пришли команды: 1. Включить 2. Выгрузить данные 3. Остановить выгрузку 4. Выключить , то и на другой клиент после парсера они должны попасть в том же порядке.mayton прав. Ты изобретаешь ПРИКЛАДНОЙ ПРОТОКОЛ. Нижнего уровня у тебя сокет. Но ты должен сохранить очередность пачки команд. А если отправили вперемежку команды? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2019, 12:56 |
|
Механизм обработки очереди
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Код: java 1. 2. 3.
покажи тут как команда 4 придет перед командой 1? 1 и 4 идут в разные сокеты? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2019, 12:59 |
|
Механизм обработки очереди
|
|||
---|---|---|---|
#18+
qi_ipПодскажите, может кто читал, где можно найти опенсорс коды или просто описание работы серверных приложений, например, таких как телеграм или ватцап или чем-то похожих мессенджеров. Сначала постановку вменяемую дай. Почему парсер тормозит, если его задача тупо передать строку клиенту? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2019, 13:01 |
|
|
start [/forum/topic.php?fid=59&fpage=21&tid=2121022]: |
0ms |
get settings: |
28ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
107ms |
get topic data: |
16ms |
get forum data: |
3ms |
get page messages: |
511ms |
get tp. blocked users: |
3ms |
others: | 330ms |
total: | 1020ms |
0 / 0 |