[Talk-de] ?Unterstützung für die(?) Server
Sascha Silbe
sascha-ml-gis-osm-talk-de at silbe.org
Di Sep 25 14:30:21 UTC 2007
On Tue, Sep 25, 2007 at 11:28:30AM +0200, Frederik Ramm wrote:
> Das Planet-File ist derzeit 16 GB gross (unkomprimiert als XML, aber
> die MySQL-interne Darstellung wird sicherlich auch ihre 2 GB
> brauchen) und es wird, wenn der TIGER- Import amgeschlossen ist, um
> die 200 GB haben.
OK, also sollte kurz- bis mittelfristig ne Lösung her. Bereits mit dem
aktuellen Dump komme ich auf meinem Server so langsam in Platznot.
Könnte zwar noch was basteln, daß aus der vollen Datei nur DE
importiert wird, aber ne Aufteilung in 10°-Häppchen (=> ~650 Dateien)
fände ich beim Datenbank-Dump (Planet-File) sinnvoll.
Zur Aktualisierung finde ich Deine Idee sehr gut. Ich stelle mir da vor,
daß der API-Server von jeder Transaktion (0.5 kann doch
Transaktionen/Changesets, oder?) ein Diff (ähnlich den Diffs zum
Planet-File) erstellt, signiert und zum Verteilen weiterreicht. Das Diff
wird entsprechend der enthaltenen Änderungen (Bereich) an verschiedene
(meist nur einer) "Kanäle" geschickt. Diese werden dann unverändert an
alle, die den entsprechenden Kanal "bestellt" haben, weitergereicht.
So ähnlich (allerdings ohne Sigs) haben wir das damals im Fido mit der
NodeList (Liste aller direkt per Modem erreichbaren Teilnehmer) auch
gemacht. Man hat sich einmal die volle NodeList (hier: Planet-File, ggf.
nur ein Auszug daraus) geholt und dann wöchentlich das NodeDiff darauf
angewendet, um die aktuelle Version zu bekommen. Die NodeDiffs wurden
per FileTicker an alle Nodes verteilt. Üblicherweise wurden mehrere
Diffs vorgehalten (die man dann per File-Request explizit runterladen
konnte), man konnte also auch mit einer etwas älteren NodeList auf den
aktuellen Stand kommen.
Für OSM würde ich der Einfachheit halber das erstmal grob so
implementieren (Verbesserungen kann man später einführen, wenn man
sieht, wo genau es Probleme gibt):
- signieren mit PGP (bei kleinem Keyring geht das ausreichend schnell),
detached signature
- API reicht Änderungen in Rohform an einen Daemon, der daraus ein Diff
erstellt und signiert per Mail verschickt
- Diff und Sig als Mail-Attachment an eine Mailingliste verschicken (1
Liste pro 10°-Block)
- jedes Diff enthält die ID (Timestamp?) des alten und des neuen
Zustands
- Verteilung an alle "betroffenen" Kanäle, erst der Empfänger verwirft
die für ihn uninteressanten Änderungen
- Dumps (Planet-File) enthalten ebenfalls die ID des Zustandes, den sie
enthalten
- Anbieten von bis zu 2 Wochen alten Diffs zum Download per HTTP (um mit
letztem Dump bis zum aktuellen Zustand zu kommen)
Die Verteilstruktur selbst braucht damit nur die Diffs weiterreichen und
nicht den Datenbankinhalt selbst speichern.
Basierend darauf können dann verschiedene Datenbankserver für die
unterschiedlichsten Zwecke und ggf. mit nur einem Subset der Daten
aufgesetzt werden. Durch die PGP-Signatur des API-Servers erhält jeder
Datenbankserver garantiert die Originaldaten.
Der zentrale API-Server bräuchte dann nur noch Änderungen
entgegennehmen, alle ReadOnly-Zugriffe gehen auf die anderen Server. Die
API ist ja sinnvollerweise zustandslos, d.h. Lese- und Schreibzugriff
können auf verschiedenen Servern (mit ggf. leicht veralteten Daten)
erfolgen.
EMails haben hier den Vorteil, daß wir eine vorhandene und i.d.R.
zuverlässige (Achtung: SPAM-Filter!) Store&Forward-Infrastruktur (genau
das brauchen wir hier) nutzen können. Auch die Verteilfunktion an
verschiedene "Kanäle" ist - Stichwort: Mailinglisten - erprobt und
erfolgt (bei Einsatz passendere Software) vollautomatisch, incl.
Runterschmeissen bei Unzustellbarkeit. Das hält den Wartungsaufwand in
Grenzen.
Damit würde sich die Aufgabe in 6 Stücke teilen lassen:
1. Änderung der API, so daß die Änderungen an den Diff-Daemon
weitergereicht werden
2. Schreiben eines Daemons, der die Änderungen im Rohformat
entgegennimmt und daraus eine PGP/MIME-Mail erzeugt und (per
/usr/lib/sendmail) an den lokalen MTA weiterreicht. Empfängeradresse
ist <prefix>-<tileID>@<domain> (z.B. diff-0815 at diffs.openstreetmap.org)
3. Aufsetzen der entsprechenden Mailinglisten (auf einem anderen Server
als dem API-Server)
4. Schreiben eines Tools, das die per EMail gelieferten Diffs auf
Gültigkeit prüft (PGP-Sig, ID), ggf. zwischenspeichert
(Reihenfolge-Änderungen sind bei EMail möglich) und auf die Datenbank
anwendet.
5. Finden (oder notfalls Schreiben) eines Tools, das Diffs in ein
Verzeichnis zum Download stellt. Löschen täglich per cron-Job (find
-mtime|xargs rm).
6. Ändern (oder Neuschreiben) des Tools, das die Planet-Files erstellt
(Aufteilen in 10°-Blöcke).
Sobald man sich auf ein Format für die Diffs geeinigt hat, können
diese Aufgaben von unterschiedlichen Personen erledigt werden.
Feinere Aufteilungen (1° => ~64k Tiles) können später bei Bedarf
relativ einfach eingeführt werden (Diff-Format muss natürlich
Versionsangabe enthalten). Änderungen, die große Bereiche (hier > 1°)
betreffen, dürften so selten sein, daß die mehrfache Verteilung dieser
Diffs keine Rolle spielt (die IDs verhindern die mehrfache Anwendung des
Diffs, durch die Seltenheit ist der erhöhte Traffic egal).
CU Sascha
--
http://sascha.silbe.org/
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname : nicht verfügbar
Dateityp : application/pgp-signature
Dateigröße : 198 bytes
Beschreibung: nicht verfügbar
URL : <http://lists.openstreetmap.org/pipermail/talk-de/attachments/20070925/0cc9514a/attachment.sig>
Mehr Informationen über die Mailingliste Talk-de