Bildupload in einen Cluster

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

  • Bildupload in einen Cluster

    Hallo,

    ich habe ein Problem zu dem ich gerne ein paar Meinungen hören würde, vielleicht hat ja jemand eine bessere Idee wie man das ganze realisieren könnte.

    Es geht um eine PHP Anwendung die beim Kunden in einem HTTP Cluster läuft, was soweit auch gut funktioniert. Problemmatisch wird das ganze beim Bildupload.
    An gewissen Stellen (Profil, Artikel, Galerien) ist es möglich ein Bild hochzuladen. Ursprünglich hatte ich hier eine feine Iframe/Ajax Lösung die das Bild in einem Iframe hochgeladen hat und per Ajax wurde dann das Bild nach dem Upload angezeigt, das ganze hat also komplett ohne Seite neuladen funktioniert.
    Das musste ich schonmal umbauen weil das Uploadscript auf einem externen Server laufen muss da man nicht in den Cluster uploaden kann. Die Iframe Lösung hat dann wegen der "Same Origin Policy" nicht mehr funktioniert, weil das Uploadscript eben auf einem anderen Host lief, also musste ich überall einen Standardupload per Seite neuladen einbauen. Soweit sogut.

    Das Hauptproblem ist allerdings das die Bilder nicht von diesem externen Server geladen werden, sondern von dort erst wieder im Cluster verteilt werden bevor man drauf zugreifen kann, dieser Vorgang dauert etwa 2-5 Minuten. Der User sieht nun nach dem Upload also noch kein Bild sondern erst wenn er nach 2-5 Minuten die Seite neulädt und das Bild bis dahin verteilt wurde. Usability technisch schonmal ein Alptraum.
    Ich habe das ganze nun etwas verbessert indem ich vor der Ausgabe des Bildes prüfe ob das Bild auf dem externen Server vorhanden ist, ergo upgeloadet wurde aber nocht nicht verteilt wurde, und zeige in dem Fall dann ein "Bild in kürze verfügbar".
    Der User muss aber trotzdem manuell die Seite neuladen.

    Alles in allem bin ich damit garnicht glücklich, aber gibt es Alternativen ?

    Eine Möglichkeit wäre das per Ajax und einer Schleife in einer bestimmten Zeit zu prüfen ob das Bild vorhanden ist, bei vielen Bildern auf einer Seite aber ein Performance Killer.

    Eine weitere Möglichkeit wäre nach dem Upload den User nach 2-5 Min zu einem Reload zu zwingen, per meta refresh oder JS oder wie auch immer, auch keine schöne Lösung.

    Man könnte die Bilder auch in DB statt im Filesystem speichern, das würde die Verzögerung eliminieren, aber ich denke auch das ist ein Performance Killer.

    ODER man lädt die Bilder erst vom externen Server solange bis sie im Cluster verfügbar sind, wie das in der Praxis funzt müsste ich mal testen.

    Mich würde interessieren wie soetwas im Detail bei anderen großen Projekten funktioniert. Ich denke mal da gibt es dann einfach Imageserver auf denen die Bilder verteilt werden und dann einfach vom entsprechenden Server geladen werden ?! Hat da jemand Erfahrungen ?

    Ich würde mich sehr über Tipps/Erfahrungen freuen

    danke schonmal

  • #2
    Wieso dauert es 2-5 Minuten ein Bild von einem Server auf einen anderen Server zu kopieren?

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Soweit ich weiss haben die da ein Cronjob Script das alle 2Minuten auf Veränderungen im Dateisystem prüft und die Dateien dann synchronisiert. Die genaue Zeit weiss ich nicht, aber es sind so ungefähr 3 Minunten bis ein Bild verfügbar ist.

      Kommentar


      • #4
        Original geschrieben von kaguya
        Soweit ich weiss haben die da ein Cronjob Script das alle 2Minuten auf Veränderungen im Dateisystem prüft und die Dateien dann synchronisiert. Die genaue Zeit weiss ich nicht, aber es sind so ungefähr 3 Minunten bis ein Bild verfügbar ist.
        Und dann wird alle 3 Minuten oder so alle Bilder überprüft und ob die schon auf allen Clustern sind?
        Irgendwie sehr kontraproduktiv...

        Wieso nicht einfach nach dem Upload ein Skript triggern was das Verteilen sofort übernimmt?
        Dann kann man noch ein sleep(5) im Upload-Skript vor der Ausgabe einbauen, in der Zeit sollte das Bild im kompletten Cluster verteilt sein, und wenn die Seite dann endlich beim Browser ankommt kann das Bild vom Cluster geladen werden.

        Ein adäquates Fallback wäre natürlich trotzdem noch wünschenswert.

        Aber es bleibt dir, so wie ich das sehe, (an vernünftigen Varianten) nur die Distribution-Zeit zu verringern oder das Bild nach dem Upload erstmal auf dem Upload-Server statt direkt im Cluster zu verlinken.

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          ja das ist keine schlechte Idee, werde mal anfragen inwiefern das möglich wäre.
          Weisst du (oder jemand anderes) denn wie soetwas bei anderen großen Projekten gemanaged wird ?

          Kommentar


          • #6
            Original geschrieben von ghostgambler
            Aber es bleibt dir, so wie ich das sehe, (an vernünftigen Varianten) nur die Distribution-Zeit zu verringern oder das Bild nach dem Upload erstmal auf dem Upload-Server statt direkt im Cluster zu verlinken.
            Letztere Methode verfeinert:
            Auf dem Cluster-Server, auf dem der Nutzer eh gerade schon ist, bleiben, und das Bild von dort verlinken.
            Ist es dort noch nicht vorhanden, kann das 404-Script einspringen, welches dann auf dem Upload-Server nachschaut, und wenn vorhanden die Bilddaten von dort einliest und an den Client durchschleust.
            Vorteil: Client muss ein und das selbe Bild nicht zwei mal von verschiedenen Servern laden - Caching ist effektiver möglich.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar

            Lädt...
            X