Welche Systeme für hoch skalierbare Webanwendung?

FabianLurz

Bekanntes Mitglied
Hallo,
und zwar würde ich gerne von euch wissen, wie ihr folgendes realisieren würdet:

Ich möchte mit Java eine Schnittstelle zwischen einer Website und den Datenbanken schaffen. Die Website ist in PHP geschrieben und generiert den Inhalt dynamisch. Die Website soll einen AJAX-request an die Java Schnittstelle liefern. Die Java Schnittstelle greift dann auf die Datenbank zu und verarbeitet sehr sehr viele Daten (bzw.: aus der Datenbank werden unter 100 Mio. Einträgen mehrere IDs ausgelesen). Die Schnittstelle muss dann noch mehrere Berechnungen durchführen und soll dann im JSON Format die Daten an die Website übergeben.

Anforderungen:
- Hochskalierbares System (Stichwort Clustering)
- Mehrere tausend Nutzer könnten evtl. gleichzeitig darauf zugreifen
- robust und gut erweiterbar

Um weitere Details zu geben:
Wahrscheinlich haben es schon ein paar mitbekommen- es handelt sich hierbei wieder um die Recommendation Engine für Filme. Die Schnittstelle soll die Korrelationen der Filme erfassen die folgendermaßen in der DB stehen:
item_id1 item_id2 corr
1 2 0.6
(ca. 100 Mio Datensätze)

Dann sollen noch die Korrelationen der Nutzer ausgelesen werden, die folgendermaßen in der DB stehen:
user_id1 user_id2 corr
1 2 0.6
(ca. 1Mio Datensätze)

Anhand der Ratings und Korrelationen sollen dann Empfehlungen entstehen und im JSON-Format zurückgegeben werden. Die genaue Berechnung existiert leider noch nicht, weswegen ich sie hier auch nicht aufzeigen kann :)

Also folgender Ablauf sollte enstehen:

Ajax Request der PHP Seite --> Schnittstelle liest aus DB aus --> Schnittstelle berechnet Empfehlungen --> Schnittstelle gibt Empfehlungen im JSON Format aus

Da dies relativ viel war, hier nochmal die Frage:
Mit welchen Systemen und Komponenten würde man soetwas realisieren? Habe mich schon mit Themen wie Hibernate,Hadoop,Tomcat,GlassFish,Tapestry,JSF,JSP beschäftigt aber komme auf kein zufrieden stellendes Ergebnis (mir ist bewusst, dass FW und Server gemischt sind^^).
Freue mich über Tipps und Anregungen :)
Gruß Fabian
 
Zuletzt bearbeitet:
N

nillehammer

Gast
Zum Container:
Ich sehe anhand Deiner Anforderungen nicht, dass irgendwelche ausgefeilten JEE-Technologien nötig sind, die einen Fully-Blown AppServer wie Glassfish nötig machen. Insofern denke ich, dass ein Tomcat(-Cluster) die richtige Wahl ist.

Die Schnittstelle:
Die Website soll einen AJAX-request an die Java Schnittstelle liefern.
AJAX ist hier das falsche Stichwort. Du sendest REST-full-Requests an die Java-Seite und bekommst von dort JSON-Arrays zurück. Ich würde die Abfrageschnittstelle mit Servlets programmieren. Tapestry,JSF,JSP sind dafür gedacht, die Präsentation aufzubereiten. Das brauchst Du hier nicht. Die "Präsentation" sind ja JSON-Arrays. Für die Generierung von JSON-Arrays evtl eine 3rd-Party lib (kann ich aber nichts zu sagen). Geht aber nofalls sicher auch mit einem StringBuilder.

Der Datenzugriff:
Ich sehe hier keine superkomplizierten Ojektstrukturen, die ein Mappingtool wie Hibernate rechtfertigen würden. Deswegen Plain JDBC mit PreparedStatements unter Verwendung eines Container-Managed Connection-Pools.
 
Zuletzt bearbeitet von einem Moderator:

FabianLurz

Bekanntes Mitglied
Damit bin ich erst mal zufrieden :) Du hast fast alles beantwortet bis auf Skalierbarkeit.
Mein Idee dazu war ein Apache an der Front als Loadbalancer und mehrere Tomcats dahinter...richtig so?
Framework würdest du dann auch gar nicht nutzen?
Gruß Fabian
 

KSG9|sebastian

Top Contributor
Apache mit mod_jk als Loadbalancer, dahinter dann Tomcats im Cluster.
Allerdings ist die Frage wie intensiv deine Geschäftslogik ist und ob überhaupt mehrere Server von Nöten sind.
Um das rauszufinden würde ich einfach mal die vermutete Last simulieren und schauen was der Tomcat macht...
 

FabianLurz

Bekanntes Mitglied
Das mit der Last ist natürlich richtig :) Ich will nur einfach für die meisten Eventualitäten gerüstet sein ;) Super Danke du hast mir sehr weitergeholfen.
 
N

nillehammer

