# Berechnungen auslagern



## s-markus (6. Feb 2007)

Hallo alle zusammen,

ich habe ein Applet in dem ein Benutzer verschiedene Sachen auswählen, auf einen Knopf zum Berechnen drücken und sich die Ergebnisse anzeigen lassen kann. Funktioniert alles super!

Was sehr sehr schlecht ist, ist das die Berechnungen so aufwendig sind, dass ich Sie gerne alle zentral auf einem Server rechnen lassen würde. Ein Nutzer mit einem Pentium 3 würde glaub ich schon am Rechenaufwand verzweifeln ...

FRAGE: Mit welchen Mitteln würde man soetwas am effektivsten und einfachsten lösen?

Ich frage das um nicht irgendwelche Sachen langwierig testen zu müssen. Vorallem nachdem ich heute 5 Stunden an einer Tomcat - Installation und dessen Integration in Eclipse unter Linux verbracht habe, dachte ich mir, lieber erstmal fragen ob das überhaupt zum Ziel führen kann.
(Ich hatte quasi an JSP gedacht - weiß aber noch fast überhaupt nichts darüber.)

Viele Grüße,

Markus


----------



## AlArenal (6. Feb 2007)

Über einen Webservice (via SOAP oder XML-RPC). Der Client ruft die passende Methode auf dem Server mit den entsprechenden Parametern auf und wartet auf die hoffentlich baldige Antwort, wertet diese aus und gut iss.


----------



## s-markus (6. Feb 2007)

Erstmal danke,

aber gehen die Ausführungen etwas konkreter?
Also:
Was brauche ich dazu serverseitig?
Kann man mir ein Tutorial oder Beispiel empfehlen?

Viele Grüße,

Markus


----------



## s-markus (7. Feb 2007)

Sorry,

also diese beiden Fragen hätte ich mir auch selbst beantworten können.
Hab mir folgendes druchgelesen:

http://www.torsten-horn.de/techdocs/java-soap-axis.htm

Soweit klingt die Geschichte ganz gut. Entspricht in etwa dem was ich mir so vorgestellt hatte.
Allerdings würde ich trotzdem nochmal kurz fragen:
Brauch man dafür wirklich so einen Webservice?
Das verlangt ja unheimlichen Datenverkehr.
Kann man nicht irgendwie einfacher sagen, dass man die eine oder andere Methode auf dem Rechner rechnen will von dem man das Applet hat?
Vermutlich nicht ... ich frag aber trotzdem mal ...

Viele Grüße,

Markus

p.s. Wie ich das jetzt sehe, hab ich den Beitrag wohl auch in die falsche Rubrik gepostet, "Netzwerkprogrammierung mit Java" wäre eventuell besser gewesen ... sorry.


----------



## SlaterB (7. Feb 2007)

Webservice benutzt Http-Protokoll, ist also kein Hexenwerk,
du kannst alternativ auch jede andere Art von Webserver oder gar einen eigenen Java-Server mit Sockets benutzten und Nachrichten beliebig klein kodieren,
solange ein Http-Header dabei ist und die benötigte Info wieder entschlüsselt werden kann,

Webservice ist wie alle höheren Protokolle allgemein und komfortabel, daher natürlich etwas unfangreicher,

aber dass einem das schon beim ersten Einsatz zuviel ist?..
du unterschätzt vielleicht die Leistungsfähigkeit des Internets,

>100 MB an Daten zu versenden macht natürlich auch heutzutage Probleme,
gerade wenn du einen P3 voraussetzt, vielleicht nur mit Modem 

überlege, ob du die Daten vielleicht für die Übertragung verkleinern kannst ,
z.B. '1-0045' steht für 'dieses Ergebnis ist korrekt, 0045 pro Quadartkilometer', 
keine Ahnung was überhaupt an Daten da sind 

oder verschicke nur Teilberechnungen, die oberen 20% Daten die 80% der Arbeit benötigten,
der Client macht die restlichen 20% Arbeit und erzeugt dabei 80% der (einfachen) Daten


----------



## bronks (7. Feb 2007)

s-markus hat gesagt.:
			
		

> ... FRAGE: Mit welchen Mitteln würde man soetwas am effektivsten und einfachsten lösen? ...


Ist evtl. auch eine Datenbank im Spiel?


----------



## Guest (7. Feb 2007)

SlaterB hat gesagt.:
			
		

> aber dass einem das schon beim ersten Einsatz zuviel ist?..
> du unterschätzt vielleicht die Leistungsfähigkeit des Internets,


Also zuviel ist es mir nicht. Das das unter Umständen sehr viel Arbeit machen kann ist mir klar.
Am Besten ich schreibe nochmal etwas genauer was ich machen möchte:

Das Applet ist eine Art Veranstaltungsplaner.
Man kann im Applet eine Liste mit Veranstaltungen auswählen.
Dann soll diese Liste zum Web-Service geschickt werden (Soweit kein großer Aufwand ...).

Der WebService muss dann folgendes machen:

1. Er rechnet eine Tour die man gehen soll mit einem Optimierungsalgorithmus aus. (Der Teil ist zumindest für den Server sehr rechenaufwendig.)
2. Er generiert ein gif in dem die Tour auf einer Karte eingezeichnet ist. Dieses is ca. 200 kB groß und wird dann zusammen mit der berechnenten Tour im Applet wieder verwendet.

Den 2. Punkt kann ich eventuell im Applet machen lassen, allerdings überlege ich da grade ob das Applet überhaupt Rechte hat ein gif anzulegen ...

Ich kann nur sehr schlecht einschätzen wie groß der Ansturm auf diesen Service sein wird. Aber ich rechne mit sehr vielen Anfragen in kurzer Zeit. Deshalb mach ich mir halt Sorgen ob das dann alles noch so flüssig funktioniert. Aber testen werde ich die Geschichte auf jeden Fall. 



			
				bronks hat gesagt.:
			
		

> Ist evtl. auch eine Datenbank im Spiel?



Vorerst nicht. Aber sollte sich dieser Service in gewisser Weise als nützlich erweisen, dann ist eine Datenbankanbindung sicher sehr sinnvoll. Bisher sind die Daten, also die Liste der Veranstaltungen in einer 250 kB großen etwas rundundanten Textdatei. Allerdings wird zunächst auch nur mit einer Teilliste gearbeitet. (insgesamt wäre die Textdatei wohl ca. 1,5 Mb groß).

Kann man dem Apache-Axis-Web-Service dann auch irgendwie sagen, dass er auf jeden Fall Anfragen nacheinander und auf keinen Fall parallel berarbeiten soll?

Viele Grüße,

Markus


----------



## AlArenal (7. Feb 2007)

Wie stellst du dir das vor?

Soll der Client ne Nummer ziehen wie bei der Agentur für Arbeit und stundenlang warten, bis alle die vor ihm dran sind abgefrühstückt wurden?


----------



## Guest (7. Feb 2007)

Anonymous hat gesagt.:
			
		

> ... Vorerst nicht. Aber sollte sich dieser Service in gewisser Weise als nützlich erweisen, dann ist eine Datenbankanbindung sicher sehr sinnvoll. Bisher sind die Daten, also die Liste der Veranstaltungen in einer 250 kB großen etwas rundundanten Textdatei. Allerdings wird zunächst auch nur mit einer Teilliste gearbeitet. (insgesamt wäre die Textdatei wohl ca. 1,5 Mb groß).


Wenn Du eine Datenbank hättest, dann könnte die Datenbank Deine Berechungen durchführen und Du könntest Dir höchstwahrscheinlich den WS schenken.



			
				Anonymous hat gesagt.:
			
		

> Kann man dem Apache-Axis-Web-Service dann auch irgendwie sagen, dass er auf jeden Fall Anfragen nacheinander und auf keinen Fall parallel berarbeiten soll? ...


Das bekommst Du mit synchronisierten Methoden hin.


