![]() |
Viele große Dateien übers Netzwerk verschieben
Hallo ihr lieben.
Ich habe folgendes Problem: Ich muss (möchte) automatisiert viele große Dateien (1-4 GB pro Datei) zentral auf einen Fileserver verschieben / holen. Die Dateien liegen verteilt auf ca. 15-20 Windows Systemen (XP) und müssen entweder vom Server eingesammelt oder von den XP Clients automatisch auf den Server übertragen werden. Da das ganze übers Netzwerk laufen soll, muss das ganze auch mit diversen Sicherheitsfunktionen ausgestattet sein, so das bei Störungen beispielsweise später automatisch angefangene Übertragungen fortgesetzt oder wiederholt werden. Außerdem muss sichergestellt werden, dass die Datei fehlerfrei verschoben wurde. Das ganze sollte natürlich möglichst performant sein, da hier am Tag etwa 1 bis 3 Tausend solcher Dateien zu verschieben sind. Die betreffenden Systeme sind alle mit 2-10 Gbit Netzwerk (2Gbit Clients, 10 Gbit Server) verbunden. FibreChanel, iSCSI bzw ein reines SAN kommt für uns aus Kostengründen nicht in betracht. Der Zielserver ist allerdings schon ganz nett mit 20 TB Volumen (Raid 10, 15K SAS Platten) und 2 10Gbit NICs. Der Server läuft übrigens mit Win2003. Jetzt meine Frage. Wie realisiere ich das ganze? Mach es Sinn mit die Dateien mit den Indys auf den Server zu schieben, oder besser die ganz normalen Win APIs zum verschieben verwenden? Hat vielleicht jemand Erfahrung mit solchen dingen oder gar schon mal etwas Ähnliches Programmiert? Schön wären natürlich auch, wenn das Programm später die aktuelle Übertragungsgeschwindigkeit und den Fortschritt anzeigen würde. Und wie ist es überhaupt Sinnvoller: Dateien vom Server einsammeln lassen oder jeweils von den Clients auf den Server schreiben? Für Vorschläge, Informationen und eventuelle Beispiele wäre ich dankbar. Gruß |
Re: Viele große Dateien übers Netzwerk verschieben
Meine spontane Idee, deren Realisierbarkeit ich in keinster Weise versichern kann, wäre, einfach eine Freigabe auf dem Server (Domaincontroller?) zu machen, auf die nur ein bestimmter Nutzer zugreifen kann. Jetzt kommt der Part bei dem ich mir nicht sicher bin. Auf dieser Freigabe meldest du dich dann mittels deines Programms an / Könntest aber auch Alternativ den Ordner für Standardbenutzer weder einsehbar noch lesbar, sondern nur schreibbar machst und schiebst die Datei ganz normal rüber, und gibst eventuell noch nötige Rechte (?). Mit der Ordnerstruktur kannst du dann bestimmte Strukturen nachbilden oder noch nebenbei 'ne Datenbank pflegen. Den Sicherheitsaspekt hast du mit den Ordnerrechten und dem geschützen Ordner unter Kontrolle.
|
Re: Viele große Dateien übers Netzwerk verschieben
Hallo, HalloDu :-)
Das Problem mit der Sicherheit besteht keinenfalls insofern das die Dateien vor fremden Zugriff geschützt bleiben müssen. Das ganze Netzwerk ist Firmenintern und alle Rechner sind mit Shares für alle Freigegeben. Mit Sicherheit meinte ich nur die Sicherheit das die Dateien auch 100%ig zuverlässig fehlerfrei übertragen werden. Daher frage ich mich wie ich das am besten realisiere. Sicher ist es kein Problem die Freigaben zu Mounten und einfach mit der Win API die Dateien zu verschieben. Aber macht es auch Sinn es so zu machen? Gruß |
Re: Viele große Dateien übers Netzwerk verschieben
Kennst du denn die Anzahl und die Struktur der Dateien, gibt es irgendwelche Regelmäßigkeiten? (Es könnten ja auch vlt einige Dateien garn nicht übertragen worden sein, dafür wären solche Informationen nützlich). Auf jeden Fall kannst du mit Hashes arbeiten um zu überprüfen, ob die Dateien wenigsten korrekt übertragen wurden.
|
Re: Viele große Dateien übers Netzwerk verschieben
Es hantelt sich bei den Dateien immer um den gleichen Dateityp (pdf Dateien).
|
Re: Viele große Dateien übers Netzwerk verschieben
Ja wie gesagt, du kannst nach der Dateiübertragung prüfen, ob die Hashes übereinstimmen. Entweder einfach vom Client aus, oder dem Server noch auf welchem Wege auch immer den Hash übermitteln und einem Serverdienst das Validieren überlassen. Was ist wenn ein Client mal "vergisst" die Datei zu übertragen, kann man darauf irgendwie schließen.
|
Re: Viele große Dateien übers Netzwerk verschieben
Wie wäre es mit einer Art Torrent-System?
Der Client erstellt zuerst ein eine Art torrent-File für die zu übertragenen Dateien. Jede Datei wird in kleine Parts (sagen wir mal 10 MB) unterteilt (also nur im Container, nicht die Datei selbst) und jedes Part bekommt einen einzelnen Hash. Zusätzlich bekommt dann noch die komplette Datei einen Hash über alle Parts sowie über alle Daten. Wenn du jetzt eine Datei an den Server schicken willst, sendest du zuerst die Container-Daten mit den Hashes und den Dateigrößen. Dieses Containerfile überprüfst du dann wiederum erstmal, in dem du einen Hash-Vergleich machst. Ist das Container-File in Ordnung, sendet der Server nacheinander Request an den Client, der dann die Daten der einzelnen Parts überträgt. Sobald ein Part ankommen ist und die CheckSumme des Parts beim Server mit der CheckSumme im Containerfile übereinstimmt, sendet der Server ein weiteren Request an den Clienten, bei dem er einen neuen, noch nicht vorhandenen Part anfragt. Dies wiederholt der Server so lange, bis alle Parts herungergeladen und alle Checksummen übereinstimmen. Damit der Server die einzelnen Clients erkennt, könnten die sich ber UDP-Broadcast beim Server melden. Das lästigste dabei wäre dabei die Erstellung des Container-Files, da dies bei 1-4 GB doch schon ein paar Minuten dauern kann. Jedoch bist du dann ziemlich sicher, ob irgendwelche Dateien fehlerhaft sind. Dann musst du nicht mehr die komplette Datei anfordnern sondern nur den Part, der eine falsche CheckSumme hat. Das ganze kannst du noch besser machen, wenn mehrere identische Dateien von mehreren Clienten auf einmal gesendet werden. Dann kannst du verschiedene Parts von unterschiedlichen Clienten herunterladen - gleichzeitig bei einer Datei. Ich hab sowas schon mal gemacht, hat ca. 1-2 Wochen gedauert und hat super funktioniert. |
Re: Viele große Dateien übers Netzwerk verschieben
Hi littleDave,
das hört sich interessant an :roll: Zitat:
Hättest du vielleicht mal ein Beispiel von deiner Lösung für mich? Da du ja alles schonmal gemacht hast und es sogar funktioniert wäre es blöd wenn ich hier das Rad neu erfinden müsste. Oder vielleicht kenn ja wer ein Programm was ich nutzen kann welches es schon gibt?? Gruß |
Re: Viele große Dateien übers Netzwerk verschieben
Ich kann mal schauen, jedoch heute nicht mehr. Wahrscheinlich komm ich morgen dazu - kann ich aber nicht garantieren.
|
Re: Viele große Dateien übers Netzwerk verschieben
Supi, vorab schnmal herzlichen Dank für deine Mühe!!
|
Re: Viele große Dateien übers Netzwerk verschieben
Zitat:
Ja, das wäre auch ein lösungs Ansatz. Ich will mal sehen was hier noch so an Kreativen Ideen zusammen kommt. Manchmal sieht man den Wald vor lauter Bäumen nicht und da ist mir gerne mal ein Fachkundiger Rat von anderen ganz lieb. Hier gibt es massig Kompetenz und einige habe sicher ähnliches schonmal realisiert (siehe littleDave). Eventuell gibt es ja auch schon eine fertige Software die mir hier helfen könnte?! Also vorab schonmal vielen Danke an alle... Gruß |
Re: Viele große Dateien übers Netzwerk verschieben
Darf ich fragen, was das für Daten sind? Du sprichst von möglicherweise 3000 Tausend Dateien zu je 4 GB täglich. Da reden wird von 12 TB pro Tag. Dein 20 TB RAID packt ja dann noch nicht einmal 2 Tage.
Ich habe tatsächlich meine Bedenken, solche Mengen an Daten über irgendwelche simplen Indy Clients oder per CopyFile zu kopieren. Bist du dir der Netzwerklast bewusst. Ich schätze doch mal, dass ihr nur die Server im 10 GBit Netz betreibt, und nicht die Clients! Ich denke da sollte schon ein etwas durchdachtes Konzept her. Das Zerstückeln der Dateien ist imho schon mal die richtige Richtung. Aber dennoch, 12 TB von XP Clients (wieviel an der Zahl eigentlich), überträgst du nicht einfach nur mal so. Ich könnte mir dort einen Dienst auf dem Server vorstellen, der immer nur 1 oder mehrere (jedenfall kontrolliert an der Anzahl) von Clients gleichzeitig bedient, um die Serverlast (vor allem das IO) in Grenzen zu halten. Die Clients melden sich mit einem Programm an, und übergeben die einzelnen Containerdateienanzahl und die Groesse am Server. Sobald der Server wieder Luft hat, fungiert er nach dem Fifo Prinzip und teilt einem Client mit, dass er wieder empfangsbereit ist... Ich denke du verstehst wie ich das meine, ansonsten nochmal nachhaken. Aber ganz ehrlich: Das sind immense Mengen an Daten. Ich weiss, ein SAN ist teuer, wäre aber bei solchen Mengen eventuell trotzdem eine Überlegung wert. |
Re: Viele große Dateien übers Netzwerk verschieben
Was aber auf alle Fälle ganz wichtig ist, ist ein ausführliches Log zu schreiben, damit man Fehler nachvollziehen kann. Ich hatte mal ein ähnliches Problem. Allerdiunmgs hat es sich nur im kleine Dateien gehandelt. Meine Lösung sah dann so aus:
![]() |
Re: Viele große Dateien übers Netzwerk verschieben
Zitat:
Ja da hast du sicher Recht, es sind unmengen an Daten. Diese Daten brauchen allerdings auf dem Server keine langen vorhaltezeiten da sie kurz nach dem Eintreffen auf dem Server weiterverarbeitet und dann gelöscht werden. Was das SAN betrifft, so reden wir hier von einer Investition von etwa 140.000 Euronen. Ein Angebot habe ich schon eingeholt, aber es lohnt wirklcih nicht. Die besagten bis zu 3.000 treten nur maximal in einem Monat auf und sind als Jahresspitze zu sehen. In den anderen Monaten sind es wesentlich weniger Dateien (ca. 700-1200 tgl.). Also solange ich die Investition vermeiden kann, werde ich es zumindest mal versuchen ob es auch anders geht. Und ja, aktuell ist nur der Server mit 2 mal 10Gbit angebunden. Die Möglichkeit die Clients ebenfalls mit 10Gbit anzuschließen ist aber gegeben und schnell realisiert. Achso... Zitat:
Hierdurch werden die Dateien dann ca. 1-4 GB groß. Gruß |
Re: Viele große Dateien übers Netzwerk verschieben
Hi Luckie
Zitat:
Auf deiner Seite war ich gestern schon und hab rumgestöbert :zwinker: Das Thema "Auf das netzwerk ist kein Verlass" habe ich dabei natürlich auch direkt gefunden! Dabei direkt mal ein Lob an dich, es befinden sich nämlich sehr viele nützliche und Interessante Beiträge und Code Samples auf deiner Seite :thumb: Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz