dropwizard vs Light-rest-4j vs vertx vs php vs ....

Bitte aktiviere JavaScript!
hey habe da mal ne Frage

früher habe ich anwendungen häufig in php programmiert.
Dabei habe ich auf frameworks verzichtet, da mich das overhead-gedöns ziemlich nervt und mir die anwendung erheblich langsamer macht.
Jetzt möchte ich auf Rendering etc pp auf dem Server verzichten und nur noch einfache JSON-Daten oder "noch weniger"-Daten übertragen. Ka mir fällt gerade das Facebook-übertragungsprotokoll nicht ein (ein binäres protokoll).
Naja auch das habe ich schon in php realisiert gehabt. Ist ein relativ einfaches Unterfangen. Request kommt an, dieser wird dispatcht, vorher vllt. noch analyisiert, auf berechtigungen untersucht, limits gecheckt etc pp. -> dann service ausgeführt und JSON Daten wandern zurück an den User.

Warum jetzt Java?
Ist Java wirklich schneller als das jetzige PHP 7 / HHVM ? - vllt. weiß da jemand von euch was dazu.

Also was mir an Java definitiv gut gefällt ist die Thread-Umsetzung, und das habe ich bei PHP so nicht, zudem der PHP interne state nach jedem Request immer wieder zerstört wird und nicht für längere Ausführungszeiten gedacht ist. Bspw. wenn ich ein Work-Prozess delayen möchte etc pp.

Also habe ich mich mal etwas in der Java-Welt umgesehen und bin so auf sehr leichtgewichtige Rest-Implementierungen (bzw. damit Vergleichbare Dinge) gestossen.


Dropwizard
Light-Rest4-J
vertx
native Jersey Umsetzung?


was würdet ihr davon empfehlen?
was performt am besten/schnelllsten?

Kann es sogar sein dass das Bottleneck eher bei/in der Datenbank liegt?
und es so wurschd ist ob ich eine bestimmte Java-Umsetzung/PHP nehme?

welche Datenbank würdet ihr empfehlen. Habe früher immer mit MySql gearbeitet
Für bestimmte Zwecke habe ich auch die SQL-spezifischen Sperren/Features verwendet.
IS/X.......-Sperren. aber das ist wirklich nur die Ausnahme.

Wie schauts mit NoSql Datenbanken aus?, Habe damit keienrlei Erfahrungen?
Sind die schneller?

Was haltet ihr von der Idee eine SQL-Datenbank zu nehmen und in dieser bspw. für jeden User eine eigene Datenbank anzulegen.
Diese Idee hatte ich auch schon mal als ich noch ca. 14 Jahre oder so alt war(also vor langer Zeit). Mir wurde damals davon abgeraten, weil ich mir dadurch ja dann die Möglichkeit nehme Userübergreifende Queries abzufeuern. Ausserdem sind somit Joins mit Daten ausserhalb entsprechender Userdatenbank schwer möglich. Vllt. würde ich dann ein Art hybrides System verwenden, wo ich dennoch weiterhin, mindestens die join-relevanten Daten in einer einzigen UserTabelle redundant speichere wie z.B die (ID, display-Name, profil-bild-url)

Zum Thema DSGVO:
Einen User zu löschen, wäre somit ziemlich einfach. Datenbank weg. User weg^^
Na gut ich muss dann trotzdem auch noch in Fremd-Datenbanken aufräumen, sollte der User mit anderen Interagiert haben und die Daten in entsprechender anderer Datenbank gespeichert sein.

aber kA, vllt. habt ihr da ja ideen wie man das heutzutage gut umsetzt^^


So back to the framework-topic^^

wenn ich jetzt vertx nehmen würde -ein reactives System- :
Hätte ich dann überhaupt die Vorteile dieses reactiven Systems oder bremst mich eben dieses sogar noch weiter aus wie ein klassisches System?

Der Event-loop sollte ja keineswegs blockiert werden.
Somit müsste ich jeden Datenbankrequest outsourcen und wieder zurückfangen oder so?^^
Und da die Anwendung "eigentlich nur" aus datenbankrequests besteht, also wenige aufwendige Berechnungen..... könnte das doch sogar insgesamt ein Nachteil sein, oder?
(Wie gesagt, ich habe Null-erfahrungen im bezug auf reactive Systeme)

