# MirrorBrain

MirrorBrain ist eine freie HTTP-Server-Software für Linux-Betriebssysteme mit Apache zum Betrieb eines Content Distribution Networks, das für Download-Anfragen intelligent günstige Bezugsquellen vermittelt.
MirrorBrain wird seit 2006 hauptsächlich von Peter Pöml entwickelt und seit 2007 produktiv eingesetzt. Es ist teilweise (Apache-Module) in C, ansonsten überwiegend in Python entwickelt (nur der Scanner ist in Perl geschrieben) und als freie Software mit Ausnahme von drei Apache-lizenzierten Modulen unter den Bedingungen der GNU General Public License (GPL) verfügbar.

## Verbreitung

Es wurde im openSUSE-Projekt geboren und erstmals eingesetzt und wird mittlerweile unter anderem auch bei OpenOffice.org, LibreOffice, Sugar Labs, Free Software Foundation, Kodi Media Center und ArchServer zur Verteilung ihrer Downloads eingesetzt. Auch SourceForge nutzt Teile von MirrorBrain (mod_asn) in ihrem eigenen CDN-System.

## Technik

MirrorBrain hat einen modularen Aufbau, in dessen Mittelpunkt der Weiterleitungs-Server (Redirector) steht (ein Apache-Modul namens mod_mirrorbrain), der intelligent netzwerktechnisch naheliegende Spiegelserver auswählt und Clients ohne Metalink-Fähigkeit per HTTP-Weiterleitung an einen (HTTP- oder FTP-)Spiegelserver weiterleitet. Die Auswahl erfolgt primär anhand der (physischen oder netzwerktopologischen) Distanz zwischen Anfrager und verfügbaren Spiegelservern, was anhand der IP-Adressen über Geolokation (per libGeoIP) und Routing-Daten (per mod_asn, siehe unten) ermittelt wird. Kommen danach mehrere Server in Frage, so wird anhand der Möglichkeiten der Server eine Lastverteilung vorgenommen. Die Vorgehensweise kann dabei konfiguriert und mit eigenen Regeln auch teilweise übergangen werden.
Der Mirror Scanner scannt die Spiegelserver (unter anderem mittels des auf Spiegelservern meist vorhandenen rsync) und trägt die Analysedaten in einer Datenbank (anfangs nur MySQL, nach einer Übergangsphase nur noch PostgreSQL) zusammen. Mirror Probe prüft alle paar Minuten die Verfügbarkeit der Server. Es gibt weiterhin Module zur automatischen Erstellung von Torrents und der Generierung von Prüfsummen nach verschiedenen Verfahren.

### mod_asn

Das im Rahmen des Projektes entwickelte, unabhängig einsetzbare Apache-Modul mod_asn ermittelt anhand von IP-Adressen mittels des Border Gateway Protocol über AS-Nummern und Subnetz-Präfixe Daten über die Routen zwischen zwei Rechnern. In MirrorBrain stellen diese Routing-Daten als Mittel zur Erschließung der netzwerktopologischen Distanz neben der mittels Geolokation ermittelten physischen Distanz und dem untergeordneten Aspekt der Lastverteilung einen der Aspekte dar, nach denen sich der Weiterleitungs-Server bei der Auswahl der Server richtet. Dieses Modul wird beispielsweise bei SourceForge zur Datengewinnung in deren eigener CDN-Lösung verwendet. Es ist im MirrorBrain-Projekt eines der Apache-lizenzierten und der in C gecodeten Teile. Es wird seit Februar 2009 entwickelt, erhielt Anfang März ein eigenes Code-Repositorium, erreichte am 31. März die Versionsnummer 1 und bekam am 13. Juli 2009 seine eigene Website und erreichte am 5. September 2010 die Version 1.5.

### Metalink-Unterstützung

An kompatible Clients (transparente Aushandlung) können dynamisch generierte Metalinks ausgegeben werden, anhand derer der Client selber aus mehreren enthaltenen Quellenverweisen wählen kann und die auch auf Quellen verweisen können, die über andere Protokolle (BitTorrent) ausliefern. Diese beim Client verfügbare Quellenredundanz ermöglicht die Einbeziehung zusätzlicher, nur aus Client-Sicht verfügbarer Daten in die Spiegelauswahl-Entscheidung, einen einfachen Failover im Hintergrund, sowie zur Maximierung der Downlink-Auslastung auch das parallele Anzapfen mehrerer Quellen. Die Metalinks können auch mit OpenPGP-Signaturen ausgeliefert werden, die das Spiegelserversystem als Fehlerquelle und Sicherheitsproblem eliminieren können. Eine ebenfalls integrierte Liste mit mehreren Prüfsummen ermöglicht die abschnittsweise Kontrolle angekommener Daten noch während des Herunterladens.