UDP

Ereignisse, Vorschläge und Aktionen

UDP

Beitragvon wobble » Do Mär 12, 2009 1:29 am

Hi folks,

ich bin grad auf yacy gestoßen und wollte das dann ausprobieren. Hab mir das also runtergeladen, startet auch und so. Leider muss ich mir nen Port in meinem Router aufmachen. Ich weiß, dass ist bei fast aller p2p software so. Ich vermute mal, dass ein TCP Port aufgemacht werden muss und ich denke das wird vorläufig für mich auch nicht so das große Problem sein, aber spätestens, wenn ich yacy in der Uni benutzen möchte, hab ich damit ein Problem.

Ich hab mich mal früher auch schon mal mit p2p kram beschäftigt und nen auf p2p basierendes email Versandsystem entwickelt (p2pmail.sourceforge.net für alle die das interessiert). Worauf ich hinaus will ist, dass ich damals um dieses Problem zu umgehen UDP-hole-punching implementiert habe. Ich habe mich jetzt noch nicht wirklich mit der struktur von yacy befasst, aber yacy sieht sehr viel versprechend aus (wesentlichstes Kriterium: es scheint immer noch aktiv zu sein!). Wenn es also möglich ist, sowas wie udp hole punching zu implementieren, würd ich mich anbieten zu versuchen das als zusätzliche Kommunikationsebene hinzuzufügen.

soa... ich denk mal ich mach mich dann mal ans ausprobieren, wollte das jetzt erstmal nur gepostet haben, bevor ich es vergesse ;)

cheers,
wobble

PS: bitte ändert die start-seite so, dass man weiß was für einen Port (also UDP oder TCP) man aufmachen muss. Dabei fällt mir auf: die vorgeschlagene Portnummer ist 8080, also definitiv ein Standard-Port, wenn ich mir meine Logs vom Router anschaue, so krieg ich fast jede Minute einen geblockten Zugriff von außen, ich kann mir somit vorstellen, dass 8080 für Angriffe auch ein beliebter Port ist.
wobble
 
Beiträge: 19
Registriert: Do Mär 12, 2009 1:09 am
Wohnort: Berlin

Re: UDP

Beitragvon Lotus » Do Mär 12, 2009 2:21 pm

Willkommen, wobble!

Ich habe mir das mal durchgelesen: http://de.wikipedia.org/wiki/Hole_Punching
YaCy müsste also auf UDP umsteigen, da TCP-Pakete mit falschem Absender quasi unmöglich sind über das Internet zu versenden. (Die ISPs blocken das in ihren Routern.)

In der aktuellen Version ist nun auch UPnP enthalten um den Port auf DSL_Routern freizuschalten.

wobble hat geschrieben:Dabei fällt mir auf: die vorgeschlagene Portnummer ist 8080, also definitiv ein Standard-Port, wenn ich mir meine Logs vom Router anschaue, so krieg ich fast jede Minute einen geblockten Zugriff von außen, ich kann mir somit vorstellen, dass 8080 für Angriffe auch ein beliebter Port ist.

Das werden wohl größtenteils Port-Scans nach offenen Proxies sein. YaCy ist das aber nicht (per Standard).
Lotus
 
Beiträge: 1699
Registriert: Mi Jun 27, 2007 3:33 pm
Wohnort: Hamburg

Re: UDP

Beitragvon wobble » Do Mär 12, 2009 4:30 pm

auf UDP umsteigen ist natürlich blödsinn (weil dann alles inkompatibel wird). Wenn hätte ich mir vorgestellt, dass die Peers auf unterschiedliche Art und Weise kommunizieren könnten. k.A. wie das aktuell geregelt ist (hab mir eben den sourcecode vom SVN gezogen), aber wenn ihr ehh mit urls arbeitet, dann könnte man nen schema für udp (und udp-hole-punching) definieren. Außerdem hat UDP-Punching natürlich immer den Nachteil, dass man einen Vermittler benötigt.

Gibt es eigentlich ne Dokumentation von yacy, also wo man die Funktionsweise von dem Index, der Suche und der p2p-Kommunikation beschrieben ist? Ich hab im Wiki dazu leider nix gefunden. Also ich suche Antworten auf Fragen von dem Typ:
  • Wie sieht die Datenstruktur für den Index aus? Benutzt die Tries? Was ich aus dem sourcecode bis jetzt mitbekommen habe, werden hashtables, bzw. binäre Bäume benutzt, beides meines Erachtens keine guten Datenstrukturen für Datenbanken.
  • Wie werden Daten gespeichert? Ist das einfach eine Gnutella-Variante oder doch etwas klügeres? Also sind z.B. manche peers "Experten" bei bestimmten Suchwörtern/themen, oder werden bei der globalen Suche einfach random irgendwelche peers befragt?
  • ...
wobble
 
Beiträge: 19
Registriert: Do Mär 12, 2009 1:09 am
Wohnort: Berlin

Re: UDP

