Webservice: Mehrere Instanzen



  • Hallo,

    ich habe einen Webservice geschrieben, der auf einem Tomcat läuft. Mehr oder weniger wartet er nur darauf, dass er mit Daten von einem Sensor gefüttert wird. Gelegentlich wird darauf etwas rumgerechnet und etwas in die Datenbank geschrieben. Als Fontend gibts eine schöne (naja, funktionierende) Website, bei der der Benutzer eben ein paar Daten sehen (und teilweise auch eingeben) kann.

    Das ganze Ding läuft. Sogar ziehmlich gut. Einmal. Ich brauche nun mehrere Instanzen davon, bin mir aber nicht sicher, wie man dies am geschicktesten baut.

    Einfachste Möglichkeit wäre es, den Server (inkl Datenbank, Tomcat, Webserver...) zu duplizieren und so jede Instanz seperat auf einem Rechner laufen zu lassen. Das ist natrülich ein bisschen übertrieben, gerade weil der Service nicht sonderlich viel Resourcen braucht.

    Man könnte natürlcih auch n Instanzen laufen lassen vom Tomcat, und bei der DB eben n Schemata (eins für jede Instanz) aufsetzen. Damit wäre alles schön separiert - kommt mir aber auch seltsam vor (ich nehme an der Overhead für jede Tomcat Instanz ist recht hoch?).

    Oder mam manscht halt alles zusammen. D.h. bei jedem request wird irgendeine Instanz-Id mitgesendet, anhand derer der webservice (wovon es dann nur einen gibt) die Zuordnung vornimmt. Theoretisch könnte man dann selbst für alle daten ein DB-Schema nehmen, und z.B. in einer USER-Tabelle zu jedem User noch die passende Instanz-id mitspeichern (d.h. es gäbe nur ein Schema).

    Ich bin mir überhaupt nicht sicher, wie man das elegant lösen kann bzw. sollte. Wie erwähnt, ist der Resoucen-bedarf für jede Instanz "gering", ich werde irgendwas zwischen 5 und 500 brauchen und gehe davon aus, dass man es von der CPU-Last auf einem Rechner mit 16 Cores oder so laufen haben könnte (im 500er Fall). Wichtig noch: Es muss die Möglichkeit geben, Daten mehrer Instanzen zu "mischen" (ich meine damit Vergleichen).

    Ich wäre froh, wenn Ihr mir Tipps geben könntet, wie man dabei vorgehen könnte.

    Ich hoffe das Java-Forum passt, ist halt alles mit Java gebastelt - auch wenn die Frage nicht wirklich Java-spezifisch ist.

    Danke & schönen Abend,

    MeinBenutzername



  • Hallo,

    MeinBenutzername schrieb:

    ich habe einen Webservice geschrieben, der auf einem Tomcat läuft.

    Gut

    MeinBenutzername schrieb:

    Ich brauche nun mehrere Instanzen davon, bin mir aber nicht sicher, wie man dies am geschicktesten baut.

    Es tut mir leid, aber das vertehe ich nun jetzt gar nicht. Was verstehst du unter "mehrere Instanzen"? Bitte erkläre diesen Punkt genauer.

    Evtl. meinst du so was wie "mehrere Session's"? ein Nutzer == eine Session

    MeinBenutzername schrieb:

    Einfachste Möglichkeit wäre es, den Server (inkl Datenbank, Tomcat, Webserver...) zu duplizieren

    Hilfe 😮

    MeinBenutzername schrieb:

    Theoretisch könnte man dann selbst für alle daten ein DB-Schema nehmen, und z.B. in einer USER-Tabelle zu jedem User noch die passende Instanz-id mitspeichern (d.h. es gäbe nur ein Schema).
    ... Wichtig noch: Es muss die Möglichkeit geben, Daten mehrer Instanzen zu "mischen" (ich meine damit Vergleichen).

    Diese Frage hast du dir schon selbst beantwortet.

    MeinBenutzername schrieb:

    Ich bin mir überhaupt nicht sicher, wie man das elegant lösen kann bzw. sollte. ... Ich wäre froh, wenn Ihr mir Tipps geben könntet, wie man dabei vorgehen könnte.

    Wie schon erwähnt verstehe ich dein Vorhaben nicht ganz. Kannst du bitte mal kurz denn Ablauf deines Webservice beschreiben und den Begriff "mehrere Instanzen" erläutern?

    Gruß, Thomas



  • Okay, ich versuchs noch mal. Ich habe ein Mikrocontroller-Board, das sammelt Daten von Sensoren ein. Per USB gelangt das ganze an einen Rechner. Der macht wiederrum nicth viel mehr, als die Daten, die er vom Controller erhält, an meinen Webservice weiterzuleiten. Welcher eben diese Daten verarbeitet, auf grund dessen eine DB aktualisiert, etc.

    Das ganze gibt es im Moment genau einmal, d.h. ein Mikrocontrollerboard, einen Satz von notwendigen Sensoren, einen "Weiterleitungs-Rechner", einen Webservice, einen Datenbankserver, einen Webserver (die Dinge alle auf einem anderen Rechner).

    Jetzt möchte ich das mehrmals haben, d.h. auf der einen Seite brauche ich auf jeden Fall mehere Mikrocontroller-Boards (+ zugehörige Sensoren), dazu jeweils einen Rechner, der das weiterleitet. Die Frage ist eben, wie man die andere Seite daran anpasst.

    Jede dieser Sensoren-Danten-Sammelungsdinger arbeitet unabhängig, auch die Daten sollen voneinander unabhängig ausgewertet werden. Bis jetzt ist mein Service darauf ausgerichtet, nur Daten von EINEM Board zu sammeln. Meine Frage ist, wie man am besten eben vorgeht, wenn nun mehrere Sensor-"Instanzen" vorhanden sind.

    Wie designed man nun die Webservice-Seite vernünftig, um damit umgehen zu können? Einige Ideen von mir hatte ich ja im ersten Post dargestellt.



  • Füge doch in die Tabelle(n) einfach eine zusätzliche Spalte "Board-Id" o.ä. ein und übergebe dem Webservice für jedes Board eine eigene Id.



  • Vermutlich steh ich da jetzt auf der Leitung, aber was ist den jetzt dein Problem?

    Das die Sensoren auf den gleichen Daten arbeiten? Wenn ja, such mal nach "Semaphore".



  • LordJaxom schrieb:

    Füge doch in die Tabelle(n) einfach eine zusätzliche Spalte "Board-Id" o.ä. ein und übergebe dem Webservice für jedes Board eine eigene Id.

    Klar, so würde es gehen. Mir kommt das nur dann so "gemischt" vor. Da die Systeme eben recht unabhängig arbeiten. Aber wenn das der Weg der Wahl ist, dann werde ich in wohl so bestreiten... wobei das Problem ja ist, dass ich natrülcih verschiedene Tabellen haben. D.h. es müssten entweder alle eine Spalte Board-Id haben, oder zumindest so viele, dass durch JOINs klar wird, zu welchem Board eine Zeile in einer Tabelle gehört. Kommt mir igendwie so vor als ob das auch nicht ideal ist?



  • MeinBenutzername schrieb:

    D.h. es müssten entweder alle eine Spalte Board-Id haben, oder zumindest so viele, dass durch JOINs klar wird, zu welchem Board eine Zeile in einer Tabelle gehört. Kommt mir igendwie so vor als ob das auch nicht ideal ist?

    Was kommt dir da nicht ideal vor? Wo vor hast du Angst?

    hier ein grober Vorschlag für den Tabellenaufbau deiner Datenbank. Genaue Angaben hierzu kann dir wohl keiner machen, da wir die Daten von den Sonsoren nicht kennen und evtl. keine Hausaufgaben machen,

    Tabelle "Board"
    Kommentar "Enthält eine List mit allen zur verfügungstehenden Boards"
    Spalten "Id" "Board-Seriennummer" "Board-Name"

    Tabelle "Messdaten"
    Spalten "Id" "Board-Id" "Wert von Sensor 1" "Wert von Sensor 2" ...

    Was ist da nicht ideal? Upps 🙂

    Gruß, Thomas



  • Wie bereits gesagt enthält die DB mehr als nur eine Tabelle. Es sind auch mehrere Sensoren, die ausgelesen werden. Die Daten werden auch nicht nur eins zu eins in der DB abgespeichert.

    Das heißt, ich müsste hierbei in mehreren Tabellen die "Board-Id" Spalte haben (oder eben zumindest so oft, dass durch Joins mit anderen Tabellen auf die Board-Id zugegriffen werden kann). Wie gesagt, mir ist durchaus klar, dass dies ein Weg ist, den man gehen kann. Ich habe mich nur gefragt, ob es nicht auch andere (bessere?) Alternativen gibt, gerade eben weil die veschiedenen Sensor-Daten, die die Boards bereitstellen, komplett unabhängig sind und ausgewertet werden müssen. Deshalb kommt mir dies in diesem Falle etwas seltsam vor, trotzdem für mehrere Boards die gleiche Tabelle zu nehmen (auch wenn es natürlich geht).


Anmelden zum Antworten