|
|
|
|
|
Der Hinweis auf Kademlia sieht auch gut aus, danke :-)!
– Golo Roden 31.03.2011
|
||
|
So, ich habe mich jetzt mal ein bisschen über Kademlia schlau gemacht, ebenso über verteilte Hashtabellen - und ich denke, das wäre ein durchaus gangbarer Ansatz :-)!
– Golo Roden 31.03.2011
|
||
|
Es gibt sogar eine .NET-Implementierung von Kademlia, siehe http://sourceforge.net/apps/trac/daylight/wiki ... ich denke, mit der werde ich mich nun mal näher auseinandersetzen.
– Golo Roden 01.04.2011
|
||
|
Das Projekt "Daylight" sieht mir aber nicht nach einem sehr aktiven Projekt aus :(
Bitte berichte hier mal über deine Erfahrungen damit. – stefc 14.04.2011
|
||
|
Aktiv ist es wirklich nicht, aber doch schon ganz gut brauchbar. Es fehlen ein paar Dinge (insbesondere, was das Republishing angeht), aber die sind super kommentiert, so dass man hier leicht selbst nachhelfen kann.
– Golo Roden 06.05.2011
|
|
|
|
Hmmmm ... danke für die Anregung, aber so wirklich gefallen tut mir das noch nicht.
Irgendwie geht mir im Kopf ein knotengewichteter Graph herum, aber so wirklich komme ich damit nicht weiter ... – Golo Roden 30.03.2011
|
||
|
Den Graph musst Du aber irgendwo pflegen. Im Prinzip verteilt, damit Du keinen Single Point of Failure kriegst. Halte ich für schwierig und nicht der Mühe wert. Aber ich lasse mich gerne von einem besseren Algorithmus überzeugen :-)
– theorist 30.03.2011
|
beginnt mit | Server 1 | Server 2
-------------------------------------
0 .. 4 | s1.test.de | s2.test.de
5 .. 9 | s3.test.de | s4.test.de
A .. F | s5.test.de | s6.test.de
|
|
|
Das Problem ist, dass die Schlüssel nicht unbedingt gleichverteilt sind - und das zudem einen zentralen Master benötigt.
– Golo Roden 30.03.2011
|
||
|
Wenn du einen Hash auf deinen Schlüssel anwendest und diesen zur Verteilung auf die Server benutzt entfallen beide Probleme. Die Hashes sollten gleichverteilt sein und den Masterserver kannst du dir sparen wenn die Schlüsselbereichzuordnung so wie von mir oben geschrieben durchgeführt werden.
Du musst nur noch das Mapping für Bereiche und nicht mehr für komplette Schlüssel mitschleppen. – m.fuchs 30.03.2011
|
||
|
Ich finde diesen Ansatz zu statisch: Wie würde das System beim Ausfall eines Knotens reagieren? Da dies berücksichtigt werden soll, können wir nicht a priori (durch eine Hash-Funktion) die aktuellen Knoten ermitteln.
– theorist 30.03.2011
|
||
|
Die Ausfallsicherheit soll sich doch durch die Server-Redundanz ergeben. Das ist ja nun auch recht simpel:
1.) Ich will Datensatz "Blafasel" holen. 2.) Ich erzeugen den Hash von "Blafasel". 3.) Ich hole mir aus dem Mapping alle Server die für diesen Bereich zuständig sind. 4.) Ich frage den ersten Server ab. Ist der nicht erreichbar, frage ich den zweiten usw. (Ist gar keiner erreichbar kucke ich nach ob die apokalyptischen Reitern am Horizont erschienen sind.) – m.fuchs 30.03.2011
|
||
|
Okay, prinzipiell schon mal nicht schlecht.
Die Frage wäre noch: Wie entscheidet ein Server, für welches Hashes er zuständig ist? Weil irgendwie muss das ja im System halbwegs gleichverteilt sein, aber die Server sollen das ja autonom aushandeln? – Golo Roden 30.03.2011
|
||
|
Der Server entscheidet das gar nicht in diesem Szenario, sondern der Client der liest und schreibt. Ich weiß leider nicht wie dein System genau aussieht, bei mir ist der Client ein Service der die Schreib/Leseaufgaben übernimmt. Die Liste der verfügbaren Server und ihre Zuordnung kann sich der Client auch von den Servern ziehen.
Genauso gut kann natürlich auch der Server beim Schreibversuch eine Rückmeldung geben: "Dafür ist XXX zuständig." Dazu müssen sich die Server untereinander kennen, das kann per P2P, Configfiles, Masterserver, sonstewie geregelt werden. – m.fuchs 30.03.2011
|
||
|
Das soll (in meinem Szenario) aber für den Client transparent sein - insofern müssten das schon die Server untereinander ausmachen, und zwar automatisch, ohne Konfiguration von außen.
P2P ist da eventuell das richtige Stichwort ... – Golo Roden 30.03.2011
|
|
|
|
Verteilte Datenbank: Exakt :-)
Warum nicht jeder Knoten alle Daten hat: Dafür sind es zu viele Daten. Dass ich einfach CouchDB & Co nehmen könnte, ist mir klar - mich interessiert aber, wie man so etwas selbst bauen würde, beziehungsweise wie so etwas funktioniert. Wo welche Daten liegen sollen eigentlich nur die Server wissen - sprich, der Client kann irgendeinen Server nach den Daten für User A fragen, und bekommt seine Antwort. Entweder direkt, oder indem der Server den zuständigen Server kontaktiert. – Golo Roden 30.03.2011
|
||
|
Replikation wie bei CouchDB und Co ist ja was anderes als eine verteilte DB ;) Ich denke da kommst Du mit den Prizipen des P2P weiter: Jeder hat nen Index und kann jederzeit alles von jedem bekommen.
– DaSpors 31.03.2011
|
|
|