Problema: un singolo client del nostro sistema può riempire completamente tutte le risorse disponibili con un enorme carico di lavoro. Puoi considerare di avere solo una coda, e chiunque può pianificare qualsiasi quantità di lavoro al suo interno. Qualsiasi altro cliente che successivamente invierà una piccola quantità di lavoro dovrà attendere fino a quando le prime attività saranno state completamente trattate. È un sistema asincrono quindi non ci sarà alcun rischio per DOS. Il problema che vorremmo risolvere è consentire ai nostri clienti di avere una buona dose di elaborazione in qualsiasi momento, indipendentemente dal fatto che alcuni clienti abbiano inviato molto lavoro. È un sistema distribuito con una buona quantità di lavoratori, tutto il lavoro è suddiviso in piccoli pezzi in modo che le attività scorrano correttamente attraverso il sistema.
Questo mi sembra un problema molto comune e sono un po 'allarmato dal fatto che non trovo una soluzione molto semplice. È simile alla pianificazione dei processi in un sistema operativo in quanto i processi sono dotati di slot di elaborazione in modalità round robin, nessun processo può preschedule un sacco di lavoro.
Una soluzione sarebbe utilizzare una particolare topologia di accodamento. Una coda per utente, che alimenta una piccola coda limitata. A causa della piccola quantità di lavoro nella seconda coda, nessun processo può monopolizzare i lavoratori per un lungo periodo di tempo. In questo modo
Mi aspettavo che fosse facile da implementare in RabbitMQ o forse in ZeroMQ, ma ci sono diverse sfide. Per prima cosa ho bisogno di creare manualmente una nuova coda se un nuovo utente invia il lavoro. In secondo luogo, e soprattutto, sembra che dovrei implementare io stesso la parte rossa, ascoltando tutte le code in modo non bloccante per inviarle alla coda limitata.
La mia preoccupazione è che sto lavorando con astrazioni di livello molto basso qui, tutto ciò che voglio è una corretta pianificazione delle attività di limitazione della capacità. In pratica, crea una certa contropressione per consentire la pianificazione prima del lavoro effettivo e quindi non consentire a nessun utente di monopolizzare il sistema.
Ci sono migliori astrazioni con cui lavorare?