Gast
Damit bin ich erst mal zufrieden Du hast fast alles beantwortet bis auf Skalierbarkeit.
Die Skalierbarkeit wird im Wesentlichen durch die Art der Webanwendung beschränkt. Wenn du viele Daten in der Session hälst, muss diese nämlich im Cluster synchronisiert werden, was die Skalierbarkeit am stärksten behindert. Bei Deinem Anwendungsfall kannst Du aber komplett Sessionless arbeiten. Sodass die Skalierbarkeit sehr gut sein dürfte. Auch die gängigen DBMSe (Oracle, MSSQL, MySql, Postgres) dürften gut zurecht kommen.
Framework würdest du dann auch gar nicht nutzen?
Außer dem bereits angedeuteten Generieren der JSON-Arrays sehe ich nicht, dass das hier irgendwas bringt.

Da Dein PHP-Frontend wahrscheinlich in einem Apachen läuft, würde ich wie schon von anderen gepostet über mod_jk auf die Tomcats Loadbalancen. Wir haben hier eine Installation, wo ein Apache im Backend 8 Tomcats anspricht und das funktioniert recht gut. Ich glaube nicht, dass man viel mehr Tomcat-Knoten braucht (eher weniger).
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
P Feststellen, Welche Classes ich aus einem JAR nutze? Allgemeine Java-Themen 6
H Apache fop -- welche Möglichkeit gibt es um den Fortschritt anzuzeigen (Progressbar) Allgemeine Java-Themen 5
goldmensch Datentypen Welche Methode hat die bessere Performance? Allgemeine Java-Themen 12
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
F Java Web App - welche Technologien? Allgemeine Java-Themen 11
S Welche API? Allgemeine Java-Themen 6
B Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser? Allgemeine Java-Themen 2
K Welche Zertifizierung passt? Allgemeine Java-Themen 10
A Variable, welche Exeption wirft als "Global" deklarieren Allgemeine Java-Themen 13
J Videokonferenz mittel Java ? Welche Möglichkeiten habe ich ? Allgemeine Java-Themen 2
J Welche Layouts benutzt ihr? Allgemeine Java-Themen 2
G Wiedereinstieg, welche Java Version empfehlt ihr Allgemeine Java-Themen 7
M Welche Exceptionbehandlung ist sinnvoll? Allgemeine Java-Themen 3
H NetBeans geotools 15 oder 16 - welche Abhängingkeiten gibt es? Welche Jars brauche ich? Allgemeine Java-Themen 4
S Welche Java Techologien gibt es fürs Frontend Allgemeine Java-Themen 4
S Welche Nutzen bringen Lamda Expressions? Allgemeine Java-Themen 1
M Welche Umgebung und Frameworks für mich als Umsteiger Allgemeine Java-Themen 6
C Welche Styleconvention Allgemeine Java-Themen 0
ruutaiokwu datenstruktur welche sich "im kreis" dreht Allgemeine Java-Themen 26
R LinkedList und Threads - welche Methode ist besser? Allgemeine Java-Themen 2
Landei Welche Klassen fehlen im JDK? Allgemeine Java-Themen 18
P Check, welche Java Version installiert bevor ein Programm ausgeführt wird. Allgemeine Java-Themen 12
G Welche Datenstruktur? Allgemeine Java-Themen 19
I Webseite auslesen (welche mittels Javascript Inhalt einbindet) Allgemeine Java-Themen 4
R Welche waren eure ersten Projekte? Allgemeine Java-Themen 10
G Wie kann man sehen, welche Applikationen mit java arbeiten? Allgemeine Java-Themen 17
L Social Media Webportal -> Welche Technologie (JEE, GWT) Allgemeine Java-Themen 8
J Welche Informationen werden beim Kompilieren gespeichert? Allgemeine Java-Themen 3
S Welche Datenstruktur für verschiedene Sprachen sinnvoll? Allgemeine Java-Themen 2
I Swing Welche Swing Komponente soll ich nehmen? Allgemeine Java-Themen 2
vladimir Welche API für Grafik und Drag&Drop Allgemeine Java-Themen 3
schlingel Plugin-Architektur - Welche nehmen? Allgemeine Java-Themen 6
U Welche 2D-API? Allgemeine Java-Themen 4
S Vererbung: Welche Methode wird verwendet? Allgemeine Java-Themen 9
M Welche Dateiformate kann Java einlesen?? Allgemeine Java-Themen 26
E Neues Projekt - Welche GUI / IDE /Techniken / etc. Allgemeine Java-Themen 14
E Welche Icons für sichtbar /unsichtbar Allgemeine Java-Themen 2
J Welche Lösung für Servlets und JSPs in Eclipse? Allgemeine Java-Themen 5
N Für welche Art von Berechnungen macht JCUDA Sinn? Allgemeine Java-Themen 12
A Welche Exception verwenden? Allgemeine Java-Themen 2
T Welche Art von Hilfe?? Allgemeine Java-Themen 5
N welche run.bat? Allgemeine Java-Themen 3
R Assoziativer Speicher welche Unterschiede? Allgemeine Java-Themen 5
Developer_X Welche Dateien kann Java laden? Allgemeine Java-Themen 9
G Welche Schreibeweise ist richtig Allgemeine Java-Themen 16
ARadauer welche java version wird benutzt Allgemeine Java-Themen 4
E Welche Java-Version kennt isEmpty() ? Allgemeine Java-Themen 2
F Welche dicken Java-Bücher kennt ihr? Allgemeine Java-Themen 31
M Prüfen, welche anderen Programme laufen Allgemeine Java-Themen 5
K [erledigt] JVM welche läuft Allgemeine Java-Themen 9
G synchronized-Sclüsselwort: welche Reihenfolge zum Betreten? Allgemeine Java-Themen 6
E welche standalone Version von Tomcat benutzen? Allgemeine Java-Themen 6
S Welche Speicherung von Daten bei Kalendarfunktion der jtable Allgemeine Java-Themen 7
F welche Datenstruktur? Allgemeine Java-Themen 9
A feststellen, welche Klassen ein Interface implementieren Allgemeine Java-Themen 3
P welche jar enthält was? Allgemeine Java-Themen 5
F Welche Datenstruktur Allgemeine Java-Themen 2
V Welche Oberfläche empfehlt ihr mir? Allgemeine Java-Themen 19
Z Welche Datenstruktur verwende ich h_ier bloss ? Allgemeine Java-Themen 14
S Welche jar's werden wirklich benötigt?` Allgemeine Java-Themen 5
G Dateien löschen welche vor heute erstellt wurden? Allgemeine Java-Themen 7
G Prüfen welche JRE-Version gebraucht wird Allgemeine Java-Themen 19
I Welche Möglichkeiten bietet Java um Records in Dateien zu sp Allgemeine Java-Themen 10
B Drucken - welche Bibliothek favorisiert Ihr? Allgemeine Java-Themen 16
J Welche Daten für Ative-X Funktion? Allgemeine Java-Themen 5
P welche java version für javax.mail? Allgemeine Java-Themen 7
B Erkennen welche Objekte den Heap verbrauchen? Allgemeine Java-Themen 2
B Welche Java-Version? Allgemeine Java-Themen 7
S Welche Javaversion ist in meinem Linux? Allgemeine Java-Themen 2
M 2 Javaversionen welche aktiv? Allgemeine Java-Themen 3
C Datumsfelder auslesen - egal welche Zeitzone Allgemeine Java-Themen 2
F SuppressWarnings("xxx") - welche Möglichkeiten gib Allgemeine Java-Themen 4
R Welche Exception bei write() nehmen Allgemeine Java-Themen 7
reibi JVM fragen welche Apps geladen sind Allgemeine Java-Themen 7
L Welche Collection ist die richtige ? Listen mergen Allgemeine Java-Themen 3
S Welche Datenstruktur passt bei mir? Allgemeine Java-Themen 6
D Welche Datenstruktur? Allgemeine Java-Themen 2
B Grafische Oberfläche - Welche Komponenten? Allgemeine Java-Themen 5
T JMF, welche Codecs gibts, und vor allem, wo? Allgemeine Java-Themen 9
H Welche Scriptsprache verwendet ihr in Java Allgemeine Java-Themen 9
G Welche Referenzsoftware ist in Java geschrieben? Allgemeine Java-Themen 8
P Welche Collection verwenden? Allgemeine Java-Themen 4
OnDemand Zugangsdaten externer Systeme sicher speichern Allgemeine Java-Themen 8
B Darstellung bei verschieden win Systeme spinnt! Allgemeine Java-Themen 2
M Threads & Mehrprozessor/Doppelkern-Systeme Allgemeine Java-Themen 10
B Algorithmus für Arbeit mit fehlenden Listenelementen? Allgemeine Java-Themen 1
kodela Eingabe für TextArray bedingt sperren Allgemeine Java-Themen 3
Karl_Der_Nette_Anfänger Hat wer ne Lösung für verknüpfte Postleitzahlen? (Baum/Wurzel Struktur) Allgemeine Java-Themen 11
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
G KeyListener für JTextField Allgemeine Java-Themen 5
webracer999 Library für Textsuche (z. B. include/exclude, and/or)? Allgemeine Java-Themen 5
I Module-Info für Jar erzeugen Allgemeine Java-Themen 7
krgewb Java-Bibliothek für ONVIF Allgemeine Java-Themen 1
B Simpler Eventlistener für Tastaturtaste bauen? Allgemeine Java-Themen 13
_user_q Eingegebenen Text Zeile für Zeile ausgeben lassen Allgemeine Java-Themen 11
E Key für TOTP Algorythmus(Google Authentificator) Allgemeine Java-Themen 0
S Formel für Sonnenwinkel in ein Programm überführen Allgemeine Java-Themen 11
M pfx-Zertifikat in Tomcat für SSL-Verschlüsselung nutzen Allgemeine Java-Themen 14

Ähnliche Java Themen

Neue Themen


Oben