----------



## AlArenal (7. Feb 2007)

Anonymous hat gesagt.:
			
		

> Wenn Du eine Datenbank hättest, dann könnte die Datenbank Deine Berechungen durchführen und Du könntest Dir höchstwahrscheinlich den WS schenken.



Das glaube ich weniger. Zwar kann man relativ viel innerhalb einer DB machen, aber für komplexe Berechnungen bietet sich das nicht an und würde auch gegen diverse Prinzipien verstoßen, was die Verlagerung von Anwendungslogik in die DB angeht. Außerdem würde ich in keinem Fall von außen Zugriff auf die Datenbank zulassen - schon bist du wieder beim Webservice.


----------



## s-markus (7. Feb 2007)

> Wie stellst du dir das vor?
> 
> Soll der Client ne Nummer ziehen wie bei der Agentur für Arbeit und stundenlang warten, bis alle die vor ihm dran sind abgefrühstückt wurden?



Keine Ahnung! Klar, ist aber, dass der Client nicht stundenlang warten soll -> Ich versuche ja mittels diesem Forum rauszufinden wie jemand der Ahnung von solchen Anwendungen hat, meine Aufgabe realisieren würde.
Ich glaube das Problem habe ich genug geschildert. 
Das es ein Applet sein muss steht fest (zumindest lässt sich das im Moment nur schlecht ändern) und des es innerhalb kurzer Zeit viele Anfrage für die geschilderten Berechnungen geben wird auch.
Die Frage ist nur, ob es Aussicht auf Erfolg gibt, wenn ich diese Berechnungen per Web-Service ausführen lasse. Wäre die Realisierung in meinem Fall soetwas wie die Standard-Lösung (bitte nicht den Begriff "Standard-Lösung" als Anlass für Grundsatzdiskusionen nehmen   )??

Die Berechnungen von einer Datenbank ausführen zu lassen, is glaub ich keine gute Idee. Es wird ein Graph erzeugt und mittels eines Label-Algorithmus eine Optimallösung berechnet. Mir ist nicht klar, wie das eine Datenbank machen soll?

Viele Grüße,

Markus


----------



## AlArenal (7. Feb 2007)

Wenn du sagst die Berechnung dauert sooo lange und es soll nie mehr als eine gleichzeitig laufen, aber der Client soll nicht "stundenlang" warten, muss dir klar sein, dass du hier irgendwo einen Kompromiss wirst eingehen müssen.

Da wir nicht sagen können wie lange eine einzelne Berechnugn dauert und du es uns auch nciht sagst, können wir da auch kein Gefühl für entwickeln. Technisch ist m.E. SOAP oder XML-RPC die sinnvollste Alternative. So muss man das Rad nicht neu erfinden und kann auf ausgereifte Libs aufbauen.

Wie schnell das Ganze dann ist wirst du ausprobieren müssen und hängt vom Server, der Last, der Anwendungsarchitektur, usw. usf. ab.

Es gibt nichts Gutes, außer man tut es.


----------



## s-markus (7. Feb 2007)

Ok, 

is mir klar dass ihr nicht einschätzen könnt welchen Aufwand diese Berechnungen verursachen. Auf meinem Intel Centrino mit 1,6 GHz dauert keine Berechnung unter 6 Sekunden. Man darf aber auch nicht vergessen, dass der Algorithmus in Java implementiert ist und dass das wohl für derart aufwendige Sachen nicht immer die beste Variante ist. Aber es is halt jetzt erstmal so ...

Ich werde versuchen mich in die Thematik SOAP + Apache + Tomcat hinreichend gut einzuarbeiten und dann einfach mal sehen wie gut das Ergebnis ist. 

Ich bedanke mich erstmal für die Diskussion meines Beitrags, kann aber schon ankündigen, dass es sicher nicht der letzte gewesen sein wird ...   

Viele Grüße und vielen Dank,

Markus


----------



## AlArenal (7. Feb 2007)

Klingt ja wie eine Drohung!


----------