Beitragvon wobble » Do Mär 12, 2009 11:15 pm

etwas was mir aufgefallen ist:
Ich krieg ganz häufig so nachrichten im Admin-Log wie

INDEXRECEIVE: received 15 RWIs ...

Ich weiß jetzt nicht wie groß diese Pakete sind, aber für mich sieht das so aus, als wären das Pakete in KB Größe. Wenn die wirklich so klein sind, gehen extrem viel Ressourcen mit dem TCP Aufbau verloren und es wäre denke ich sinnvoller da irgendwas zu bündeln. Kann natürlich sein, dass ihr doch schon geschickt große Pakete zusammenbündelt ;)

und noch was, als ich yacy bei mir installiert hab (hab das auf der Website verlinkte 0.7er für Linux benutzt), war RAM auf 120mb gesetzt, die anderen Einstellungen haben aber insgesamt viel mehr RAM gefordert, so habe ich z.b. den RWI Cache auf 10.000 runtersetzen müssen damit ich nun mit 200mb Speicher auskomme (Ich hab leider nicht so die RAM-Schleuder ... *neuen RAM kaufen muss...*). Es lief am Anfang also andauernd der GC und ab und zu gabs dann auch OutOfMemoryErrors (Heap-Space). Wenigstens die Initialkonfiguration sollte stabil laufen, das verschreckt sonst zu viele Nutzer.
Dazu fällt mir ein, auf wie groß wird denn der Stack-Space gesetzt?
und wie macht ihr eigentlich dieses Speichermanagement? Also dass gemessen wird, wieviel Speicher von welcher Stelle benötigt und benutzt wird. Ich hatte bis jetzt immer gedacht, dass Java einen bzgl. Speicher immer voll im Dunkeln lässt und dass es eher ein Stochern im Dunkeln ist, bis man weiß wieviel Speicher nun wirklich benötigt wird. Aus Erfahrung weiß ich, dass immer extremst viel Speicher auf Header draufgeht, aber wie kann man denn sowas messen?

PS @Moderator: ich hab das jetzt einfach als Antwort auf meine Posts rangepostet, da ich vermute das das nicht so die weltumwerfenden sachen sind, die ich hier poste und es somit für ne Verschwendung halte lauter neue Threads aufzumachen. Wenn dem nicht so ist, bitte einfach umkopieren.
wobble
 
Beiträge: 19
Registriert: Do Mär 12, 2009 1:09 am
Wohnort: Berlin

Re: UDP

Beitragvon wobble » Do Mär 12, 2009 11:44 pm

noch was..
in regelmäßigen Zeitabständen kommen hintereinander ganz viele

PEERNEWS: ... joined the network

heißt das, dass er da reconnected? Wieso tut er das?
wobble
 
Beiträge: 19
Registriert: Do Mär 12, 2009 1:09 am
Wohnort: Berlin

Re: UDP

Beitragvon Orbiter » Fr Mär 13, 2009 1:58 pm

hallo wobble! so viele Fragen ..

wie meinst du das, die Startseite so zu verändern das man weiss welchen Port man aufmachen muss? Es gibt doch nur ein Port, der ist im Browser in der Adresszeile zu sehen.

Dein UDP-Idee ist nicht so schlecht, man müsste nur sehen wie man das macht das man möglichst wenig am bisherigen Prozess ändern muss.

Einen zentralen Vermittler braucht man übrigens nicht, das kann ja jeder Peer sein, wenn man ihn nur kennt. Und kennen kann man die ja auch ohne offenen Port, über die Seed-Listen, die beim Netz-Bootstraping geladen werden.

Datenstruktur: keine tries, keine hashtables, keine binäre Bäume. Wir haben Tabellen, die über einen Index im RAM angesprochen werden. Die aktuelle Eco-Datenstruktur ist einfach eine lange Liste von rows fixer Länge mit nur einem primary key, der im RAM gehalten wird. Damit das geht, haben wir eine besonders RAM-schonende Indexdatenstruktur, die nur 1/4 der Java-TreeMap braucht. Die eigentlichen Web-Indizes sind momentan in etwas 'speziellen' (da müsste ich länger erklären), in Zukunft werden sie in BLOBs gestreamt und auch mit so einem Index im RAM angesprochen.

Speicherung (inzwischen) im Netz: auch kompliziert, eine DHT mit Redundanz und horizontaler+vertikaler Skalierung nach Wörtern und Referenzen. Wir haben gerade eine neue Variante die noch nicht ganz ausgereift ist.

Paketgröße der Index-Versendung: optimierbar. Ist teilweise ein neuer Algorithmus.

RAM: wird laufend dran gearbeitet.

Speichermanagement: die kelondro-Datenstrukturen benutzen keine Java-Klassen, sondern selbst organisierte byte[] arrays mit sehr großer Länge, die selbst verwaltet wird. Daher kann man genau sagen, wieviel verbraucht wird, und es ist auch kein Overhead für die Objektverwaltung da. Nach meiner aktuellen Messung können wir damit das 4-fache unterbringen, verglichen mit Java-Klassen.

