Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Viele große Dateien übers Netzwerk verschieben (https://www.delphipraxis.net/121844-viele-grosse-dateien-uebers-netzwerk-verschieben.html)

Computerbabalulu 5. Okt 2008 22:44


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ß

HalloDu 5. Okt 2008 22:52

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.

Computerbabalulu 5. Okt 2008 22:58

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ß

HalloDu 5. Okt 2008 23:00

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.

Computerbabalulu 5. Okt 2008 23:02

Re: Viele große Dateien übers Netzwerk verschieben
 
Es hantelt sich bei den Dateien immer um den gleichen Dateityp (pdf Dateien).

HalloDu 5. Okt 2008 23:05

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.

littleDave 5. Okt 2008 23:11

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.

Computerbabalulu 5. Okt 2008 23:20

Re: Viele große Dateien übers Netzwerk verschieben
 
Hi littleDave,

das hört sich interessant an :roll:


Zitat:

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.
Das wäre eigentlich nicht soooo ein großes Problem. Die XP Clients haben alle 2 QuadCore Xeon CPUs und sollte das locker schaffen.

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ß

littleDave 5. Okt 2008 23:26

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.

Computerbabalulu 5. Okt 2008 23:27

Re: Viele große Dateien übers Netzwerk verschieben
 
Supi, vorab schnmal herzlichen Dank für deine Mühe!!

Computerbabalulu 5. Okt 2008 23:38

Re: Viele große Dateien übers Netzwerk verschieben
 
Zitat:

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.
Auch dir herzlichen Dank für dein Interesse und deine Ideen!

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ß

Jelly 6. Okt 2008 07:28

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.

Luckie 6. Okt 2008 08:16

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: Auf das Netzwerk ist kein Verlass.

Computerbabalulu 6. Okt 2008 12:50

Re: Viele große Dateien übers Netzwerk verschieben
 
Zitat:

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.


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:

Darf ich fragen, was das für Daten sind?
Klaro darfst du! Es sind eine art PDF Dateien. Diese sind als Rohdateien ca. 200-600 MB groß und werden auf den XP Clients für den Digitaldruck aufbereitet.
Hierdurch werden die Dateien dann ca. 1-4 GB groß.

Gruß

Computerbabalulu 6. Okt 2008 12:54

Re: Viele große Dateien übers Netzwerk verschieben
 
Hi Luckie

Zitat:

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: Auf das Netzwerk ist kein Verlass.
Danke für den Tip :lol:
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 11:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz