Skript-Resulate aus DB an anderen Server zur Verarbeitung geben?
Julian Hofmann
- programmiertechnik
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
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
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
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
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
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
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