Archiv verlassen und diese Seite im Standarddesign anzeigen : Projekt: Filesharingsoftware
davidbaumann
07.11.2005, 16:29
Folgender Anhaltspunkt, der mich restlos überzeugt hat dass man sowas noch braucht :D
Am WE war ich auf ner Lan.
So, jetzt kam ein Steamupdate raus, und n Teil von der Lan hatte es schon und der andere Teil nicht.
Jetzt müssten wir irgendwie an ca 130 Leute den gepackten SteamApps Ordner verschicken :D
E-Mule ist nicht für Lans zu gebrauchen da es die Festplatte viel zu sehr auslastet, bei DC dauert es zu lang bis die ersten, die was gezogen haben, auch wieder was hochladen.
Also habe ich mir Gedanken gemacht, was man bei einem speziell für Lans/ schnelle Netzwerke bestimmten Filesharing Programm beachten kann.
Ziel ist ja auch, die einzelnen PCs so wenig wie möglich auszulasten, dass man dabei weiter spielen kann.
Das ganze wird relativ komplex, da ich folgende Feautures gerne 'eingebaut' hätte:
- Minimalste Belastung der Festplatte
- Maximale Ausnutzung von Kapazitäten
- Schonung der Backbone
- Transparente Integration von 'PowerPeers' (Caches mit hoher Bandbreite)
- Dateisuche
- Multi-Sources
- Ein Dedizierter Server zur Planung der Übertragenen 'chunks' (wie bei E-Mule)
Ich bin schlecht im Erklären, bitte nachfrageb wenn was nicht verständlich war :D
Aufgabe des Servers: Er schaut in seiner Datenbank, welche Dateiteile am meisten asngefordert werden.
Ist ein 'PowerPeer' vorhanden, weisst er die Quelle an, den Dateiteil an den PowerPeer zu senden, dieser speichert es nur im Ram zwischen und sendet es an alle Clients, die den Dateiteil wollen.
Der Server wiederum schaut in der Zeit wieder in seine Datenbank und weist einzelne Clients an, welche Dateien sie versenden sollen.
Jeder Client/Powercache sendet seinen Dateiteil so lange, bis ihn alle haben, die ihn angefordert haben. Das belegt zwar in dem Fall 10 MB ram, belastet aber die Festplatte nicht (Schreibzugriffe werden gepuffert und belasten die Clients bei mickrigen 10 MByte/s kaum)
Die Backbone zu schonen habe ich auch schon eine blasse Idee, das würde ich aber eher später noch implementieren.
So ein PowerPeer könnte dann bei ausreichender CPU ne 1 GBit Verbindung auslasten (wenn es nicht grad ne PCI Karte ist...)
Jetzt bitte falls was nicht verständlich ist, Nachfragen (ICQ: 150399641).
Wer Interesse hat, mitzuarbeiten, bitte sofort melden :D
Ich lege mich da jetzt natürlich nicht sofort auf C++ fest, aber ich denke mal das wäre geeignet ?!
Den Server könnte man evtl auch über php/mysql laufen lassen, der xml oder einfach Kommandos in Texform überträgt...
MfG,
David
Das gehört wohl eher in die Project Zone. Bitte um Schiebung. :)
Eine gute Idee wie ich finde, doch bisher noch etwas unstrukturiert. Du hast Recht, einen gute Filesharing Software fuer LANs gibt es noch nicht.
Wenn du das Ding durchziehst: bau Multicast ein! Das waere ein gutes Feature.
the_postman
07.11.2005, 18:15
Da du's noch nicht erwaehnt hast .. was ist mit Bittorrent?
davidbaumann
07.11.2005, 18:27
Die belasten alle die Festplatte wie blöd...
Deswegen ne Lanparty-Eigenentwicklung :D
Baumi
Es gibt ein ganz nettes Prog des nennt sich ShareScan, evtl könnt ihr damit ja was anfangen, als Basis oder so...
Scannt das lan nach Freigaben und saugt dir dann sehr schnell und unkompliziert die freigegebenen Files...
Gibts hier (http://www.xkee.com/internet/sharescan/) is aber leider nur Shareware ( :D )
so long...
burger
davidbaumann
08.11.2005, 08:54
Ja sowas kenn ich auch scho.
Aber wird da der Client etwa nicht belastet?
Wenn ich auf ner Lan was freigebe, wird mein PC trotz Raid 0 um einiges langsamer...
David
Wie willst du zum Beispiel 100 MB uebertragen ohne die Festplatte so zu belasten, dass 100 MB auch tatsaechlich geschrieben werden?
Im Speicher halten?
Unsinnig.
Das einzige was Sinn macht, ist die Geschwindigkeit runterzuschrauben und das funktioniert mit allen anderen P2P Protokollen da Clientabhaengig...
Wenn ich auf ner Lan was freigebe, wird mein PC trotz Raid 0 um einiges langsamer...
Das wird sich nicht vermeiden lassen. Sollen die Daten von deinem Computer zu einem anderen gelangen, müssen sie gelesen und übertragen werden. Dieses Lesen und Übertragen macht deinen Computer langsamer. Was genau nützt dir da ein spezieller Client?
Nun ja, er könnte zumindest die zu sharenden Daten im Speicher halten, jedenfalls eine Zeit lang. Und beim Schreiben eben Geschwindigkeit runterschrauben.
Gibt's unter Windows eigentlich keine Funktion, mit der man den maximalen Resourcen-Anspruch eines Prozesses limitieren kann? Also CPU-Last, RAM und geschriebene/gelesene KB/Sec. für die Platte? In dem Fall könntest du nämlich beliebiges Programm nehmen.
Gibt's unter Windows eigentlich keine Funktion, mit der man den maximalen Resourcen-Anspruch eines Prozesses limitieren kann? Also CPU-Last, RAM und geschriebene/gelesene KB/Sec. für die Platte? In dem Fall könntest du nämlich beliebiges Programm nehmen.
Priorität kannst setzen, aber explizit die Ressourcen-Auslastung wäre mir nicht bekannt... Jedoch würd ich dem der die Funktion entdeckt/programmiert sofort ne Mass ausgeben ;)
Zum Thema Rechnerauslastung: Entweder du willst die Daten in adäquater Zeit übertragen haben _oder_ du willst zocken und damit den Rechner auslasten, beides zur gleichen Zeit mit anständiger Performance wirst du nicht kriegen, wie schon gesagt wurde...
Nun liegt es an dir, dich zu entscheiden, David ;)
Btw, warum eigentlich nicht einfach nen Fileserver für die Lan bereitstellen von dem sich die Leute alles saugen können? Bei solchen Sachen wie dem Steam-Update von dem du sprichst wäre das doch die einfachere Lösung!? Client-seitig kannst die geschwindigkeit ja einstellen damit die Leistung nicht _so_ in den Keller geht dass du nicht mehr zocken kannst...
so long...
burger
BlackLight
08.11.2005, 11:57
...
Jetzt müssten wir irgendwie an ca 130 Leute den gepackten SteamApps Ordner verschicken :D..
... bei DC dauert es zu lang bis die ersten, die was gezogen haben, auch wieder was hochladen.Ich sehe es etwas anders.
Weiss ja nicht, wie groß heutzutage so ein Steam-Ordner ist, wenn aber alle nur 1-2 Upload Slots haben dürfte es zwar am Anfang langsam anfangen dann aber richtig losrennen.
Bzw. hier bei uns im LAN rennt DC++ richtig gut, man kommt mit 2 Downloads relativ einfach an die 11,9MiB/s ran, wenn die anderen Rechner nicht die lamsten sind.
Wenn man dann dem DC eine niedrigere Priorität zuordnet, geht das Spielen auch.
Aber dass gute "Pings" und brauchbarer Filesharingdurchsatz gegenseitig ausschließt, sollte bekannt sein.
Hi,
die DAten im Speicher zu puffern ist auch nicht die beste Lösung. Wenn jemand wenig RAM hat und dann noch zocken will, hat das Spiel nicht genug Speicher und lagert aus. Dann geht das Spiel noch langsamer.
Eine Idee wäre, dass das Programm überprüft, wann die Festplatte grad ne Pause macht und in dieser Pause die Daten schreibt. Sobald ein Spiel nun lesen/schreiben will, so wartet es wieder auf eine Pause. So hast du die recht gute Balance.
neon
mastercane
08.11.2005, 17:32
Aber dass gute "Pings" und brauchbarer Filesharingdurchsatz gegenseitig ausschließt, sollte bekannt sein.
Dieses Problem kann man entschärfen indem man managbare Switches verwendet und die Bandbreite für SMB sowie Filesharingprotokolle per Traffic Shaping / QoS begrenzt. Gute Switches bieten verschiedene Arten von Queues für das QoS so das der Datenverkehr der Spiele priorisiert durch die Backplane des Switches geht.
mfg
mastercane
the_postman
08.11.2005, 18:39
Bittorrent belastet die Festplatte wie bloed? Dann hast du entweder keine Ahnung oder nutzt den falchsen Client.
Im Vergleich zu anderen Protokollen kann ich mich bei Bittorrent eigentlich nicht beklagen.
davidbaumann
08.11.2005, 18:56
Natürlich kann ich da Festplattenzugriffe sparen
Ich wollte das so machen:
Sagen wir mal 100 Leute (übertrieben) wollen eine Datei. Ich lese 10 MB der Datei in den Ram, und schicke es an die 10 Leute.
Effektiv 100 MB gesendet, 10 MB gelesen.
Die 10 Leute schreiben es auf HD und jeder schickt es nochmal an ein paar Leute.
Die normalen Clients mit 100 MBit Schnittstelle würden dann auch nur einen Upload gleichzeitig tätigen, wenn man jetzt nen dedizierten PC mit GBit Anbindung nimmt auf dem niemand spielt wäre das natürlich was anderes...
Schreibzugriffe lassen sich natürlich nicht minimieren, eher sollten es noch mehr werden :D
Bandbreitenbeschränkung etc bringen ja nichts... da gibt genug Möglichkeiten.
Zum Fileserver: stell mal nen Server bereit, der 100 Leute versorgen kann, ich sag dir der hat dann extrem viele Dateizugriffe und bricht wohl früher oder später zusammen
Naja, ich werd mal weitermachen :)
David
BlackLight
09.11.2005, 14:01
Zum Fileserver: stell mal nen Server bereit, der 100 Leute versorgen kann, ich sag dir der hat dann extrem viele Dateizugriffe und bricht wohl früher oder später zusammenDann stell nur 5 Uploadslots ein, sollte z.B. jeder 0815-FTP-Server können mit 2MiB/s bekommt man 1GiB in nur 8,5 min durchgejagt.
mastercane
09.11.2005, 15:28
Bandbreitenbeschränkung etc bringen ja nichts... da gibt genug Möglichkeiten.
Warum bringt das nichts? Das erklär mir mal...
Zum Fileserver: stell mal nen Server bereit, der 100 Leute versorgen kann, ich sag dir der hat dann extrem viele Dateizugriffe und bricht wohl früher oder später zusammen
Es gibt sogar Fileserver die in der Lage sind mehrere tausend Personen zu versorgen. Du mußt schon spezifizieren welche Hardware Du dir da vorstellt...
mfg
mastercane
davidbaumann
10.11.2005, 09:59
Nen bezahlbaren 0815 PC :D
Lol ihr wollt mir das alles ausreden :/
Ich will doch viel sharen und nicht meine Bandbreite noch weiter runterdrehen (ich wills schneller, NICHT langsamer)
Naja, ich stell das wahrscheins eh erstmal zurück und mach erstmal was anderes...
David
mastercane
10.11.2005, 10:08
Nochmal: Wenn Du durch eine Leitung mit einem Durchsatz von 100 l/h Bier und Wasser pumpen willst und das Bier immer gleichmäßig schnell ankommen soll mußt Du das Bier priorisieren. Also entweder ne Leitung in der Leitung oder die Zuleitung des Wassers begrenzen.
Mehr wie 100 l/h gehen aber nie, egal was Du fummelst, implementierst, machst oder tust :)
mfg
mastercane
davidbaumann
10.11.2005, 17:31
Bin ja auch nicht blöd.
Es geht darum die festplatten zugriffe zu minimieren... egal wenns keiner checkt mach ich s eben alleine...
ICh weiss dass ich nicht gut erklären kann... wer interesse hat aber nicht genau versteht was ich meine kann sich ja mal melden
MfG,
David
mastercane
10.11.2005, 18:06
Ich wollte dich sicher nicht "blöd" darstellen sondern es lediglich lustig-anschaulich erläutern - wenn das anders rübergekommen ist "Sorry" an dieser Stelle.
Zu deiner Idee: Bei einer datei wird das machbar sein allerdings solltest du bedenken das eventuell hunderte Dateien geshared werden.
Ich finde die Idee schon interessant - wende dich doch mal an die entwickler der gängigen Filesharing-Clients und frag nach ihrer Stellungnahme.
mfg
mastercane
Mädels... hört auf felix_, er hat doch schon gesagt, was die Lösung ist.
IP-Multicast ist wegen der Beschränkung auf ein LAN eine valide Lösung und die, die den Sender am wenigsten belastet.
xmit und recv von wwcn (http://www.wwcn.org) dürften die nächstbeste frei verfügbare out-of-the-box Lösung darstellen. Ob die Dinger aber auf aktuellen *nixen noch compilieren...
Wie wärs mit TFTP/Multicast (http://rfc.net/rfc2090.html)?
davidbaumann
02.02.2006, 12:28
Ich wollte dich sicher nicht "blöd" darstellen sondern es lediglich lustig-anschaulich erläutern - wenn das anders rübergekommen ist "Sorry" an dieser Stelle.
[...]
Hmm danke für die Entschuldigung.
Wie schon geschrieben soll das ganze von einem Server verwaltet werden.
Er weiss, wer welche Dateiteile hat und wer welche braucht.
Dann gibt er einem der den Teil hat die Adressen von 10 Leuten, die die Datei wollen.
Der 'Seeder' liest jetzt nur mit 1 MByte/s, schickt es an 10 Leute und gibt dabei 10MByte/s her. Die FP wird dabei aber nur so stark belastet als würde einer über 10 MBit ziehen...
Hab jetzt bei azureus gesehen, dass der auch cachen kann, aber ich denk mal das ist nicht so ausgelegt wie ich das will.
Mich würde mal interessieren, ob bei Bittorrent der Server verwaltet, wer welche Dateien bekommen soll, denn dann müsste ich da nur den Server ändern...
David
davidbaumann
31.12.2007, 13:24
So hab mein eigenes Projekt wieder gefunden :)
Vielleicht komme ich in nächster Zeit mal dazu, mich darum zu kümmern, dummerweise stehen jetzt aber erstmal die Abschlussprüfungen an :(
Würde das ganze mit .NET (c#) machen. Der Server dann mit MS SQL Server und Webservices.
Wenn ich die Zeit habe versuche ich es vielleicht nochmal hier anschaulicher zu erklären....
Gruß David
Würde das ganze mit .NET (c#) machen. Der Server dann mit MS SQL Server und Webservices.
Ich will mich jetzt hier nicht umbeliebt machen. Aber für eine gute Performance sollte das nicht beste Wahl sein.
Ich will mich jetzt hier nicht umbeliebt machen. Aber für eine gute Performance sollte das nicht beste Wahl sein.
Afaik ist in seinem Fall die Preformance der Software nicht von Bedeutung. Ich glaube nämlich nicht, dass Software in .Net Daten langsamer überträgt als bspw. in c(++). Ich spreche jetzt von der reinen Datenübertragung und nicht etwa das Managen von bspw. 200 unterschiedlichen Downloads mit mehreren Quellen. Ich glaube nicht, dass sein Projekt diese Ausmaße annimmt, dass ein Preformanceunterschied zu sehen wäre.
http://www.netzwelt.de/news/72366-filesharing-festplatten-mit-lan-anschluss-im-test.html
das löst alle probleme. die haben webinterface zum configurieren + wenn man will nen ftp zugang
sunset_NOVA
09.01.2009, 08:46
Hab ich das richtig verstanden, dass du vorhast ein Server zu programmieren, der zwar Bittorrent-ähnliche Eigenschaften in der Dateiübertragung besitzt, aber ansonsten den kompletten Verkehr steuert? Wie wäre es wenn du von die Idee mit der Verteilung etwas anders löst, sprich nicht 1 Server zu 10 Clients, die dann ihrerseits uploaden können, sondern eher ein kleineres Schneeball-Prinzip, sprich 2^x: 1 Server zu je einem Client, die beide wieder als Server fungieren. Daher würde ich es so aufbauen, dass ein Rechner im LAN, immer sowohl server als auch Client sein kann, damit du Redundanz schaffst und den ständigen abgleich zwischen Client und Server verhinderst.
Dann müssten sich die Server nur noch über die Server austauschen, sie "seeden", was man vielleich mit einem kleinen html-post machen kann...
MfG sunset_NOVA