Bei vertx im Speziellen habe ich auch noch gelesen, dass schon locks/Monitore kritisch zu sehen sind.
Wie kann ich dann Thread-Safe mich mit der Aussenwelt synchronisieren?
Wie kann ich dann Datenbankrequests in eine Thread-Safe externe Queue einquenen?^^
Und zurückholen?

Bei https://www.techempower.com/benchmarks/#section=data-r16&hw=ph&test=query

steht vertx ganz oben. Aber auch im Zusammenhang mit postgreesql
Wie unterscheidet sich postgreesql von MySql?
Da vertx ziemlich weit oben steht , performt das doch auch im Zusammenhang von Datenbankrequests nicht all zu schlecht, oder?


Light-rest4j steht auch relativ weit oben.
(ist glaube ich auch reactive aufgebaut, aber das weiß ich gerade nicht so genau)


Dropwizard habe ich da jetzt gar nicht gesehen.
(wo ist das ungefähr einzuordnen)

Dropwizard ist ja irgendwie ein Zusammenschluss von mehreren libs, Frameworks
Es enthält doch bspw. die native Jersey-Umsetzung, sehe ich das richtig?


Welches Framework bzw. leichtgewichtigen Rest-Grund-Server würdet ihr mir empfehlen?

Wenn es mir hauptsächlich um service-orientiertes programmieren geht und ich eigentlich ausser Threads, Listen, einfachen Dingen keine Third-party-libs verwenden möchte

könnte ich das ganze doch auch in c++ programmieren?
Das dürfte noch schneller sein^^
Oder würdet ihr mir davon abraten?^^
Ein negatives Kriterium bei C++ ist, dass man sich schneller Sicherheitslecks in den Server holt^^


Soweit mal zu dem Thema

lg knotenpunkt
 
Ehrlich- mir ist der Post etwas undurchsichtig. Vielleicht hängt das auch mit meiner Abneigung gegen PHP zusammen. Ich habe in einer XAMP-Umgebung als Scriptsprache Perl bevorzugt. Der wesentliche Unterschied für mich zu PHP besteht dabei darin, dass ich die Funktionalität der Anwendung in Module aufteilen kann- vergleichbar mit Klassen und Objekten, die auf der Shell-Ebene laufen und nicht wie bei PHP in einem Browser. Dass ich für die Darstellung ein spezielles Objekt nutzen kann, hat für mich dabei den Vorteil, dass ich mir den HTML-Code, den der Server sendet, anzeigen lassen kann. Diese modulare Trennung habe ich (natürlich) auch bei Java, wo ich bisher gute Erfahrungen mit den Anwendungsservern Glassfisch und Wildfly gemacht habe. Wenn ich in die Beschreibungen dazu reinschaue, dann lassen sich viele Dinge, die du ansprichst da mit Annotationen regeln. Natürlich ist die Anwendung von ORM zum Abspeichern erst etwas gewöhnungsbedürftig. Aber es gibt dazu gute Tutorials.
 
hey,

@AndiE
PHP Funktionalität läuft in einem Browser?
Auch wenn das nicht viel mit dem Topic zu tun hat: Auch in PHP kann ich ORM, Klassen und anderes verwenden.


@mihe7
wenn ich das nur selbst so genau wüssete^^

Naja ein Rest-Server der schnell und leichtgewichtig ist mit einer dafür gut geigneten Datenbank
Dabei möchte ich serviceorientiert/prozedural programmieren und auf globige OO weitestgehend verzichten
(wie ich zu OO stehe, behandeln wir ja gerade in dem Thread hier: https://www.java-forum.org/thema/oo-ist-gescheitert.181473/ also soll jetzt auch nicht weiter von Belange in diesem Faden hier sein^^)

Außerdem brauche ich keine Third-Party-Libs, bzw. Dinge wie z.B Authorisierungsdinge die ich ja in manchen Frameworks von Haus auf habe (bspw. spring)

Jetzt möchte ich einfach erfahren, welches "leichtgewichtige Framework" dafür geeignet ist.
Zu den in meinem Eingangsbeitrag Genannten habe ich ja schon selbst etwas meinen Senf dazu gegeben.
Vllt. kann mir da ja jemand meinen Senf bestätigen, dementieren, erweitern^^

lg knotenpunkt
 
Und wenn ich eh sehr "low-level" programmiere, dann kann ich ja das Framework auswählen das am besten performt^^, warum dann das schlechter Performierende nehmen?^^

Die Frage ist nur ob das ein oder andere Framework überhaupt besser performt.

Zu vertx habe ich ja meine Bedenken geäußert, dass das eventuell sogar schlechter performt wie dropwizard, wenn die Anwendung hauptsächlich aus Datenbankrequests besteht?
 
Zu vertx habe ich ja meine Bedenken geäußert, dass das eventuell sogar schlechter performt wie dropwizard, wenn die Anwendung hauptsächlich aus Datenbankrequests besteht?
Die Datenbank-Requests laufen auch asynchron und sollten den Event-Loop nicht blockieren. Auf deren Seite müsste es ein recht gutes Tut geben.

Bei vertx im Speziellen habe ich auch noch gelesen, dass schon locks/Monitore kritisch zu sehen sind.
Wie kann ich dann Thread-Safe mich mit der Aussenwelt synchronisieren?
Wie kann ich dann Datenbankrequests in eine Thread-Safe externe Queue einquenen?^^
Und zurückholen?
Die Frage ist eher, was meinst du mit "Thread-Safe mit der Aussenwelt synchronisieren"?


Wie unterscheidet sich postgreesql von MySql?
Gibt ein paar Unterschiede in Performance, SQL-Unterstützung und drumherum. Prinzipiell können sie aber das gleiche, was für den jeweiligen Fall besser ist musst du vermutlich ausprobieren.


Wenn es mir hauptsächlich um service-orientiertes programmieren geht und ich eigentlich ausser Threads, Listen, einfachen Dingen keine Third-party-libs verwenden möchte

könnte ich das ganze doch auch in c++ programmieren?
Das dürfte noch schneller sein^^
Oder würdet ihr mir davon abraten?^^
Ein negatives Kriterium bei C++ ist, dass man sich schneller Sicherheitslecks in den Server holt^^
Wenn du sowieso auf alles von dritten verzichtest, kannst du auch gleich C++ nehmen, wenn du die Sprache kannst.
Die Sicherheitslücken kannst du dir auch mit Java auf den Server holen, vor alle wenn du alles selbst umsetzen willst.
 
wenn ich das nur selbst so genau wüssete^^
Äh... Mal andersrum gefragt: wenn ich Dich richtig verstehe, geht es Dir in erster Linie um Geschwindigkeit. Warum? Wie viele tausend Anfragen/s muss das System behandeln?

Abgesehen davon: wenn die Anwendung DB-lastig ist, wird diese in der Regel auch zum Bottleneck. Wenn Du 1s/Request in der DB verschleuderst, brauchst Du Dir über das Framework weniger Gedanken zu machen :)

Analog gilt dies für die Netzwerkschnittstelle. REST/JSON und "high performance" sind jetzt auch nicht unbedingt Begriffe, die unbedingt zusammenpassen.

An Deiner Stelle würde ich mit dem Anfangen, was mir am besten liegt. Nachmessen ist angesagt. Wenn es den Anforderungen genügt, Deckel drauf. Ansonsten darüber nachdenken, wie sich ein Bottleneck beheben lässt.
 
hey,
Die Datenbank-Requests laufen auch asynchron und sollten den Event-Loop nicht blockieren. Auf deren Seite müsste es ein recht gutes Tut geben.
Die Frage ist eher, was meinst du mit "Thread-Safe mit der Aussenwelt synchronisieren"?
Das meine ich damit:
https://vertx.io/docs/vertx-core/java/#golden_rule
und das:
https://vertx.io/docs/vertx-core/java/#blocking_code

sobald ich eben blocking-code auslagere in irgendwelche Thread-Pools, dann muss ich die ja auch wieder zurücksynchronisieren, sprich die Daten die da bearbeitet werden zurück in den event-loop holen..... sonst kann ich ja gleich auf den event-loop verzichten.
Aber wenn jetzt viel "ausgelagert" wird, macht es dann überhaupt noch sinn einen derartigen event-loop zu verwenden?, Kann das dann alles im Gesamten so gar nachteilig sein?

