Size: a a a

Software Design/Architecture/Zen

2020 November 16

YG

Yury Golikov in Software Design/Architecture/Zen
Sergey Protko
так, а пользователи... от них что-то зависит? я чет не увидел этого в условиях. По описанию больше как от пользователей распределение параграфов не зависит - зависит что бы уникально и что бы каждый параграф апрувило N человек
“При этом каждый раз пользователю должен выдаваться параграф из документа, который имеет минимальное количество параграфов для проверки (максимальное прогресс).”
источник

SP

Sergey Protko in Software Design/Architecture/Zen
> При этом каждый раз пользователю должен выдаваться параграф из документа, который имеет минимальное количество параграфов для проверки (максимальное прогресс).

ну то есть вот это все портит так как у тебя уже не выйдет эти штуки на партиции подробить. Выходит одна жирная очередь с книгами отсортированными по параграфам. А дальше можно лишь говорить о том что "консюмеры" этой очереди будут тупо запрашивать сообщеньки (это быстро должно быть) и очередь должна помечать кто запросил параграф. курсор для чела хранить.
источник

YG

Yury Golikov in Software Design/Architecture/Zen
Но тут мне кажется стоит этим пожертвовать и не соблюдать это правило строго.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Yury Golikov
“При этом каждый раз пользователю должен выдаваться параграф из документа, который имеет минимальное количество параграфов для проверки (максимальное прогресс).”
ну так у тебя для ВСЕХ пользователей одна и та же очередь, или я туплю?
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Yury Golikov
Но тут мне кажется стоит этим пожертвовать и не соблюдать это правило строго.
либо так либо наоборот. По сути у тебя кипиш будет в "голове" очереди, считай это такой вот sliding window агрегат)
источник

YG

Yury Golikov in Software Design/Architecture/Zen
Sergey Protko
ну так у тебя для ВСЕХ пользователей одна и та же очередь, или я туплю?
Не мой вопрос) Никитин.
источник

NI

Nikita Ilin in Software Design/Architecture/Zen
Yury Golikov
Но тут мне кажется стоит этим пожертвовать и не соблюдать это правило строго.
Можно думаю не особо строго. Главное максимизировать скорость обработки документов.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
ну если максимизировать скорость распределения то это одна очередь на все параграфы + компитинг консюмеры
источник

YG

Yury Golikov in Software Design/Architecture/Zen
Nikita Ilin
Можно думаю не особо строго. Главное максимизировать скорость обработки документов.
Вот мой вариант выше как раз про eventual consistency в этой части
источник

SP

Sergey Protko in Software Design/Architecture/Zen
без всей этой шляпы с агрегатами.
источник

NI

Nikita Ilin in Software Design/Architecture/Zen
Yury Golikov
Возможно что то вроде этого.

Проверяющий: [  {непроверенные док-ты: кол-во свободных(непроверенных) параграфов}  ]
Документ: [  Параграф: {проверка1(свободен/занят/valid/invalid), проверка2(свободен/занят/valid/invalid)}  ]

Мы бьем на две части.
Сначала находим документ, который текущий юзер еще не проверял и который имеет наименьшее кол-во непроверенных параграфов.
А затем пытаемся захватить параграф в этом документе.
Если 1000 пользователей делают запрос, и для них для всех один и тот же документ будет следующим, что делать?
источник

NI

Nikita Ilin in Software Design/Architecture/Zen
Я не очень понял вариант решения
источник

SP

Sergey Protko in Software Design/Architecture/Zen
ну то есть в любом случае принятие решения "что следующее" должно быть однопоточным...
источник

SP

Sergey Protko in Software Design/Architecture/Zen
тогда можно избежать локов и за счет этого сильно увеличить пропускную способность.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
ну а если совсем плохо все - можно разделить на партиции (отдельные очереди) по принципу "4 партиции что бы увеличить пропускную способность системы - распределять по хэшу"
источник

NI

Nikita Ilin in Software Design/Architecture/Zen
Sergey Protko
ну а если совсем плохо все - можно разделить на партиции (отдельные очереди) по принципу "4 партиции что бы увеличить пропускную способность системы - распределять по хэшу"
Ну да, в любом случае нужен  счётчик у пользователя, и как-то искать «следующую» книгу. То есть в любом случае какой-то связанный список книг нужен
источник

SP

Sergey Protko in Software Design/Architecture/Zen
счетчик у пользователя не понял зачем нужен...
источник

YG

Yury Golikov in Software Design/Architecture/Zen
Nikita Ilin
Если 1000 пользователей делают запрос, и для них для всех один и тот же документ будет следующим, что делать?
Если не останется параграфов? То фейл.  Но можно по разному сделать
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Yury Golikov
Если не останется параграфов? То фейл.  Но можно по разному сделать
там от вероятности надо расчитывать - если вероятность низкая то это ок - ретраи справятся
источник

NI

Nikita Ilin in Software Design/Architecture/Zen
Sergey Protko
счетчик у пользователя не понял зачем нужен...
Я имею в виду хранить номер потенциально следующего документа (если он ещё не закончен)
источник