neuer Scheduler

    • neuer Scheduler

      Wer die letzten Tage mal auf GitHub geschaut hat, wird vielleicht schon festgestellt haben das es 2 neue Respositorys gibt.
      Ich habe jetzt nach längerer Überlegung beschlossen doch endlich den Sheduler in Java neu zu implementieren. 

      Der jetzige Sheduler stürzt nicht nur des öfteren ab sonder wird auch seh schnell träge. Ein paar Benutzer zu Hause und noch den ein oder anderen Schaltpunkt und schon ist der Sheduler kaum noch Handlungsfähig.
      Der Grund dafür liegt in PHP an sich. PHP bietet keine Threads nd somit keine Möglichkeit Aufgaben Paralel abarbeiten zu lassen.
      Da alle Aufgaben Seriell abgearbeitet werden müssen, blockert jeder Task den Sheduler bis seine Aufgabe erledigt ist. Gerade Funktionen wie die Benutzer zu Hause sind solche Problematischen Funktionen.

      Mit Java gibt es diese Problem nicht in diesem Umfang. Java bietet recht umfangreiche Möglichkeiten Aufgaben Paralel zu bearbeiten und zu Synchronisieren.So bietet sich nicht nur die Möglichkeit den Sheduler deutlich effizenter zu machen sonder auch gleich den Sensortransmitter und Schaltserver zu intigrieren.

      Geplant ist jetzt den Sheduler in Java komplett neu zu imiplementieren, dabei alle PHP Prozesse in einen Java Prozess mit Threads zu überführen. Zeitlich ist noch nicht fix eplant wann der jetzige Sheduler omplett Ersetzt werden soll, erst einmal wird es eine Option sein den neuen Sheduler zu verwenden anstatt dem PHP Sheduler. Ist der der neue Sheduler hinreichend Stabil wird dann rechtzeitig der übergang angekündigt.

      Ziel ist es das der java Prozess ohne ein Java Update auf dem Raspberry Pi laufen kann, also unter Java 7 lauffähig ist.

      The post was edited 1 time, last by agent47 ().

    • RE: neuer Sheduler

      kurzes Statusupdate:
      Das Grundgerüst für den neuen Scheduler steht, die ersten Tasks laufen auch schon (BlinkTast und UserAtHomeUpdateTask). Bis zur ersten Testversion werden aber noch einige Monate ins Land ziehen. Ich habe grob geplant im Q1/2016 die erste Testversion frei zu geben. Entgegen meiner ersten Aussage habe ich entschieden das ich Java 8 als Basis nutzen werde, diese ist bei Debian Jessie schon vorinstalliert. Der Vorteil für mich ist das ich die neuen Java 8 APIs nutzen kann die teils deutliche Erleichterungen mitbringen gerade was die Datumsverarbeitung angeht.

      Wann aber der neue Scheduler in den Serienbetrieb geht werden erst späteres Tests und die Rückmeldungen der Tester entscheiden. Was auch schon fest steht, durch die vielen Threads und Java selbst wird der neue Scheduler deutlich mehr Arbeitsspeicher benötigen. Was aber ab dem Raspberry Pi 2 kaum ein Problem darstellen wird. Aktuell gemessen habe ich ca. 20MB Speicherbedarf, geschätzt wenn alles implementiert ist 60 - 100MB. Zum Vergleich PHP kommt mit 6 - 20MB aus.
    • RE: neuer Sheduler

      Ich habe das Konzept der Schedulers noch einmal Grundlegend überdacht. Durch die komplette Umstellug auf Java ist das der richtige Zeitpunkt.

      Das Konzept des Scheduler so wie er jetzt ist in Java um zu setzen wäre zwar möglich aber nicht Sinnvoll. Aktuell ist es in PHP so das alle Aufgaben lediglich Zeitgesteuert ablaufen. D.h. alles Aufgabe laufen für sich allein. Jede Aufgabe holt ihre Reevanten Daten aus der Datenbank verarbeitet die Daten und schreibt das Ergebnis in die Datenbank. Das erzeugt nicht nur völlig sinnlos viel Interaktionen mit der Datenbank, sondern macht das ganze auch Extrem schwerfällig.
      Entstanden ist das aus den Einschränkungen von PHP und einem Konzept für den Scheduler welches seine jetzige größe nicht im geringsten vorgesehen hat.

      Beispiel: 

      Ein Input der in einem Ereignis und einem Schaltpunkt verwendet wird
      1. Inputs aus der Datenbank laden
      2. Status vm Input aus dem Netzwerk ermitteln
      3. neue Daten in die Datenbank schreiben
      4. Ereignisse, Bedingungen, Inputs ... aus der Datenbank laden
      5. Ereignisse verarbeiten
      6. neue Daten in die Datenbank schreiben
      7. Schaltpunkte, Bedingungen, Inputs ... aus der Datenbank laden
      8. Schaltpunkte verarbeiten
      9. neue Daten in die Datenbank schreiben


      Wie schon gesagt durch die Umsellung auf Java ist jetzt die richtige Zeit, solche altlasten über Bord zu werfen und neu zu überdenken.

      Der neue Scheduler wird nach folgendem Verfahren arbeiten und soweit wie möglich auch paralel statt nur seriell arbeiten:

      1. alle Daten aus der Datenbank laden und in Objektstruktur speichern
      2. einlesen aller neuen Statusdaten (parallel) [Inputs, Wake on Lan, FritzBox, ...]
      3. verarbeiten der Ereignisse, Schaltpunkte, Aufzeichnung der Sensordaten (paralel)
      4. alle Daten zusammen in die Datenbank speichern

      Wie man schon bei der vereinfachten Arbeitsweiße sehen kann ist der unterschied groß und jetzt deutlich einfacher.