Gibt ein paar Unterschiede in Performance, SQL-Unterstützung und drumherum. Prinzipiell können sie aber das gleiche, was für den jeweiligen Fall besser ist musst du vermutlich ausprobieren.
ok, dankeschön^^

Wenn du sowieso auf alles von dritten verzichtest, kannst du auch gleich C++ nehmen, wenn du die Sprache kannst.
Die Sicherheitslücken kannst du dir auch mit Java auf den Server holen, vor alle wenn du alles selbst umsetzen willst.
Naja die Haupterfahrungen sind schon in PHP und JAVA
C++ kann ich zwar
Ich kann sogar viele advanced konzepte daraus, eben an der Uni gelernt
Erfahrungen habe ich da aber nicht, weil ich da noch nicht selbst irgendwelche eigene Projekte umgesetzt habe.
Und es hat mir dann doch zuviele Stellen, wo man sich nicht 100%ig sicher sein kann dass der Code auch das macht was er machen soll. Exception-safty und so Zeugs, Sichtbarkeitssynchronisation bei Threads (wobei da habe ich mir schon ein paar Papers durchgelesen und es scheint mir dass ich das jetzt 100%ig verstanden habe....... ich setze Dinge immer nur dann ein, wenn ich mir 100%ig sicher bin, wie es funktioniert, von daher auch hier die kritischen Nachfragen. So Wischi-Waschi-Wissen bringt mir nicht viel^^)



Äh... Mal andersrum gefragt: wenn ich Dich richtig verstehe, geht es Dir in erster Linie um Geschwindigkeit. Warum? Wie viele tausend Anfragen/s muss das System behandeln?
Ich sags mal so, wenn ich ein System verwenden kann, das besser performt als ein anderes, warum dann nicht das besser-perfomierende System nehmen
Ok jetzt bitte nicht das Argument bringen: Ich sollte doch dann gleich in Assembler programmieren^^
Von daher suche ich ein sehr gut performierendes System, das serviceorientiert aufgebaut ist^^

Abgesehen davon: wenn die Anwendung DB-lastig ist, wird diese in der Regel auch zum Bottleneck. Wenn Du 1s/Request in der DB verschleuderst, brauchst Du Dir über das Framework weniger Gedanken zu machen
Ja da hast du natürlich recht.
Naja Ein Rest-Call wird halt ein paar DB-Requests erzeugen, diese miteinander verwurschteln und dann ausgeben.
Wenn das Framework direkt richtig gewählt ist, dann muss ich mir später - wenn überhaupt - nur noch Gedanken über eine Optimierung der Datenbank und den Belangen, die mit der Datenbank zu tun haben, machen^^

Analog gilt dies für die Netzwerkschnittstelle. REST/JSON und "high performance" sind jetzt auch nicht unbedingt Begriffe, die unbedingt zusammenpassen.
Wie hiess das von FB. Glaube Thrift oder so. Ja es sollen Browser und native Apps bedient werden.
Und in einer Microservice-Architektur, die Server untereinander auch noch^^

An Deiner Stelle würde ich mit dem Anfangen, was mir am besten liegt. Nachmessen ist angesagt. Wenn es den Anforderungen genügt, Deckel drauf. Ansonsten darüber nachdenken, wie sich ein Bottleneck beheben lässt.
in web-zeugs habe ich hauptsächlich mit php gearbeitet. Aber da php für ein paar Dinge ungeeignet ist, dachte ich , dass ich Java nehme. Und wenn ich eh schon die freie Auswahl habe, dann kann ich doch gleich "das" richtige Framework nehmen, das am besten performt^^



Wenn ich nacher nur 2 Server statt 7 oder so benötige, habe ich für mich als hobbyprojekt doch schon einiges gewonnen^^


lg knotenpunkt
 
