Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rate limiting #15

Draft
wants to merge 8 commits into
base: main
Choose a base branch
from
Draft

Rate limiting #15

wants to merge 8 commits into from

Conversation

tdiepenb
Copy link

Kein echtes Rate-Limiting, sondern eine Änderung der Strategie für den Download von Mediendateien

Disclaimer: Dies ist kein echtes Einschränken der Download-Rate. Vielmehr wurde die Download-Strategie umgestellt, sodass die Mediendateien nicht mehr direkt beim Importieren einer Gruppe heruntergeladen werden. Stattdessen werden die Dateien erst nach der Erstellung der Gruppe jeder für sich einer Download-Warteschlange hinzugefügt. Dadurch wird der Importprozess wesentlich schneller, und der Download erfolgt im Hintergrund. Die Geschwindigkeit mit der runtergeladen wird, kann kontrolliert werden in dem zwischen jedem download eine pause eingelegt wird.

Dies ändert, dass die Mediendateien beim Import von .tsv-Dateien nicht mehr direkt geladen werden. Stattdessen wird nach dem Import, sobald die Gruppe erstellt wurde, für jede Mediendatei ein MediaDownloadTask erstellt und einer PriorityBlockingQueue hinzugefügt.
Diese PriorityBlockingQueue ist automatisch nach dem Datum des Posts sortiert, zu dem die Mediendatei gehört. Dadurch werden zuerst die Posts heruntergeladen, die vermutlich früher veröffentlicht werden sollen.

Die Queue wird mithilfe eines oder mehrerer unendlich laufender Threads abgearbeitet (der Threadpool ist über die application.properties konfigurierbar). Nach dem Download einer Mediendatei wartet der Thread eine festgelegte Anzahl an Millisekunden (ebenfalls in den application.properties einstellbar), bevor er das nächste Bild herunterlädt.

Beim manuellen Hinzufügen von Medien wurde nichts verändert; dies geschieht weiterhin direkt beim Hochladen eines Bildes.

Dinge zu beachten:

  1. Ich war mir nicht ganz sicher, wo ich die Java-Klassen für den Media-Download einsortieren sollte. Daher habe ich sie vorerst im services-Ordner abgelegt.
  2. Da die Tasks nicht in der Datenbank gespeichert werden, verschwinden sie, falls autodone offline geht.
  3. Die Download-Rate wird nicht direkt limitiert. Stattdessen wird nach dem Download eines Bildes eine Wartezeit eingehalten, bevor der Thread das nächste Bild bearbeitet.

thunze and others added 6 commits November 21, 2024 17:25
The generated name of the server column is `server_uuid`, not `server`.
Fix server column name in token entity unique constraint
…ia table that indicates if the file is still downloading
@tdiepenb tdiepenb marked this pull request as draft January 21, 2025 23:43
@tdiepenb
Copy link
Author

Dinge die noch fehlen:

  • wenn eine gruppe, ein status oder die Media Entity gelöscht werden, sollten auch die tasks die damit verknüpft waren aus der Queue gelöscht werden
  • Thread while(true) schleife hat noch keinen break

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants