Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #71 (permalink)  
Старый 06.01.2023, 13:06
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Весь вопрос на сколько таймер ставить? мало поставить - создастся очередь событий из сработавших таймеров. Много поставить, все это будет ждать лишнее время, и зачем тогда возились с оптимизацией?
Опять же где то надо хранить запросы, которые пришли, но не могут быть выполнены в момент прихода
Ответить с цитированием
  #72 (permalink)  
Старый 06.01.2023, 13:15
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Если вы писали, что буфер на десятки тысяч (т.е это столько запросов, которые в данный момент выполняются / 2) , и даже больше, а в 99% случаев там нет участников очередного запроса, то на сколько же участников рассчитана эта система?
Ответить с цитированием
  #73 (permalink)  
Старый 06.01.2023, 13:26
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

Сообщение от voraa Посмотреть сообщение
Весь вопрос на сколько таймер ставить? мало поставить - создастся очередь событий из сработавших таймеров. Много поставить, все это будет ждать лишнее время, и зачем тогда возились с оптимизацией?
Опять же где то надо хранить запросы, которые пришли, но не могут быть выполнены в момент прихода
С чего это создастся очередь событий таймеров?) Сервер просто отправит сообщение браузеру типа "Щас не могу, попробуй попозже". На браузере принимается ответ и ставится таймер. По времени не более 1 секунды — иначе пользовательский UX начнет страдать. Оптимально 250-500 мс. Этого времени должно быть более чем достаточно, чтобы buffer освободился для ожидающего участника, т.к. операции выполняются мгновенно.

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

Если бы участникам приходилось каждый раз ожидать, то здесь очевидно было бы реализация очереди. Но в 99,9999% случаев им ждать совершенно не придётся.

У меня сейчас такое впечатление складывается, что с внедрением очереди можно только навредить. Нет очереди — нет проблем.
Ответить с цитированием
  #74 (permalink)  
Старый 06.01.2023, 13:33
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

Сообщение от voraa Посмотреть сообщение
Если вы писали, что буфер на десятки тысяч (т.е это столько запросов, которые в данный момент выполняются / 2) , и даже больше, а в 99% случаев там нет участников очередного запроса, то на сколько же участников рассчитана эта система?
Было сказано, что в буфер может добавляться до 30 тысяч участников в секунду — и это только на данный момент, в будущем пропускная способность может быть увеличена (есть зависимость от используемого алгоритма проверки).

А про реальную нагрузку было сказано, что это должно обрабатывать в районе не менее 1500 участников в секунду.
Ответить с цитированием
  #75 (permalink)  
Старый 06.01.2023, 13:51
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Сообщение от webgraph
С чего это создастся очередь событий таймеров?) Сервер просто отправит сообщение браузеру типа "Щас не могу, попробуй попозже". На браузере принимается ответ и ставится таймер.
И заново отправляет тот же запрос? А потом в случае чего опять заново...
Во первых лишняя нагрузка на сеть, туда сюда гонять запросы с ответами, что выполнить не может. Нагрузка на сервер - получать лишние запросы, которые уже были.
Возможна такая ситуация, что пользователь А хочет что то передать С,
но идет много других запросов с С, которые по несчастливой случайности обрабатываются первыми, пока А сидит с timeout-ом. И он все сидит, сидит, запросы все идут и отклоняются.

Чем плоха очередь на сервере, я так и не понял.
Но вам виднее, я всей задачи не знаю.
Ответить с цитированием
  #76 (permalink)  
Старый 06.01.2023, 14:18
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

Сообщение от voraa Посмотреть сообщение
И заново отправляет тот же запрос? А потом в случае чего опять заново...
Во первых лишняя нагрузка на сеть, туда сюда гонять запросы с ответами, что выполнить не может. Нагрузка на сервер - получать лишние запросы, которые уже были.
Возможна такая ситуация, что пользователь А хочет что то передать С,
но идет много других запросов с С, которые по несчастливой случайности обрабатываются первыми, пока А сидит с timeout-ом. И он все сидит, сидит, запросы все идут и отклоняются.

Чем плоха очередь на сервере, я так и не понял.
Но вам виднее, я всей задачи не знаю.
Вы правы. Этому есть место быть.

Получается надо общую очередь всех запросов изначально хранить? Такая логика?:

1. На сервер поступают запросы и помещаются в pool

2. Из pool операции добавляются в buffer и удаляются. Если в buffer не может добавиться, то перемещается в конец pool

Так?
Ответить с цитированием
  #77 (permalink)  
Старый 06.01.2023, 14:43
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Не совсем.
pool - это не совсем очередь. Добавляется только в конец. А выбирается при просмотре от начала до конца все операции, которые могут быть выполнены.
Просмотр пула делается так
Берем операцию.
Проверяем, может ли она быть выполнена (участников нет в буфере).
Если может, то отправляем операцию на выполнение. При этом ее участники добавляются в буфер.
Берем след. операцию из пула
и т.д.
Т.е добавляем мы только в конец, а взять можем откуда угодно, просматривая пул. При этом взятая операция, конечно, удаляется из пула.

Просмотр пула инициируется при двух событиях:
- Новая операция добавлена в конец пула,

- Выполнилась какая то ранее отправленная на выполнение операция. При этом ее участники удаляются из буфера.

Такой алгоритм я предлагаю.
Ответить с цитированием
  #78 (permalink)  
Старый 06.01.2023, 15:06
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

Сообщение от voraa Посмотреть сообщение
Не совсем.
pool - это не совсем очередь. Добавляется только в конец. А выбирается при просмотре от начала до конца все операции, которые могут быть выполнены.
Просмотр пула делается так
Берем операцию.
Проверяем, может ли она быть выполнена (участников нет в буфере).
Если может, то отправляем операцию на выполнение. При этом ее участники добавляются в буфер.
Берем след. операцию из пула
и т.д.
Т.е добавляем мы только в конец, а взять можем откуда угодно, просматривая пул. При этом взятая операция, конечно, удаляется из пула.

Просмотр пула инициируется при двух событиях:
- Новая операция добавлена в конец пула,

- Выполнилась какая то ранее отправленная на выполнение операция. При этом ее участники удаляются из буфера.

Такой алгоритм я предлагаю.
Получается что общая очередь всех операций не нужна?
Ответить с цитированием
  #79 (permalink)  
Старый 06.01.2023, 15:13
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

Сообщение от voraa
Такой алгоритм я предлагаю.
Ваще так всё и предполагалось делать. Оставался вопрос лишь в реализации. Думаю для этого отлично подойдёт Map() с автоинкрементом по ключу.

Последний раз редактировалось webgraph, 06.01.2023 в 15:29.
Ответить с цитированием
  #80 (permalink)  
Старый 06.01.2023, 15:36
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Сообщение от webgraph
Ваще так всё и предполагалось делать. Оставался вопрос лишь в реализации. Думаю для этого отлично подойдёт Map() с
Следующий найти будет трудно, если мы изъяли какие то после текущего.
Придется в цикле ключи перебирать.
И как взять первый? Перебрать все и найти минимальный?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При нажатии на тег <pre> добавить элемент в массив и вывести его vanyabb Angular.js 4 03.04.2017 15:46
Как в шаблоне диррективы узнать массив это или строка? delias Angular.js 1 18.03.2014 07:33
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Как узнать родительский элемент? alex_han Events/DOM/Window 6 06.12.2013 23:01
Как добавить тег в каждый элемент списка? elias jQuery 4 15.08.2010 15:19