Announcement

Collapse
No announcement yet.

Deamon mit PHP oder Alternativen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Deamon mit PHP oder Alternativen

    Hallo
    Ich hoffe, dass mir hier jemand weiterhelfen kann und schildere erstmal meine Situation um mein "Vorhaben" klarer darzustellen...

    Alles hat angefangen mit einer kleinen 2-Mann-Firma, die komplett ohne Internet agierte (Kunden nur in der Region, Briefkontakt, Telefon und gut). Irgendwann kam einer auf die Idee: Internet = mehr Kunden.
    Und schon war der erste Auftritt fertig - nur als Präsentation, Anmeldungen kamen per Email - weiterhin alles per Briefkontakt

    Wie man sich vorstellen kann, wenn etwas läuft, dann wird das irgendwann nicht mehr machbar. Also kamen wir auf die Idee: Unsere Webseite könnte viel übernehmen:
    User in Datenbank gespeichert, Abrechnungen usw. erscheinen direkt auf der Webseite - die User erhalten einen Member bereich mit allen Informationen - Soweit so gut.

    In der Anfangszeit wurden alle Berechnungen von den Internetseiten selbst gemacht. D.h. wenn der erste im Monat auf die Seite kam, musste er etwas länger warten, bis die seite geladen wurde. Aber auch das wird mit der Zeit zu viel (vor allem nervig und auf den meisten Servern sind PHP-Scripte ja auch zeitlich begrenzt - in unserem Fall auf 30 Sekunden -> ab 2000 Kunden war das zu wenig)

    Mittlerweile sind wir bei weit über 5000 angelangt und es gab natürlich auch schon wieder Änderungen.
    CronJobs waren die nächst bessere Wahl. Aber auch hier kam ich irgendwann an die grenze für die PHP-Skript-Laufzeit...

    Um dieses Problem wieder in den griff zu kriegen wurde der aktuelle Zustand entwickelt. Das sieht dann folgendermaßen aus:

    Ein Script wird jeden Tag per CronJob gestartet - Je nach Tag hat es verschiedene Aufgaben (von einfachen Account-Aktivierungen am anfang des Monats über Email-Versand -Zahlungsaufforderungen- in der Mitte, bis hin zur Abrechnungserstellung am Ende des Monats)
    Da aber je nach aufgabe (z.B. Emailversand) die Laufzeit weit über die 30 Sekunden rausgehen, musste ich dieses Script so programmieren dass es sich merkt, wie weit es kam und alles immer nur häppchenweise erledigt - z.B. 100 Emails, dann nächster Durchgang... (Die Emails und die Abrechnung am ende des Monats waren in der Tat die größten Probleme - im Internet muss man viele User an eine Zahlung erinnern, und dank vieler User gibts auch viele Abrechnungen)

    Jedenfalls ging ich irgendwann so weit, dass ich für die Mails und Rechnungen eigenen PHP-Scripte schrieb, die alle 5 Minuten aufgerufen werden, in die Datenbank schauen, ob was zu tun ist, 100 Stück erledigen und wieder aufhören. Die Einträge selbst werden durch den ursprünglichen Cronjob erledigt.

    Hört sich kompliziert an, und ist auch so^^

    Und zu guter letzt, lasse ich den eigentlichen Cronjob am Tag 5-6 mal aufrufen, da wir anfangs große Probleme mit der Erreichbarkeit unseres Servers hatten und man nie wusste, ob der Job jetzt erledigt war, oder ob er gerade off war (ich speichere in einem kleinen Text-file, ob der Cronjob aufgerufen wurde oder nicht und überprüfe dieses bei jeder Ausführung)

    Aber mir ist schon die ganze Zeit bei diesem Aufbau schwummrig, und wenn es auch momentan läuft, habe ich immer das Gefühl dass das ganze Gebilde instabil ist, und dass nur ein kleiner Datenhauch reicht um es von seinen Aufgaben abzuhalten...

    Nun hatte ich die Idee, dass man einen Deamon schreiben könnte, der rund um die Uhr im hintergrund läuft und die ein oder andere Aufgabe übernehmen kann. Z.B. den Mailversand oder auch das erstellen der Abrechnungen und vielleicht auch den ein oder anderen sonstigen Job, der von diesem komplizierten Cronjob aufgerufen wird...

    Mein Idealziel wäre, dass alle zeitintensiveren Aufgaben von einem oder mehreren Deamons durchgeführt werden.

    Mit PHP kann ich mir sowas noch ungefähr vorstellen - soweit ich das verstanden habe, wäre es ein normales Script, dass mit sleep einfach wartet und lediglich ausführbar gemacht wurde (und natürlich die übliche anfangszeile #!/pfadzuphp) erhält...
    Die Frage ist: wird dieses Script dann nicht auch nach 30 Sekunden abgebrochen wie alle anderen über den Webserver
    (Ich will diese Maximal-Laufzeit nicht unbedingt ausschalten, da sie meiner Meinung nach schon einen gewissen Sinn hat, auch bei einem komplett unter meiner Fuchtel stehendem Webserver)

    Oder gibt es gute alternativen? Einen Deamon könnte man ja auch mit Perl/Python/C++ schreiben. Alle Sprachen kann ich bedienen, aber habe ich noch nie was im Zusammenhang mit Webseiten zu tun gehabt - d.h. ich habe z.B. kein Plan, wie ich an die MySQL-Datenbank rankommen würde...

    Hat jemand von Euch eine Idee, wo ich Informationen über das Schreiben von Deamons (PHP, Perl, Python, C++) finden könnte?
    Oder besser noch: eigene Erfahrungen zu dem Thema?
    Also dazu gehört dann natürlich auch: Was muss man beachten usw... ich denke wenn ich ein einfaches Programm schreiben würde, dann hätte das wieder irgendwo irgendwelche Haken, die dann die Funktion einschränken... oder was falsch machen...

    Und dann zu guter letzt: Ich mache mir auch Gedanken was wäre wenn dieser Deamon mal abstürzt, sich beendet, abgeschossen wird, warum auch immer... Kann man das irgendwie überwachen und ihn neu starten? (dabei dachte ich an ein einfaches bash-script, dass per "ps aux" schaut ob der deamon noch läuft und wenn nicht diesen neu startet)

    Ich stoße so langsam in Regionen der Programmierung vor, in die ich ursprünglich eigentlich nie wollte, deshalb wäre ich sehr dankbar, wenn mir da jemand einen sinnvollen Schubs in die richtige Richtung geben könnte...

    Grüße
    DM

  • #2
    Hallo Dominik,

    deine eigentliche Frage kann ich dir nicht beantworten, da fehlt mir die Erfahrung Ich kann aber (vielleicht) mit Alternativen dienen
    Warum nich erstmal den kleineren Schritt machen und ein "normales" unixübliches Kommandozeilenprogramm schreiben, das die genannten Aufgaben gut und vor allem sicher erledigt. Mit diesem Programm umgehst du erstmal die Laufzeitbegrenzung von PHP-Scripten. Cronjobs laufen nach meiner Erfahrung sehr sicher (mglws. sicherer als ein eigener Daemon und könnten das Starten dieses Tools übernehmen. Wenn man aus einer gesunden Paranoia heraus dem ganzen nicht traut, kann man sich ja nach jedem Durchlauf eine Statusmail schicken lassen

    Steht die verwendete Datenbank in Frage? Deiner Schilderung entnehme ich, daß du auf eine MySQL-DB aufsetzt. MySQL ist eine schnelle, für Webpräsentationen, Foren, etc. hervorragend geeignete DB. Sie hat aber (in den aktuell gängigen Versionen) viele Nachteile, die nur mit hohem Aufwand in den Frontends wieder wettgemacht werden können! Ich denke hier nur - gerade bei der Erstellung von Abrechnungen - an Transaktionssicherheit.
    Egal ob nun mit SQL-Server oder Oracle, auch die Verwendung einer DB-eigenen Programmiersprache macht gerade komplexe Abläufe sehr viel übersichtlicher (und sicherer).
    Oracle bietet seit kurzem mit der 10g Express eine kostenlose Alternative für Privatleute und kleine oder mittlere Firmen an. Und Oracle läßt sich fast so gut ins Webumfeld integrieren wie MySQL )

    Also wie gesagt, keine Lösung, nur die Verwirrung vergrößert ;P

    Gruß Fal
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment

    Working...
    X