Ankündigung

Einklappen
Keine Ankündigung bisher.

Dateien Deployen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Dateien Deployen

    Hallo Leute,

    ich würde mal gerne Tipps von einigen von euch einholen wie ich am Besten mein Feature umsetzen kann.

    Aktuell existieren Prozesse die Statische HTML Dateien erzeugen, die Dateien sind auf Beliebig viele Unterordner aufgeteilt. Ich habe ein Script erstellt der alle Dateien nach einem bestimmten Schema herauspickt die Ziped und auf X Server verteilt und dort samt der Ordnerstruktur entpackt/vorhandene Dateien überschreibt.

    Ziel ist es im Grunde HTML Files auf mehrere Webserver in einem bestimmten Intervall zu verteilen. Klingt zunächst einfach, jedoch gibt es da einige Probleme.

    1) Die Ordner in denen sich die HTML Dateien befinden sind Mounted Shared folder auf einem Unix System. Da es eine sehr Große Anzahl an Dateien ist(ca 20 TB) haben wir es getrennt. Es gibt den Webserver und in dem Webserver ist ein Mounted Folder. Das Problem ist, dass das Zipen teilweise Stunden dauert und in dieser Zeit kann es durchaus passieren dass der Mounter Folder "verschwindet"(netzwerk instabil, strom ausfahl what ever)

    2) Es kann auch Netzwerk Probleme geben beim hochladen und entpacken der Zip Files

    3) es ist eigentlich nicht wirklich Skalierbar, die Anzahl der Dateien wächst Täglich und die Anzahl der Server wird sicherlich früher oder Später erhöht.

    Was ich im Grunde suche ist ein Weg (Queue Bibliothek, Worker Bibliothek irgendwas) um eine große Anzahl an Daten von A nach B zu Transportieren.

    Eigentlich gibt es ja gute tools wie etwa rsync oder sowas, aber das ding ist, dass ich Notifications losschicken muss, Statusreports etc. Desswegen mach ich den Uploadprozess mit PHP. Nachdem ich zb die Dateien auf die Webserver verteile, mach ich noch mal checks ob auf allen Servern die gleiche Datei ist und wenn nicht, wird diese nochmal hochgeladen.

    Wie dem auch sei, das gesamte system ist extrems komplex und fehleranfällig und ich wollte mal herausfinden ob nicht jemand hier eine gute Lösung parat hat.

    Viele Grüße
    apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik


  • #2
    Ich habe ein Script erstellt der alle Dateien nach einem bestimmten Schema herauspickt die Ziped und auf X Server verteilt und dort samt der Ordnerstruktur entpackt/vorhandene Dateien überschreibt.
    Keine gute Idee - fürchte ich.

    Eigentlich gibt es ja gute tools wie etwa rsync
    Die man auch für solche Aufgaben benutzen sollte

    Desswegen mach ich den Uploadprozess mit PHP.
    PHP ist hier nicht das richtige Werkzeug. Benutze die Bash oder irgendeine andere Shell und rsync.

    Nachdem ich zb die Dateien auf die Webserver verteile, mach ich noch mal checks ob auf allen Servern die gleiche Datei ist und wenn nicht, wird diese nochmal hochgeladen.
    Das alles mach rsync quasi aus dem Handgelenk, 100% zuverlässig und mit Sicherheit wesentlich performanter als jedes PHP-Skript.

    Wie dem auch sei, das gesamte system ist extrems komplex und fehleranfällig und ich wollte mal herausfinden ob nicht jemand hier eine gute Lösung parat hat.
    Eine gute Lösung für ein extrems komplexes und fehleranfälliges System? Ich glaube die gibt es so nicht von der Stange

    Die Lösung musst Du Dir schon selbst zusammen stricken, die richtigen Werkzeuge dafür sind meiner Ansicht nach rsync und eine gute Shell.

    vg
    jack
    -

    Kommentar


    • #3
      Hi,

      verstehe ich es richtig, dass du nur eine Teilmenge der Dateien auf den Webservern deployen musst und nicht die gesamten 20TB?

      In dem Fall würde sich evtl. ein mehrstufiger Prozess anbieten, die zu deployenden Strukturen auf einer "staging"-Area zusammen fasst die du dann mit Hilfe von rsync o.ä. (u.U. sogar inkrementell) auf die Webserver deployen kannst.

      Für die Automatisierung würde ich dann auf ansible (https://github.com/ansible/ansible) gehen, da es die ganzen aktionen auch parallel ausführen kann.

      Kommentar


      • #4
        das ding ist, dass rsync etwas Primitiv ist, natürlich reicht mich nicht einfach Dateien von A nach B zu kopieren, sondern muss erstmal nur bestimmte dateien kopieren, und dann auch noch weitere PHP Scripte ausführen wenn dateien überall verteilt wurden.

        100% zuverlässigkeit ist mir durch rsync auch nicht gewährt, während des sync prozesses kann auch internet verbindung abbrechen, ideal wäre irgendwas wie rsync nur schlauer.

        sprich hier sind daten , übertrage die auf x/y/z, hattest du probleme beim hochladen? dann versuchs nochmal aber bitte am der letzten datei. hast du überall alles verteilt? ruf script a/b/c auf. und das ganze auch schnell.

        wie gesagt, zip + upload + unzip + scriptaufrufe dauert aktuell ca 4 Stunden und in dieser zeit bricht ab und zu die verbindung ab(server ist nicht stabil, sysadmin hat keine zeit einen neuen aufzusetzen, ich habe keine Rechte um einen aufzusetzen ) wenn die verbindung abbricht, so lädt mein script die letzte datei hoch, das Problem ist, dass wenn hintereinander immer wieder die verbindung abbricht, bleib ich immer bei einer datei stehen und gehe nicht weiter. (vielleicht mal die zip files kleiner machen)

        vielleicht gibt es sogar eine php library bei der ich prozesse hinzufügen kann und diese dann in einem bestimmten interval abgearbeitet werden, dabei merk sich auch die library was sie zu letzt gemacht hat, so dass bei problemen man bei dem letzten punkt weiter macht und/oder nach x versuchen den prozess überspringt..
        apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

        Kommentar


        • #5
          Da du direkt am Dateisystem arbeitest, würde ich dir PHP nicht empfehlen, sondern direkt in der Shell. Allerdings würde mich in dem Zusammenhang interessieren, wie deine Architektur so aussieht. Nutzt du DNS Round Robin, NAT LSB, ... Ich hatte mal einen ähnlichen Fall, in dem mir der Loadbalancer einen Strich durch die Rechnung gemacht hat...

          Kommentar


          • #6
            das ding ist, dass rsync etwas Primitiv ist, natürlich reicht mich nicht einfach Dateien von A nach B zu kopieren, sondern muss erstmal nur bestimmte dateien kopieren, und dann auch noch weitere PHP Scripte ausführen wenn dateien überall verteilt wurden.
            Deshalb: rsync + shell(script)

            100% zuverlässigkeit ist mir durch rsync auch nicht gewährt, während des sync prozesses kann auch internet verbindung abbrechen, ideal wäre irgendwas wie rsync nur schlauer.
            Natürlich, auch die Festplatte könnte ausfallen, oder der ganze Server abschmieren. Nur hat das alles nichts mit der Zuverlässigkeit von rsync zu tun und läßt sich, ganz nebenbei bemerkt, auch kinderleicht abfangen:

            Code:
            while true;do rsync -a --delete src dst &&  break; sleep 5; done
            vg
            jack
            -

            Kommentar


            • #7
              Und das per Versionskontrollsystem realisieren? (Siehe dazu gitftp)

              Kommentar


              • #8
                Zitat von dyron Beitrag anzeigen
                Und das per Versionskontrollsystem realisieren? (Siehe dazu gitftp)
                Gefährlich. Bei rsync wird abgeglichen welchen Stand die Gegenseite hat. Mit gitftp hingegen wird nur vermutet welchen Stand die Gegenseite hat.

                Prinzipiell halte ich das ganze Konzept aber für Fragwürdig. 20 TB von einem einzelnen Punkt aus syncronisieren und wenn alle Server syncronisiert sind, ein Event auslösen? Das klingt hochgradig fehleranfällig.

                Kommentar


                • #9
                  Zitat von erc Beitrag anzeigen
                  Gefährlich. Bei rsync wird abgeglichen welchen Stand die Gegenseite hat. Mit gitftp hingegen wird nur vermutet welchen Stand die Gegenseite hat.
                  So funktionieren doch auch manche Versionskontrollsysteme (beispielsweise git), dass eben nur veränderte Daten übertragen werden.

                  Der Hinweis zu gitftp kam, falls auf den Zielservern kein git vorhanden ist. Und so wie ich
                  I use git-ftp for my script based projects, mostly PHP. Most of the low-cost web hosting companies do not provide SSH or git support, but only FTP.
                  That is why I needed an easy way to deploy my git tracked projects. Instead of transferring the whole project, I thought, why not only transfer the files that changed since the last time, git can tell me those files.
                  verstehe, vergleicht gitftp bzw. git auch.

                  Kommentar

                  Lädt...
                  X