Как создать «анонимную» функциональность в бэкэнде - хорошие шаблоны дизайна - PullRequest
0 голосов
/ 21 апреля 2020

При разработке центра уведомлений мы хотим отправить sh вновь созданные уведомления пользователю. (используя WebSocket, но это не имеет отношения к вопросу.) Однако уведомления генерируются очень быстро, поэтому мы хотим использовать метод throttle (a термин в Loda sh или см. этой визуализации ). Мы ограничим событие «генерирование уведомлений».

Визуализация: ось X - это время. Первая синяя строка - это сгенерированные уведомления, не обязательно, конечно, с одинаковым интервалом времени. Красный ряд - это удушенные события. (игнорируйте зеленый)

enter image description here

Проблема заключается в том, как это реализовать. У нас есть простое решение:

  1. Всякий раз, когда генерируется уведомление, помещайте в Кафку «отложенную задачу» с delay = throttleTime.
  2. Когда Кафка доставляет нам отложенное сообщение проверьте lastActionTimestamp в Redis. Если currentTimestamp - lastActionTimestamp < throttleTime, это означает, что это сообщение следует выбросить. В противном случае выполните действие и обновите lastActionTimestamp в Redis, чтобы оно соответствовало текущему времени.

Я думаю, что это немного сложно. Так есть ли лучшие или более простые методы? Или есть какие-нибудь библиотеки? Спасибо!


Отказ от ответственности : это , а не часто встречающееся "регулирование" - не , желающее ограничить скорость какого-либо пользователя действия или микросервисные звонки.

...