Ankündigung

Einklappen
Keine Ankündigung bisher.

Benutzerprozesse verwalten

Einklappen

Neue Werbung 2019

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

  • Benutzerprozesse verwalten

    Hallo,

    ich sitze zurzeit vor einem konzeptionellen Problem und weiß nicht genau für welchen Weg ich mich entscheiden soll. Ich wäre euch dankbar, wenn ihr ggf. schon aus Erfahrungen (für das entsprechende Konzept) oder allgemein aus eurer Meinung mir die Entscheidung erleichtern könnt.

    Ganz abstrakt gehalten:

    Ein Benutzer kann bestimmte Prozesse anstoßen, die vom Server ausgeführt werden. Diese können eine unbestimmte Laufzeit haben, werden aber bei Überschreitung ihrer Maximaler Laufzeit abgebrochen und der entsprechende Nutzer wird dabei informiert.

    Nun besitze ich zurzeit zwei Möglichkeiten um dieses Problem zu lösen.

    Option A) Jeder Prozess, der vom Nutzer "angestoßen" wird, wird in eine einfach gehaltene Datenbank-Tabelle geschrieben (Prozess, Startzeitpunkt, Endzeitpunkt; default NULL, sowie ein Flag der definiert ob der Prozess noch nicht gestartet ist, läuft oder schon abgeschlossen ist). Ein Skript wird per Cronjob ausgeführt und führt jeden Task durch.

    Option B) Ich löse das ganze über ein zusätzliches Modul (Gearman= um mehrere Prozesse vom Benutzer zu starten.

    http://de3.php.net/manual/en/book.gearman.php

    Über Anregungen oder komplett andere Lösungsansätze würde ich mich seh freuen.

    Grüße

  • #2
    Bei Option A haste die Protokollierung gleich dabei. Ist auch das, was wir meist benutzen. Wüsste jetzt nicht was dagegen spricht. Option B habe ich noch nie benutzt.

    Kommentar


    • #3
      Option A finde ich vorteilhafter

      Kommentar


      • #4
        Wollte gerne das Thema noch einmal ins Rollen bringen. Vielen Dank erst einmal für eure Antworten.
        Bei Option A wäre das Problem, dass ich bei einem normalen Server (ohne jegliche Konfigurationsmöglichkeiten, Cronjob) der Mindestintervall bei ~5 Minuten liegt. Das bedeutet, der Nutzer müsste im Worst Case 5 Minuten warten bis seine Aufgaben angestoßen werden.

        Ansonsten wäre ja noch die Möglichkeit alle Prozesse einzelnd über AJAX-Requests anzustoßen. Nachteil dieser Methode wäre, dass mittendrin der Prozess abgebrochen werden kann, wenn der Nutzer den Browser schließt. Hat jemand ggf. noch irgendwelche Erfahrungswerte dazu?

        Kommentar


        • #5
          Ich bezweifel aber das auf einem normalen Server "ohne jegliche Konfiruationsmöglichkeiten" du auch kein Gearman zur Verfügung hast!

          Über AJAX wäre das sicherlich auch ne Idee, müsstest dann eben ein Verfahren implementieren das du entweder den Prozess später weiterführen kannst falls der Browser abstürzt oder den gesamten Prozess zurücksetzen kannst falls der User nicht mehr weiter macht.

          Kommentar


          • #6
            Gut, wenn du das so argumentierst hast du natürlich Recht Ich werde mir noch einmal genau Gedanken machen und dann eine Möglichkeit selektieren. Ich denke Gearman wäre dafür zu viel overhead

            Danke schon einmal.

            Kommentar


            • #7
              Bestehen deine Prozesse denn aus mehreren Schritten, die einzeln fehlschlagen können?
              Dann kämen mir Workflows in den Sinn, bei denen du auch gezielt auf bestimmte Ereignisse/Fehlschläge reagieren kannst.
              Allerdings müsste man da die asynchron laufenden Fortführungen natürlich auch irgendwie triggern, sehe ich aber kein Problem drin.

              Und zum Thema CronJobs: wie kommst du auf 5 Minuten?
              Standard-Crons können jede Minute laufen, ich könnte fast wetten, dass es auch noch Implementationen mit kürzeren Zeiten gibt.
              Und für die ganz Eiligen gibt es noch "incron" - Datei touch()en, incron fängt das ab und startet seine Arbeit.

              Kommentar


              • #8
                Weil es halt auf den meisten normalen Webhostern nur im 5 Minutentakt geht bzw. einstellbar ist.

                Kommentar


                • #9
                  Zitat von Flor1an Beitrag anzeigen
                  Weil es halt auf den meisten normalen Webhostern nur im 5 Minutentakt geht bzw. einstellbar ist.
                  Wenn du aber so und so ein Script schreibst was per Cron angestoßen wird um die Aufgaben auszuführen kann das auch so aussehen:
                  PHP-Code:
                  set_time_limit(0);

                  while(
                  true) {
                     
                  $aufgabe aufgabe_holen();
                     if(
                  $aufgabe) {
                         
                  $aufgabe->ausführen();
                         continue;
                     }
                     
                  sleep(5);

                  Kommentar


                  • #10
                    PHP-Code:
                    while(true
                    sieht ja übel aus.
                    Wo ist goto ?

                    Kommentar


                    • #11
                      Zitat von Koala Beitrag anzeigen
                      PHP-Code:
                      while(true
                      sieht ja übel aus.
                      Wo ist goto ?
                      So sieht Polling ebend aus. Du kannst gerne ein Weg aufzeigen wie das eleganter realisierbar ist.

                      Kommentar


                      • #12
                        Du kannst gerne ein Weg aufzeigen wie das eleganter realisierbar ist.
                        ich hab doch geschrieben, daß ich goto in diesem Fall vermisse.
                        Ich weiß, daß es derzeit anscheinend nicht anders geht.
                        Sieht trotzdem übel aus.

                        Kommentar


                        • #13
                          Zitat von G.Schuster Beitrag anzeigen
                          Bestehen deine Prozesse denn aus mehreren Schritten, die einzeln fehlschlagen können?
                          Dann kämen mir Workflows in den Sinn, bei denen du auch gezielt auf bestimmte Ereignisse/Fehlschläge reagieren kannst.
                          Allerdings müsste man da die asynchron laufenden Fortführungen natürlich auch irgendwie triggern, sehe ich aber kein Problem drin.

                          Und zum Thema CronJobs: wie kommst du auf 5 Minuten?
                          Standard-Crons können jede Minute laufen, ich könnte fast wetten, dass es auch noch Implementationen mit kürzeren Zeiten gibt.
                          Und für die ganz Eiligen gibt es noch "incron" - Datei touch()en, incron fängt das ab und startet seine Arbeit.
                          Die Prozesse (z.B. 3 Stück) sind aufeinanderfolgende Prozesse und dürfen in keinem Fall asynchron laufen. Jeder Prozess ist vom vorigen abhängig. Sollte der einer Fehlschlagen oder zu lange dauern, wird der ganze Prozess abgebrochen.

                          Kommentar


                          • #14
                            Asynchron war mehr auf den Benutzer bezogen, d.h. ob er auf die Ausgabe warten soll.
                            Schau dir bei den Anforderungen auf jeden Fall mal Workflows an, es gibt eine Implementation für PHP von Sebastian Bergmann (ezcWorkflow).

                            Kommentar

                            Lädt...
                            X