Ga naar inhoud
Contact us

Prestaties en belasting van de Nextcloud-server

De app bevat het plan en het verslag van een migratie; zelf verplaatst de app geen bestanden. Het lezen van de bronnen, het migreren van de bestanden en hun versies en het schrijven van de rapporten gebeurt door de SMART Migration-server, op een Windows-machine in uw netwerk, die net als elke andere client naar Nextcloud Files schrijft. Wat de Nextcloud-server voor de app doet, is de jobdefinities en de resultaten opslaan en de aanroepen beantwoorden van de SMART Migration-server en van de mensen die de app gebruiken.

Alleen korte aanroepen

Elke aanroep van SMART Migration wordt direct beantwoord. Er wordt geen verzoek op de Nextcloud-server opengehouden terwijl SMART Migration op werk wacht.

Eén poll per geopende app

Een geopende app vraagt Nextcloud één ding tegelijk: elke 5 seconden terwijl er een job draait, elke 30 seconden terwijl er niets draait, en helemaal niet zolang het browsertabblad verborgen is.

Gepagineerd op de server

Elke lijst wordt op de server gefilterd, gesorteerd en gepagineerd, elk cijfer op het Dashboard wordt door de database geteld en een boomstructuur wordt alleen opgebouwd voor zover deze is uitgeklapt.

SMART Migration neemt contact op met de app; de app roept SMART Migration nooit zelf aan. De aanroepen zijn weinig in aantal, kort en worden direct beantwoord.

AanroepHoe vaak
Vragen om de volgende jobOngeveer elke 10 seconden zolang er een vrij slot is en er geen job wacht, en direct opnieuw nadat er een is toegewezen. Een job die op Gereed is gezet, start daardoor binnen ongeveer 10 seconden.
De heartbeatElke 30 tot 60 seconden, zodat de markering Live weet dat de server draait.
Voortgang, resultaten en het sessielogboekTerwijl een job draait; het sessielogboek in batches van maximaal 1.000 berichten.
BestandsproblemenIn batches van maximaal 1.000 per aanroep.

De eigen rate limit van Nextcloud beantwoordt meer dan 120 verzoeken voor een job binnen een minuut vanaf één account met too many requests, zodat zelfs een client die onophoudelijk vraagt de server niet kan belasten.

Een geopende app pollt zijn eigen Nextcloud met één klein verzoek, en de markering Live, de tabellen, de run-meldingen en het Dashboard volgen allemaal de antwoorden daarop. Terwijl er een job draait of op het punt staat te starten, vraagt de app elke 5 seconden; terwijl er niets draait, elke 30 seconden; zolang het browsertabblad verborgen is, helemaal niet. Een tabel wordt alleen opnieuw gelezen als wat deze toont is gewijzigd, zodat het inchecken van SMART Migration zonder iets te wijzigen de geopende tabellen niets kost. Vernieuwen, rechtsboven, leest het geopende tabblad direct opnieuw, met één verzoek zoals dat van de tabel zelf.

De migratiecijfers op het Dashboard worden door de database geteld en bewaard totdat een run start of eindigt: bestandsproblemen die worden vastgelegd terwijl jobs draaien, leiden er niet toe dat deze cijfers opnieuw worden geteld.

De omvang waarvoor de app is gebouwd en gemeten

Section titled “De omvang waarvoor de app is gebouwd en gemeten”

De app is gedimensioneerd en gemeten voor 100 groepen, 50 tags, 25.000 jobs, 75.000 rijen in de Run-geschiedenis, 200.000 bestandsproblemen en vier gelijktijdig draaiende jobs, op een kleine server met 2 CPU-cores en PHP's memory_limit op 512 MB. Bij die omvang antwoordt de lijst van een tabblad in ongeveer een seconde of minder, en de poll van een geopende app in een fractie van een seconde.

Elk verzoek van de app neemt even zijn PHP-geheugen in gebruik en geeft het weer vrij zodra het is beantwoord. Gemeten bij de bovenstaande omvang, inclusief het eigen aandeel van Nextcloud van ongeveer 40 MB:

VerzoekPHP-geheugen
De poll van een geopende app, en het DashboardOngeveer 45 MB
Run-geschiedenis: de boomstructuur, de lijst, de filters en Alles uitklappen45 tot 75 MB
Run-geschiedenis: de overzichtskaart van een groepOngeveer 45 MB
Bestandsproblemen85 tot 95 MB
JobsOngeveer 140 MB

Nextcloud schrijft een waarschuwing naar het logboek voor elk verzoek dat meer dan de helft van memory_limit gebruikt — 256 MB bij 512 MB — dus elk verzoek van de app blijft daar ruim onder.

De Run-geschiedenis is de enige lijst die alleen maar groeit: de runs blijven bewaard totdat iemand ze verwijdert of het Retention schedule van een job dat doet, en elke terugkerende job voegt er meer aan toe. Daarom houden de weergaven nooit alle runs in het geheugen. Ze lezen de runs deel voor deel, bewaren per run een paar getallen en lezen alleen de runs op het scherm en de uitgeklapte groepen volledig in. Een weergave van 75.000 runs heeft 45 tot 75 MB PHP-geheugen nodig, en een weergave van 225.000 runs 50 tot 115 MB: elke extra run voegt hooguit een paar honderd bytes toe. De overzichtskaart van een groep leest alleen de runs van die groep.

Dimensioneer PHP voor de gebruikers, niet voor de app

De app heeft geen eigen PHP-workers nodig: de aanroepen van SMART Migration zijn kort en geen enkele wordt opengehouden. Dimensioneer PHP-FPM voor de mensen die Nextcloud gebruiken, zoals het eigen tuningadvies van Nextcloud beschrijft. Het grootste verzoek, het tabblad Jobs met 25.000 jobs, heeft even ongeveer 140 MB PHP-geheugen nodig, dus houd memory_limit op 512 MB, zoals Nextcloud aanbeveelt.

Er draaien twee achtergrondjobs in de eigen cron van Nextcloud, en geen van beide maakt verbinding naar buiten:

  • Elke 5 minuten worden de app-wachtwoorden die voor doelgebruikers zijn aangemaakt ingetrokken zodra hun runs zijn afgelopen — gelezen uit een tabel van enkele rijen.
  • Elk uur worden de bewaarschema's van de jobs toegepast: de runs die buiten het Retention schedule van hun job vallen, worden verwijderd, voor de jobs die er een hebben.

De app draait op de databases die Nextcloud ondersteunt — MariaDB en MySQL, PostgreSQL en SQLite — en wordt bij elke wijziging van de app automatisch op elk daarvan geïnstalleerd en gecontroleerd. De tabellen hebben de indexen die de lijsten en polls van de app gebruiken.

Zie ook