sobald ich eben blocking-code auslagere in irgendwelche Thread-Pools, dann muss ich die ja auch wieder zurücksynchronisieren, sprich die Daten die da bearbeitet werden zurück in den event-loop holen..... sonst kann ich ja gleich auf den event-loop verzichten.
Aber wenn jetzt viel "ausgelagert" wird, macht es dann überhaupt noch sinn einen derartigen event-loop zu verwenden?, Kann das dann alles im Gesamten so gar nachteilig sein?
Für Datenbanken: https://vertx.io/blog/using-the-asynchronous-sql-client/

Beim Rest kommt's sehr drauf an, was du vorhast...

Ich sags mal so, wenn ich ein System verwenden kann, das besser performt als ein anderes, warum dann nicht das besser-perfomierende System nehmen
Weil CPU-Stunden billiger sind als Entwickler...

in web-zeugs habe ich hauptsächlich mit php gearbeitet. Aber da php für ein paar Dinge ungeeignet ist, dachte ich , dass ich Java nehme. Und wenn ich eh schon die freie Auswahl habe, dann kann ich doch gleich "das" richtige Framework nehmen, das am besten performt^^

Wenn ich nacher nur 2 Server statt 7 oder so benötige, habe ich für mich als hobbyprojekt doch schon einiges gewonnen^^
Wenn dein Projekt aber nie einen Server benötigt, weil zu viel Zeit mit Suche und Einarbeitung ins neue Framework draufgegangen ist, klingen die 7 Server eindeutig besser ;)

Nimm das, was dir passt.
Hast du irgendwann mit einem Service Performance-Probleme, tausch den Service aus - ist ja ein Vorteil von Microservices, das einfach so zu können...
 
@mrBrown
das für datenbanken schaue ich mir morgen an^^

zum Thema CPU-Stunden..... ist erstmal ein one-man-project^^
Aber auch wenn ich viele Entwickler hätte, könnten die ja was performantes programmieren^^



Wenn dein Projekt aber nie einen Server benötigt, weil zu viel Zeit mit Suche und Einarbeitung ins neue Framework draufgegangen ist, klingen die 7 Server eindeutig besser ;)
Das habe ich schon öfters gehört^^
Ich philosphiere halt gerne^^



Nimm das, was dir passt.
Ja ich würde ja irgendwas nehmen
vertx sieht doch vielversprechend aus, aber auch dropwizard oder light-4j, oder der normale jersey-server

Jetzt wollte ich halt noch fragen, nach welchen kriterien ich jetzt zwischen diesen vieren entscheiden soll.
Und dass ich nicht ewig lange weiter philosphiere, frage ich eben hier im Forum mal nach, um mir meine Entscheidung etwas einfacher zu machen^^

Auch möchte ich wissen ob ich mit vertx nicht komplett falsch liege, wie gesagt ich habe null Erfahrung bei reactiven Systemen^^

Beim Rest kommt's sehr drauf an, was du vorhast...
vllt. haste auch hierzu noch ein paar Beispiele die pros und cons herauskristallieren^^



lg knotenpunkt

PS und gute nacht^^
 
@knotenpunkt, Du weißt nicht, was für eine Anwendung das werden soll, irgendwas mit REST halt. Was Du aber weißt, ist, dass Du das schnellstmögliche Framework und Microservices brauchst und Dir jetzt schon Gedanken darüber machen musst, dass evtl. eine NoSQL-Datenbank die bessere Wahl sein könnte und es evtl. sogar besser wäre, das REST-Zeug mal eben in C++ zu schreiben? Und das alles, weil Du Angst hast, Dein Hobbyprojekt könnte nachher (was auch immer vorher sein mag...) statt 2 dann doch 7 Server brauchen?

Wenn Du unbedingt Benchmarks haben willst, findet Google schnell https://www.techempower.com/benchmarks/#section=data-r16

Jetzt brauchst Du Dir ja nur noch eine Anwendung dafür zu überlegen. :confused:

Aber auch wenn ich viele Entwickler hätte, könnten die ja was performantes programmieren^^
Nein.

Erstens hat niemand gesagt, dass Du etwas nehmen sollst, das nicht performant wäre bzw. dass Du irgendwas nehmen sollst, bei dem von vornherein klar ist, dass es nicht schnell genug wäre.