Peernews: das sind keine TCP/IP-connects, sondern seed-Updates die beim Peer-Ping ausgetauscht werden. Ein Peer gilt als 'connected', wenn man seinen seed kennt, nicht wenn man einen socket offen hat. Der wird nur ad-hoc geöffnet.
Orbiter
 
Beiträge: 5793
Registriert: Di Jun 26, 2007 10:58 pm
Wohnort: Frankfurt am Main

Re: UDP

Beitragvon wobble » Fr Mär 13, 2009 3:42 pm

Erstmal danke für die Antworten :)
Orbiter hat geschrieben:hallo wobble! so viele Fragen ..

wie meinst du das, die Startseite so zu verändern das man weiss welchen Port man aufmachen muss? Es gibt doch nur ein Port, der ist im Browser in der Adresszeile zu sehen.

Dazu muss man wissen, dass die anderen Peers sich auch mit dem Web-Server verbinden und dieser nicht nur lediglich UI ist (Für Neulinge nicht unbedingt klar). Ansonsten hätte es nämlich auch ein UDP-Port sein können.
Dein UDP-Idee ist nicht so schlecht, man müsste nur sehen wie man das macht das man möglichst wenig am bisherigen Prozess ändern muss.

Einen zentralen Vermittler braucht man übrigens nicht, das kann ja jeder Peer sein, wenn man ihn nur kennt. Und kennen kann man die ja auch ohne offenen Port, über die Seed-Listen, die beim Netz-Bootstraping geladen werden.

yup, keinen zentralen Vermittler, sondern irgendeinen Vermitller. Das macht den Verbindungsaufbau langsam, vorallem wenn man keinen Vermittler kennt, den man nutzen kann und somit erst im Netz suchen muss (der Vermittler muss ja Verbindungen zu beiden Peers offen haben - im Fall von UDP also ab und zu Pakete verschicken, damit der Router sich an die Verbindung erinnert).

Datenstruktur: keine tries, keine hashtables, keine binäre Bäume. Wir haben Tabellen, die über einen Index im RAM angesprochen werden. Die aktuelle Eco-Datenstruktur ist einfach eine lange Liste von rows fixer Länge mit nur einem primary key, der im RAM gehalten wird. Damit das geht, haben wir eine besonders RAM-schonende Indexdatenstruktur, die nur 1/4 der Java-TreeMap braucht. Die eigentlichen Web-Indizes sind momentan in etwas 'speziellen' (da müsste ich länger erklären), in Zukunft werden sie in BLOBs gestreamt und auch mit so einem Index im RAM angesprochen.

Ahh. ok. Ist vernünftig nur den Index seperat zu halten. Solange der in den RAM passt, schick. Allerdings gings mir um die Verwaltung des Indexes.
Allerdings fällt mir jetzt ein, ist das vermutlich doch nicht so wichtig, da die längste Zeit vermutlich der Festplattenzugriff frisst. Außer, man möchte noch mehr Semantik in den Index einbauen (sie mein Post in der Wunschliste) - aber dann kriegt man aber vermutlich Speicherprobleme...
Speicherung (inzwischen) im Netz: auch kompliziert, eine DHT mit Redundanz und horizontaler+vertikaler Skalierung nach Wörtern und Referenzen. Wir haben gerade eine neue Variante die noch nicht ganz ausgereift ist.

Paketgröße der Index-Versendung: optimierbar. Ist teilweise ein neuer Algorithmus.

Nen Ort wo man das nachlesen kann gibt es nicht, oder? Sonst würd ich ja anstelle eigene neue Vorschläge in den Raum zu werfen versuchen Vorschläge zur Verbesserung des aktuellen Systems machen. ;)
RAM: wird laufend dran gearbeitet.

merkt man ;)
Speichermanagement: die kelondro-Datenstrukturen benutzen keine Java-Klassen, sondern selbst organisierte byte[] arrays mit sehr großer Länge, die selbst verwaltet wird. Daher kann man genau sagen, wieviel verbraucht wird, und es ist auch kein Overhead für die Objektverwaltung da. Nach meiner aktuellen Messung können wir damit das 4-fache unterbringen, verglichen mit Java-Klassen.

Ahh das erklärt das :) Ich hoffe ihr verpointert euch nicht ;)
Peernews: das sind keine TCP/IP-connects, sondern seed-Updates die beim Peer-Ping ausgetauscht werden. Ein Peer gilt als 'connected', wenn man seinen seed kennt, nicht wenn man einen socket offen hat. Der wird nur ad-hoc geöffnet.

gut, ich hatte schon Angst, dass ich irgendwas falsch konfiguriert hab.
wobble
 
Beiträge: 19
Registriert: Do Mär 12, 2009 1:09 am
Wohnort: Berlin


Zurück zu Mitmachen

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron