
(M)ein Friendica-Experiment und ein paar Zahlen: Wie man eine neue Instanz schnell vernetzt und die Timeline füllt
Vor einigen Tagen habe ich ein kleines Experiment mit Friendica gewagt. Frei nach dem Motto "Was soll schon groß passieren..." wollte ich mal testen, wie man eine kleine, vielleicht auch Single-User-Instanz, besser und schneller im Fediverse vernetzen kann.
Ich selbst hatte am Anfang mit meiner missocial.de-Instanz mit Friendica auch erlebt, dass die Föderation eher zäh bis schleppend vonstatten ging. Es dauert halt wahnsinnig lange, bis die eigene Friendica-Instanz ausreichend mit anderen Servern im Fediverse vernetzt ist. Was ja an sich kein Problem wäre. Aber: Man bekommt auch kaum Inhalte in die Timeline gespült! "Damals" hatten wir also kurzerhand die Worker in Friendica auf wirklich unvernünftige Werte hochgeschraubt und den Server arbeiten lassen. Ergebnis: Binnen Stunden war meine Instanz mit über 20.000 weiteren Server vernetzt! Das war eine beachtliche Menge und es machte sich auch in meiner Timeline bemerkbar.
Das wollte ich jetzt ganz gerne noch einmal richtig testen und reproduzieren, besser gesagt, ich wollte einfach mal schauen, was man machen kann, damit die eigene Instanz schnell gut vernetzt ist. Aufgrund einer Umstrukturierung wurde ein Server frei. Kein aufregend großer Server, nein. Ein kleiner VPS Server M von Ionos, Serverstandort Deutschland, 2vCores CPU, 4GB RAM und 120GB NVMe.
Kurzerhand habe ich dort einmal Debian neu aufgespielt und alles, was man so braucht für Friendica (Apache, PHP-FPM, MariaDB) sowie btop.
Ich habe zu diesem Zeitpunkt weder die Werte für PHP-FPM oder MariaDB optimiert, noch habe ich Redis oder jemalloc installiert. Auch das PHP Memory Limit habe ich nicht angehoben, sondern die Standardeinstellung gelassen.
Eine Domain, die noch nie für Friendica genutzt wurde, habe ich per DNS-Einträge auf den Server verwiesen. Dann Friendica nativ installiert (das "nativ" spielt bestimmt keine Rolle, aber ich wollte es der Vollständigkeit halber erwähnt haben).
In Friendica habe ich dann den Admin-Account angelegt, sowie ein paar simple Basis-Einstellungen getätigt, außerdem auch erst einmal die Registrierung für neue User deaktiviert. Zudem habe ich noch einen Daemon für Friendica eingerichtet. Anschließend bin ich von der neuen Friendicia-Instanz aus meinem Account auf missocial.de gefolgt (gegenseitig), da diese Instanz gut vernetzt ist. Im Profil meines Kontakts habe ich in den "Kanal Einstellungen" unter "Häufigkeit dieses Kontakts in relevanten Kanälen" die Option "Alle Beiträge dieses Kontakts anzeigen" aktiviert.
Das Addon "blockbot" habe ich im Adminbereich unter "Addons" aktviert und natürlich die Serverblockliste meiner anderen Instanz missocial.de in diese neue Instanz importiert.
Ansonsten habe ich nichts importiert, keine Datenbank, auch keine anderen Kontakte importiert!
Im Adminbereich ist bei mir unter "Automatisch ein Kontaktverzeichnis erstellen" "Interaktion" eingestellt sowie "Nur Kontakte/Server mit lokalen Daten aktualisieren" deaktiviert, dafür aber "Neue Kontakte auf anderen Servern entdecken" aktiviert.
In meinen Usereinstellungen unter "Soziale Netzwerke" habe ich unter "Umfang zu folgender Inhalte" die Option "Unterhaltungen mit denen meine Kontakte interagiert haben, inklusive likes" eingestellt.
Nachdem ich diese Einstellungen alle überprüft/getätigt hatte, konnte nun das Experiment starten. Wie lange würde es dauern, bis die neue Instanz vernünftig vernetzt ist und annähernd an die Werte meiner "alten" Instanz kommt? Schauen wir uns also einmal die Statistiken von missocial.de an (Adminbereich unter "Föderation Statistik"):
Derzeit kennt dieser Knoten 33,186 andere Knoten (mit 10,392,351 aktiven Nutzern im letzten Monat, 3,773,107 aktiven Nutzern im letzten halben Jahr, 42,831,069 registrierten Nutzern insgesamt...
Auf der neuen Instanz hatte ich ebenfalls nachgesehen... die Instanz war mit 13 Servern vernetzt und natürlich hätten wir hier ewig warten können, bis man auch nur annähernd auf diese Werte kommen würde, ohne ein wenig nachzuhelfen.
Im Adminbereich von Friendica habe ich also unter "Seite" -> "Worker" -> "Maximum Load Average" auf 80 und -> "Maximale Anzahl parallel laufender Worker" auf 1000 eingestellt und gespeichert.

Mit Blick auf btop konnte ich dann gleich sehen, dass die Änderungen übernommen wurden. 😅 Mit 1000 Workern hat der Server ordentlich zu tun - und lass uns jetzt mal nicht über den Load reden.🙈 Ich testete über mehrere Minuten immer mal wieder, ob Friendica sich im Browser noch aufrufen ließ - das funktionierte einwandfrei. Ich habe den Server dann nun so weiterarbeiten lassen, um es aber nicht zu übertreiben, habe ich natürlich nichts anderes auf diesem Server nebenbei gemacht.
Was man in der Zeit, in der die Worker so hochgedreht sind und arbeiten, NICHT machen sollte (zumindest auf einem kleinen VPS):
- Keine Kontakte hinzufügen
- Nichts posten
- Nichts teilen
- Nicht die Seite "Föderation Statistik" im Adminbereich aufrufen
Also am besten gar nichts auf diesem Server in der Zeit machen (zumindest bei einem kleinen VPS). 😂 Es besteht die Gefahr, dass dieser auf deutsch gesagt abschmiert und das wollen wir natürlich vermeiden. Lediglich hin und wieder habe ich die Webseite im Browser kurz aktualisiert um zu schauen, ob die Instanz noch erreichbar ist. Und das war sie. Friendica reagierte völlig normal, die Seiten bauten sich in normaler Geschwindigkeit auf. Auch sonst konnte ich keine Fehler feststellen.
Gute 6 Stunden habe ich die Worker einfach so laufen lassen. Mehr nicht. Nach dieser Zeit setzte ich die "Maximale Anzahl parallel laufender Worker" wieder runter auf 10, und "Maximum Load Average" zurück auf 20. Ich behielt die Auslastung weiterhin mit btop im Auge und wartete einen Moment, bis der Server sich wieder "beruhigt" hatte. Danach habe ich mir in Friendica im Admin-Bereich unter "Föderation Statistik" angeschaut, wie der aktuelle Stand meiner neuen Instanz nun war - und es hatte sich gelohnt:
Der Knoten kennt 24.987 andere Knoten mit 6.170.810 aktiven Nutzern im letzten Monat, 2.957.407 aktiven Nutzern im letzten halben Jahr und 25.549.270 registrierten Nutzern insgesamt...
Nochmal für's Protokoll: Nach gut 6 Stunden. ☝🏻
Aber komm, dachte ich mir, da geht noch was...
Nachdem "Maximale Anzahl parallel laufender Worker" wieder runter auf 10, "Maximum Load Average" wieder auf 20 gesetzt waren und der Server wieder auf Normal-Niveau arbeitete (!!!) habe ich 5 Kontakte hinzugefügt, die gut vernetzt sind und mit denen ich regelmäßig kommuniziere (gegenseitige Freundschaft). Drei oder vier Kontakten, die gut vernetzt sind, bin ich dann noch manuell gefolgt, diese findet man z.B. auf FediDevs. Außerdem folgte ich noch 8 Gruppen, die mich interessieren.
Ich habe keinen #NeuHier-Post abgesetzt, der sicherlich auch noch mal ein wenig mehr Reichweite gebracht hätte. Zu diesem Zeitpunkt hatte ich noch überhaupt keinen eigenen Post geschrieben, sondern lediglich 2 Beiträge geteilt, wenige Likes vergeben und insgesamt 5 oder 6 Kommentare von der neuen Instanz aus geschrieben.
Außerdem habe ich der neuen Instanz "Friendica Starterpacks" hinzugefügt. Mit diesen Starterpacks kann man seine Instanz ein klein wenig "boosten". Die Starterpacks für Friendica habe ich von Matthias -> @feb@loma.ml hinzugefügt, diese sind in seinem Profil zu finden.
Um die Starterpacks in Friendica hinzuzufügen, bin ich in die Usereinstellungen meines Accounts gegangen und dann auf "Kontakte importieren". (Natürlich könnte man auch ein Relay anstatt Starterpacks nehmen, das ist Geschmackssache.)
Die Warteschlange in Friendica war mittlerweile gut angewachsen. Testweise hatte ich die Worker auf meinem VPS nun wieder auf 1000 hochgesetzt und in regelmäßigen Abständen überprüft, ob Friendica noch erreichbar war. Friendica lud ein wenig träger, fiel mir auf. Nach ca. 10 - 15 Minuten bekam ich das erste Mal eine weiße Seite angezeigt. Also wäre es vermutlich empfehlenswert, das PHP Memory Limit etwas anzuheben, weil die standardmäßigen 128MB mit Sicherheit zu wenig sind.
Kurz danach war Friendica aber wieder erreichbar und ich setzte die Worker wieder auf 500 herunter. Das funktionierte dann bedeutend besser, Friendica blieb weiterhin erreichbar und stabil.
Ca. 15 Stunden, nachdem ich die Friendica-Instanz völlig neu aufgesetzt und gestartet hatte, setzte ich die Worker nun final runter auf 10. Mit Blick auf btop wartete ich, bis der Server wieder im Normalbereich arbeitete und schaute mir dann erneut im Adminbereich unter "Föderation Statistik" die Zahlen an:
Der Knoten kennt 33.434 andere Knoten mit 6.720.337 aktiven Nutzern im letzten Monat, 3.811.346 aktiven Nutzern im letzten halben Jahr und 37.515.227 registrierten Nutzern insgesamt...

Das hatte also noch einmal ordentlich was gebracht. Meine Timeline auf der gerade mal 15 Stunden "alten" Instanz war auch schon richtig gut mit Beiträgen gefüllt. Somit ist die neue Instanz noch nicht ganz an den Werten von missocial.de dran, aber die Richtung stimmt schon mal. 😉
Fazit:
Zuerst einmal möchte ich klarstellen, dass dies keine Anleitung, sondern ein Erfahrungsbericht sein soll. Wenn du sowas nachmachst, handelst du natürlich wie bei allen Anleitungen stets auf eigene Gefahr.
Ob es eine gute Idee ist, die Anzahl der Worker in Friendica so derartig hochzuschrauben? Ich weiß es nicht. Vielleicht ja, vielleicht nein. Ich würde dabei einfach btop im Auge behalten und schauen, wie Friendica reagiert. Vermutlich würde ich es aber nicht machen, wenn ich z.B. gerade eine Datenbank importiert habe, ich weiß nicht, wie der Server dann reagiert.
Nächster Punkt wird sein, die Instanz für eine kleine Anzahl an Usern zu öffnen. Natürlich wird das Serverchen nicht 100 User beherbergen können. Aber das soll er auch gar nicht. Denn hier geht es um Dezentralität und die schaffen wir nicht, wenn wir 1000 oder mehr User auf einen Server zulassen. Fällt also ein Server mit vielen Usern weg, haben mit einem Mal 1000 User oder mehr keinen Zugang mehr zum Fediverse.
Mir ging es hier primär darum, aufzuzeigen, dass man auch mit einer Single User Node (Friendica) sehr schnell eine gut vernetzte Instanz haben kann. Mit nur wenig Aufwand, das lässt sich an einem Wochenende mal eben aufsetzen und konfigurieren und ist kein Hexenwerk.
Zudem sei erwähnt, dass man den in den Starterpacks enthaltenen Kontakten natürlich nicht dauerhaft folgen muss. Bei einer neuen Instanz entferne ich die, die mich eigentlich nicht interessieren, einfach nach einiger Zeit wieder.
Was man noch machen könnte und vermutlich noch "ein bisschen mehr bringen" würde:
Im Profil des jeweiligen Kontakts unter "Kanal Einstellungen" bei "Häufigkeit dieses Kontakts in relevanten Kanälen" die Option "Alle Beiträge dieses Kontakts anzeigen" aktivieren. Ich könnte mir vorstellen, dass das in Kombination mit dieser Option:
"Usereinstellungen" -> "Soziale Netzwerke" -> "Umfang zu folgender Inhalte" -> "Unterhaltungen mit denen meine Kontakte interagiert haben, inklusive likes"
noch mehr Posts anderer User in die Timeline spült.
Zudem kann man in den ersten Tagen einfach hier und da noch einige Likes und Kommentare hinterlassen.
Mittlerweile, ein paar Tage später, habe ich Redis und jemmaloc installiert, das PHP Memory Limit geändert, sowie die Werte:
- pm.max_children
- pm.start_servers
- pm.min_spare_servers
- pm.max_spare_servers
- pm.max_requests
- pm.max_spawn_rate
in PHP-FPM angepasst bzw. aktiviert und auch die Konfiguration von MariaDB ein wenig geändert. Außerdem habe ich natürlich in Friendica die Worker auf einen angemessen Wert für den Server eingestellt, den man bei Bedarf für eine kurze Zeit immer mal wieder etwas erhöhen kann.
Zum Schluss ist mir wichtig, noch einmal ganz deutlich darauf hinzuweisen, dass mein Ziel nie war, den Server an seine Grenzen zu bringen und ja, für 1000 Worker müsste natürlich ein stärkerer Root-Server herhalten (wenn überhaupt!), dessen bin ich mir bewusst. Ich wollte einfach mal testen, wie schnell man eine funktionierende und gut vernetzte Friendica-Instanz erstellen kann und dies dokumentieren. 😅
Folglich lässt sich festhalten, dass man mit sehr wenig Arbeit sehr schnell eine Single-User-Instanz einrichten kann, die gut vernetzt ist und eine gut gefüllte Timeline hat!