Ich wüsste nicht, wie Du beurteilen willst, welche REST-Server Deinen Anforderungen nicht genügen, wenn Du keine realistischen Anforderungen hast. Insofern ist es völlig unsinnig, sich darüber Gedanken zu machen: man nehme ein x-beliebiges und teste.

Zweitens, wenn Du viele Entwickler bezahlen müsstest, dann sicher nicht dafür, dass sie das Rad neu erfinden. Bzgl. der Auswahl spielen ganz andere Fragen eine Rolle: Support, Kontinuität, Erfahrungen des Entwicklerteams usw. Performance steht da nicht wirklich an erster Stelle. In der Softwareentwicklung geht es darum, den richtigen Kompromiss zu finden.

Eine weitere Frage wäre: warum Microservices? Aus Spaß an der Freude, weil es Dich interessiert? Oder hat das handfeste Gründe?
 
zum Thema CPU-Stunden..... ist erstmal ein one-man-project^^
Aber auch wenn ich viele Entwickler hätte, könnten die ja was performantes programmieren^^
*könnten* die, Performance ist aber auch nur ein Kriterium von sehr vielen, und nicht das relevantestes ;)

Netflix nutzt für seine Microservices größtenteils Spring - so viel zu Thema "das performanteste nutzen" ;)


Um es anders zu sagen: Nimm das, was du kannst und kennst, wenn du es fertig bekommen willst.
Wenn du viel Zeit und Motivation hast, was neues zu lernen, und das Fertigstellen nicht oberste Priorität ist: Nimm irgendetwas, was dich interessiert, Vertx ist zumindest nie gänzlich verkehrt
 
Wenn Du unbedingt Benchmarks haben willst, findet Google schnell https://www.techempower.com/benchmarks/#section=data-r16
das habe ich in meinem Eingangsbeitrag ja schon selbst verlinkt^^

Eine weitere Frage wäre: warum Microservices? Aus Spaß an der Freude, weil es Dich interessiert? Oder hat das handfeste Gründe?
vllt. jetzt nicht microservices im speziellen, sondern allgemein etwas weg von monolithen systemen hinzu service und aufsplittbaren systemen.


Um es anders zu sagen: Nimm das, was du kannst und kennst, wenn du es fertig bekommen willst.
Wenn du viel Zeit und Motivation hast, was neues zu lernen, und das Fertigstellen nicht oberste Priorität ist: Nimm irgendetwas, was dich interessiert, Vertx ist zumindest nie gänzlich verkehrt
In der Java-Welt kann ich noch kein einziges Framework.
Ich muss mich also so oder so in eines hineinfuchsen.
Und da möchte ich jetzt halt das "beste" nehmen^^


Du schreibst bei vertx: nicht gänzlich verkehrt
Wo könnten da die Probleme entstehen?

Sollte ich nicht doch lieber Dropwizard nehmen?


Ja vllt. kannst du auch meine geannten Frameworks unterinander etwas abwägen, also in der Hinsicht für welchen Zweck welches besser geeignet ist^^


lg knotenpunkt
 
reactive systeme sind doch hauptsächlich für streaming-zeugs gut geeignet
Viele gleichzeitige Connections, bspw. bei nem hochperformanten Spiel/Chat?
Die clients reden direkt mit dem Server miteinander!

ein Rest-Server geht ja auch in die Richtung, wobei hier die clients weniger untereinander miteinander zu tun haben^^, sondern die Clients viel mehr solistisch mit der Datenbank agieren.

Von daher die Frage ob ein reactives System überhaupt taugt, oder gar hinterlich sein könnte?



lg knotenpunkt
 
Und da möchte ich jetzt halt das "beste" nehmen^^
Das beste gibt es nicht.
Es gibt viele gute, die alle unterschiedliche Stärken und Schwächen haben - und welche Stärken und Schwächen eine Rolle sind, oder ob etwas Stärke oder Schwäche ist, hängt sehr vom Kontext ab.


Von daher die Frage ob ein reactives System überhaupt taugt, oder gar hinterlich sein könnte?
vertx steht aber eben nicht Grundlos in dem Ranking oben, mit vielen gleichzeitigen Connections kommen reaktive Systeme gut klar.

Probier es einfach mal aus - *du* musst damit klar kommen, nicht wir ;)
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben