Julian Hofmann: Skript-Resulate aus DB an anderen Server zur Verarbeitung geben?

Hallo liebe Forumianer,

mache mir Gedanken über ein ansich kleines Problem, sehe aber keine (gute) Lösung:

Auf einem Server läuft ein Skript mit Datenbank im Hintergrund. Die Ergebnisse des Skriptes sollen sollen ebenso in einer anderen Homepage auf einem anderen Server angezeigt werden (Einverständnis ist natürlich da).

Mein Problem ist nun, daß keiner der beiden Server einen Zugriff auf seine DB von außen zuläßt. Es ist aber auch ineffektiv die Daten zweimal zu speichern (und zu verwalten!).
Die Daten ändern sich etwa wöchentlich. Cronjobs stehen auf keinem der beiden Server zu Verfügung.

Eine Idee war, daß man ein Skript schreibt, daß nur die Daten zurückgibt, dieses vom externen Server aufruft und ausliest und mit split usw. in die einzelnen Werte teilt. So ganz sauber ist aber ja nicht, und bei vielen Zugriffen wohl auch nicht so sinnvoll.

Hat jemand eine Idee wie man sowas elegant löst?

Grüße aus Würzburg
Julian

  1. Hi,

    Die Ergebnisse des Skriptes sollen sollen ebenso in einer anderen Homepage auf einem anderen Server angezeigt werden (Einverständnis ist natürlich da).

    wenn es nur um die Anzeige geht, kannst Du das Ergebnis einfach von einem (aus DB-Sicht) lokalen Script generieren lassen; das entfernte Script macht einen HTTP-Request darauf und wertet die Daten aus. Bei (in dem Bereich) gleicher HTML-Struktur reicht es auch, die Rückgabe stur auszugeben; andernfalls musst Du Dir halt ein Übergabeformat definieren (CSV, XML...).

    Die Daten ändern sich etwa wöchentlich.

    Als Verfeinerung kannst Du Dir auch einen serverseitigen Cache überlegen. Die Daten werden abgespeichert, und vor dem HTTP-Request wird anhand des Dateidatums geprüft, ob (vermutlich!) aktuellere Daten vorliegen.

    So ganz sauber ist aber ja nicht,

    Warum nicht? Eine zentrale Datenquelle, eine definierte Schnittstelle. Wenn man die Skalierbarkeit außer Acht lässt, geht's kaum besser.

    und bei vielen Zugriffen wohl auch nicht so sinnvoll.

    Das vermeidet ein Cache :-)

    Hat jemand eine Idee wie man sowas elegant löst?

    Natürlich kannst Du nach einer Datenänderung auch ein Script anstoßen, welches das HTML-Fragment (oder die Fragmente, wenn sie unterschiedlich sind) generiert und per FTP auf den entfernten Server überträgt. Die Einbindung erfolgt dann z.B. per SSI. Vorteil: Durch den manuellen Programmstart sind die Daten sicher aktuell, auch wenn der Aktualisierungszeitpunkt aus der Reihe tanzt.

    Cheatah

  2. Hi Julian,

    Auf einem Server läuft ein Skript mit Datenbank im Hintergrund.
    Die Ergebnisse des Skriptes sollen sollen ebenso in einer anderen
    Homepage auf einem anderen Server angezeigt werden (Einverständnis
    ist natürlich da).

    Was genau heißt "in einer anderen Homepage angezeigt"?
    Du scheinst mehr als nur einen Link zu meinen.

    Willst Du erreichen, daß der angezeigte URL auf der "anderen Homepage"
    verbleibt, aber effektiv der "Server" angesprochen wird?
    Dazu würde es ausreichen, den URL zu übersetzen (Apache: mod_rewrite
    oder Ähnliches); die Daten mußt Du nicht unbedingt transportieren.

    Für diese Aufgabenstellung wäre die Lösung meiner Wahl Apache-mod_proxy

    • ich würde den fremden Server in meinen URL-Raum einblenden.

    Es ist aber auch ineffektiv die Daten zweimal zu speichern

    Nicht unbedingt - darauf basiert ganz allgemein das Prinzip eines Caches.

    (und zu verwalten!).

    Das natürlich schon. Aber ein Original und ein Spiegel inklusive automati-
    siertem Abgleich, das erhöht den eigentlichen Verwaltungsaufwand kaum.

    Die Daten ändern sich etwa wöchentlich.

    Wie sicher bist Du Dir dieser Aussage?
    Sie macht die Idee, direkt nach jeder Aktualisierung ein Duplikat auf den
    anderen Server zu übertragen, attraktiver; für eine solche Überlegung müßte
    ich aber auch die Zahl der Abfragen in etwa wissen (siehe unten).

    Cronjobs stehen auf keinem der beiden Server zu Verfügung.

    Auch nichts Vergleichbares? (Was sind denn _das_ für Server?)

    Aber wenn schon Daten transportieren, dann tut es auch ein success event
    nach der wöchentlichen Aktualisierung. (Irgendwer wird da ja wohl einen
    Prozeß anstoßen.)

    Eine Idee war, daß man ein Skript schreibt, daß nur die Daten zurückgibt,
    dieses vom externen Server aufruft und ausliest und mit split usw. in
    die einzelnen Werte teilt.

    Hm - das ist nun etwas Anderes als das, was Du ursprünglich haben wolltest.
    Anfangs wolltest Du nur die Ergebnisse des fremden Skriptes anzeigen - das
    ist einfach. Jetzt dagegen willst Du sie mit einem Programm weiterverarbei-
    ten - das schließt eine Reihe angedachter Möglichkeiten aus.

    So ganz sauber ist aber ja nicht,

    Siehe Cheatahs Kommentar.
    Du hast natürlich einen zusätzlichen single point of failure im System
    mit drin, den Du bei wöchentlicher vollständiger Übertragung der Datenbank
    vermeiden würdest - die Ein-Server-Lösung ist wahrscheinlich stabiler.

    und bei vielen Zugriffen wohl auch nicht so sinnvoll.

    Der Knackpunkt ist dabei m. E. nicht die absolute Anzahl der Zugriffe,
    sondern eher die relative Menge der abgefragten Daten gegenüber dem
    Gesamtvolumen der Datenbank:
    a) Wenn die Abfragen relativ oft relativ wenige Daten absaugen, dann
       ist die einmalige Übertragung des gesamten Datenbestandes auf den
       Verarbeitungsserver (Cache-Modell) sinnvoll;
    b) werden jedoch aus einem riesigen Datenbestand nur kleine Teile aus-
       geliefert, dann ist der dynamische Kommunikationsaufbau wahrscheinlich
       effizienter.
    Je mehr Du auf hochaktuelle Inhalte angewiesen bist, desto zwingender
    dürfte der Ansatz b) werden.

    Hat jemand eine Idee wie man sowas elegant löst?

    Es wäre sinnvoll, noch ein paar Details nachzuliefern - beispielsweise
    eben Angaben über die relativen Datenvolumina.

    Viele Grüße
          Michael

    1. Hallo Michael,
      hallo Cheatah,

      soweit schon mal dankeschön.

      Zu Michaels "Was ist denn _das_ für Server?": Einer, auf den ich keinen root-Zugriff habe und mir keine Cronjobs erlaubt sind???

      Der kleine Nachtrag zu den Details:
      Es geht um eine Wertung von Mannschaften (feste Anzahl, ca. 100). Diese wird sowohl auf einer Hauptseite (Server 1) mit Platz, Name und Punktestand als auch auf Seiten der Mannschaften (Server 2) angezeigt. Die Daten werden nur von einer Person (mehr oder weniger) regelmäßig geändert.
      Durch verschiedene Layouts der Seiten brauche ich eigentlich die Daten selbst zur Weiterverarbeitung und nicht die exakte Ausgabe des Skriptes. Sicher, man könnte jetzt fragen, warum ich nicht gleich alle Seiten auf einem Server liegen habe, das haut aber wegen anderer Datenbankabfragen usw. nicht hin.

      Einen guten Morgen aus Würzburg
      JUlian

      1. Hi,

        Die Daten werden nur von einer Person (mehr oder weniger) regelmäßig geändert.

        diese Person sollte dann auch für die Verteilung der Daten sorgen - weitgehend automatisch, aber (quasi-)manuell angestoßen.

        Durch verschiedene Layouts der Seiten brauche ich eigentlich die Daten selbst zur Weiterverarbeitung und nicht die exakte Ausgabe des Skriptes.

        Mach einen CSV-Export der Daten. Zwei per SSI (oder PHP o.ä.) eingebundene Scripts lesen die CSV-Datei aus und generieren die jeweilige HTML-Struktur. Wenn die Daten komplexer sind (also deutlich mehr als nur eine Tabelle), lohnt es sich vielleicht, die Daten in XML-Form bereitzuhalten.

        Sicher, man könnte jetzt fragen, warum ich nicht gleich alle Seiten auf einem Server liegen habe,

        Nein, die Frage stellt sich mir eigentlich nicht :-) Dein Problem ist nicht gerade selten...

        Cheatah

      2. Hi Julian,

        Zu Michaels "Was ist denn _das_ für Server?":
        Einer, auf den ich keinen root-Zugriff habe und mir keine Cronjobs
        erlaubt sind???

        Aha, also _Dir_ stehen keine Cronjobs zur Verfügung.

        Dann solltest Du Dir mal überlegen, ob das wirklich der untimative Provider Deiner Wahl ist.
        (Ich darf cron-Jobs verwenden und zahle keine 10 Euro pro Monat; wenn Du schon ein solches Projekt realisieren willst, dann sollte Dir eine komfortable Entwicklungsumgebung auch etwas wert sein.)

        Durch verschiedene Layouts der Seiten brauche ich eigentlich die Daten
        selbst zur Weiterverarbeitung und nicht die exakte Ausgabe des Skriptes.

        Ich schließe mich der von Cheatah genannten CSV-Methode an (habe ich selbst
        schon mal so realisieren müssen - die Daten lagen in meinem Fall sogar auf
        demselben Server, ich kam aber nur via HTTP ran).

        Viele Grüße
              Michael