Auswählen von Java gegen Python in Google App Engine

161

Derzeit unterstützt Google App Engine sowohl Python als auch Java. Die Java-Unterstützung ist weniger ausgereift. Java scheint jedoch eine längere Liste von Bibliotheken zu haben und unterstützt insbesondere Java-Bytecode, unabhängig von den Sprachen, in denen dieser Code geschrieben wurde. Welche Sprache bietet eine bessere Leistung und mehr Leistung? Bitte beraten. Danke dir!

Bearbeiten: http://groups.google.com/group/google-appengine-java/web/will-it-play-in-app-engine?pli=1

Bearbeiten: Mit "Macht" meine ich eine bessere Erweiterbarkeit und Einbeziehung verfügbarer Bibliotheken außerhalb des Frameworks. Python erlaubt jedoch nur reine Python-Bibliotheken.

Viet
quelle
Jetzt unterstützt Google App Engine Go (experimentell). Was ist deine Schwierigkeit daran?
Benjamin Crouzier
@pinouchon Ich habe angefangen, Go zu verwenden, und das in der Produktion auf GAE bereitgestellt. GO funktioniert sehr gut mit GAE und wird in wenigen Sekunden kompiliert. Wählen Sie Ihr Web-Framework mit Bedacht aus :-)
Michele Giuseppe Fadda

Antworten:

123

Ich bin voreingenommen (ein Python-Experte, aber in Java ziemlich verrostet), aber ich denke, die Python-Laufzeit von GAE ist derzeit weiter fortgeschritten und besser entwickelt als die Java-Laufzeit - die erstere hatte schließlich ein zusätzliches Jahr Zeit, um sich zu entwickeln und zu reifen .

Wie die Dinge in Zukunft weitergehen werden, ist natürlich schwer vorherzusagen - die Nachfrage ist wahrscheinlich auf der Java-Seite stärker (zumal es nicht nur um Java geht, sondern auch um andere Sprachen, die über der JVM liegen, also ist es DIE Art, zB PHP auszuführen oder Ruby-Code in App Engine); Das Python App Engine-Team hat jedoch den Vorteil, Guido van Rossum, den Erfinder von Python und einen erstaunlich starken Ingenieur, an Bord zu haben.

In Bezug auf die Flexibilität bietet die Java-Engine, wie bereits erwähnt, die Möglichkeit, JVM-Bytecode auszuführen, der in verschiedenen Sprachen und nicht nur in Java erstellt wurde - wenn Sie sich in einem mehrsprachigen Geschäft befinden, ist dies ein ziemlich großer Vorteil. Umgekehrt, wenn Sie Javascript verabscheuen, aber Code im Browser des Benutzers ausführen müssen, ist Javas GWT (das Javascript für Sie aus Ihrer Java-Codierung zu generieren) weitaus umfangreicher und fortschrittlicher als Python-seitige Alternativen (in der Praxis, wenn Sie dies wünschen Python, Sie werden selbst einige JS für diesen Zweck schreiben, während GWT eine brauchbare Alternative ist, wenn Sie es ablehnen, JS zu schreiben.

In Bezug auf Bibliotheken ist es so ziemlich eine Wäsche - die JVM ist so eingeschränkt (keine Threads, keine benutzerdefinierten Klassenladeprogramme, keine JNI, keine relationale Datenbank), dass die einfache Wiederverwendung vorhandener Java-Bibliotheken genauso oder mehr behindert wird als vorhandenes Python Bibliotheken werden in ähnlicher Weise durch ähnliche Einschränkungen der Python-Laufzeit behindert.

In Bezug auf die Leistung denke ich, dass es eine Wäsche ist, obwohl Sie sich an Ihren eigenen Aufgaben orientieren sollten - verlassen Sie sich nicht auf die Leistung hochoptimierter JIT-basierter JVM-Implementierungen, die ihre großen Startzeiten und Speicher-Footprints aufgrund der App-Engine reduzieren Die Umgebung ist sehr unterschiedlich (Startkosten werden häufig bezahlt, wenn Instanzen Ihrer App gestartet, gestoppt, auf andere Hosts usw. verschoben werden - alles für Sie - solche Ereignisse sind in Python-Laufzeitumgebungen normalerweise viel billiger als in JVMs).

Die XPath / XSLT-Situation (um euphemistisch zu sein ...) ist auf beiden Seiten nicht gerade perfekt, seufz, obwohl ich denke, dass es in der JVM ein bisschen weniger schlimm ist (wo anscheinend erhebliche Teilmengen von Saxon zum Laufen gebracht werden können mit einiger Sorgfalt). Ich denke, es lohnt sich, Probleme auf der Seite " Appengine Issues " mit XPath und XSLT in ihren Titeln zu eröffnen. Derzeit gibt es nur Probleme, bei denen nach bestimmten Bibliotheken gefragt wird, und das ist kurzsichtig: Es ist mir egal, wie ein gutes XPath / XSLT implementiert wird. für Python und / oder für Java, solange ich es verwenden kann. (Bestimmte Bibliotheken können die Migration von vorhandenem Code erleichtern, aber das ist weniger wichtig, als Aufgaben wie "XSLT-Transformation schnell anwenden" auf EINIGE Weise auszuführen! -). Ich weiß, dass ich ein solches Thema in der Hauptrolle spielen würde, wenn es gut formuliert wäre (insbesondere sprachunabhängig).

Last but not least: Denken Sie daran, dass Sie unterschiedliche Versionen Ihrer App (mit demselben Datenspeicher) verwenden können, von denen einige mit der Python-Laufzeit implementiert sind, andere mit der Java-Laufzeit, und dass Sie auf Versionen zugreifen können, die sich von "default / active" unterscheiden "eine mit expliziten URLs. Sie können also sowohl Python- als auch Java-Code (in verschiedenen Versionen Ihrer App) verwenden und denselben Datenspeicher ändern, wodurch Sie noch mehr Flexibilität erhalten (obwohl nur einer die "nette" URL wie foobar.appspot.com hat - Das ist wahrscheinlich nur für den Zugriff interaktiver Benutzer auf Browsern wichtig, stelle ich mir vor ;-).

Alex Martelli
quelle
9
GWT ist in erster Linie eine clientseitige Technologie - Sie können sie verwenden, unabhängig davon, ob Ihr Backend Python oder Java ist. Sie verlieren ein bisschen syntaktischen Zucker, wenn Sie rpc über JSON anstatt über GWTs eingebauten RPC machen müssen, aber wenn Sie JS hassen und Python machen, ist es immer noch einen Blick wert :)
Peter Recore
9
Es gibt Pyjamas ( pyjs.org ) als pythonische Alternative zu GWT - es wird Python-Code verwenden und in Javascript kompilieren, genau wie GWT für Java-Code.
Dave Kirby
7
Nur um eine "5 Jahre später" Perspektive zu geben. Als Java-Entwickler habe ich das Gefühl, dass GAE einen veralteten Stack ausführt. Sie werden keine Java 8-Unterstützung finden ( sie führen Java 6 sowie einen älteren Jetty 6-Container mit Servlet-API 2.5 aus ), insgesamt bleibt die Java-Unterstützung in GAE auch 2010 bestehen. Obwohl ich die Einfachheit von GAE und Google Powerful Services liebe, Ich kann GAE für Java erst empfehlen, wenn der Stack aktualisiert wurde.
Anthony Accioly
72

In dieser App finden Sie Änderungen in der Python- und Java-Leistung:

http://gaejava.appspot.com/ (Bearbeiten: Entschuldigung, Link ist jetzt defekt. Aber der folgende Absatz gilt immer noch, als ich ihn zuletzt laufen sah.)

Derzeit sind Python und die Verwendung der Low-Level-API in Java für diesen einfachen Test schneller als JDO in Java . Zumindest wenn sich die zugrunde liegende Engine ändert, sollte diese App Leistungsänderungen widerspiegeln.

Richard Watson
quelle
5
Bei allem Respekt finde ich diesen Test einfach genug, um bedeutungslos zu sein. Für das, was es wert ist ... Wenn Sie Java / GAE verwenden, empfehle ich die Verwendung der Low-Level-API und vermeiden Sie JDO oder ein anderes Framework. Noch wichtiger ist, dass JDO Ihnen das Gefühl vermittelt, mit einer relationalen Datenbank zu arbeiten, was irreführend sein kann.
Mo'in Creemers
1
Ich bin damit einverstanden, JDO zu vermeiden, teilweise aus dem von Ihnen genannten Grund, aber auch, weil es langsamer als niedrig ist. (Was der Test im Allgemeinen zeigt.) Es weist lediglich darauf hin, dass es Leistungsunterschiede gibt. Verwenden Sie daher entweder kein JDO oder testen Sie nicht für Ihre spezifische Aufgabe. Ich habe meinen gesamten Code von JDO und der Low-Level-API nach Objectify verschoben. Und auf jeden Fall zeigt es auch, dass Python sicherlich nicht der schlechte Cousin der Leistung bei GAE ist.
Richard Watson
1
Ihre App löst einen internen Serverfehler aus.
Tomdemuyt
1
Danke Tom. Leider nicht meine App. Habe jemanden verschickt, der verlinkt sein könnte.
Richard Watson
1
Ich würde gerne sehen, wie objektiviert Vergleiche in diesem Test
Moshe Shaham
18

Aufgrund der Erfahrung mit der Ausführung dieser VMs auf anderen Plattformen würde ich sagen, dass Java wahrscheinlich mehr Leistung bringt als Python. Unterschätzen Sie jedoch nicht die Verkaufsargumente von Python: Die Python-Sprache ist in Bezug auf Codezeilen viel produktiver - die allgemeine Übereinstimmung ist, dass Python ein Drittel des Codes eines äquivalenten Java-Programms benötigt und dabei mindestens lesbar bleibt. Dieser Vorteil wird durch die Möglichkeit multipliziert, Code ohne expliziten Kompilierungsschritt sofort auszuführen.

In Bezug auf die verfügbaren Bibliotheken werden Sie feststellen, dass ein Großteil der umfangreichen Python-Laufzeitbibliothek sofort funktioniert (ebenso wie die von Java). Das beliebte Django-Webframework ( http://www.djangoproject.com/ ) wird auch von AppEngine unterstützt.

In Bezug auf "Power" ist es schwierig zu wissen, was Sie meinen, aber Python wird in vielen verschiedenen Bereichen verwendet, insbesondere im Web: YouTube ist in Python geschrieben, ebenso wie Sourceforge (Stand letzte Woche).

Judy2K
quelle
Vielen Dank, Judy2K! Mit Macht meine ich, kann mehr Dinge tun und ist einfach zu erweitern.
Viet
15

Juni 2013: Dieses Video ist eine sehr gute Antwort eines Google-Ingenieurs:

http://www.youtube.com/watch?v=tLriM2krw2E

TLDR; ist:

  • Wählen Sie die Sprache aus, mit der Sie und Ihr Team am produktivsten sind
  • Wenn Sie etwas für die Produktion erstellen möchten: Java oder Python (nicht Go)
  • Wenn Sie ein großes Team und eine komplexe Codebasis haben: Java (aufgrund statischer Code-Analyse und Refactoring)
  • Kleine Teams, die schnell iterieren: Python (obwohl Java auch in Ordnung ist)
Bijan
quelle
9

Eine wichtige Frage, die bei der Entscheidung zwischen Python und Java berücksichtigt werden muss, ist, wie Sie den Datenspeicher in jeder Sprache verwenden (und die meisten anderen Aspekte der ursprünglichen Frage wurden in diesem Thema bereits recht gut behandelt).

Für Java ist die Standardmethode die Verwendung von JDO oder JPA. Diese eignen sich hervorragend für die Portabilität, sind jedoch für den Datenspeicher nicht sehr gut geeignet.

Eine Low-Level-API ist verfügbar, diese ist jedoch für den täglichen Gebrauch zu niedrig - sie eignet sich besser zum Erstellen von Bibliotheken von Drittanbietern.

Für Python gibt es eine API, die speziell entwickelt wurde, um Anwendungen einen einfachen, aber leistungsstarken Zugriff auf den Datenspeicher zu ermöglichen. Es ist großartig, außer dass es nicht tragbar ist, sodass Sie an GAE gebunden sind.

Glücklicherweise werden Lösungen für die für beide Sprachen aufgeführten Schwachstellen entwickelt.

Für Java wird die Low-Level-API verwendet, um Persistenzbibliotheken zu entwickeln, die für den Datenspeicher viel besser geeignet sind als JDO / JPA (IMO). Beispiele sind das Siena-Projekt und Objectify .

Ich habe vor kurzem angefangen, Objectify zu verwenden, und finde, dass es sehr einfach zu verwenden und für den Datenspeicher gut geeignet ist, und seine wachsende Beliebtheit hat zu einer guten Unterstützung geführt. Beispielsweise wird Objectify offiziell vom neuen Cloud Endpoints-Dienst von Google unterstützt. Auf der anderen Seite funktioniert Objectify nur mit dem Datenspeicher, während Siena vom Datenspeicher "inspiriert" ist, jedoch für die Verwendung mit einer Vielzahl von SQL-Datenbanken und NoSQL-Datenspeichern ausgelegt ist.

Für Python werden Anstrengungen unternommen, um die Verwendung der Python GAE-Datenspeicher-API außerhalb der GAE zu ermöglichen. Ein Beispiel ist das SQLite-Backend, das Google für die Verwendung mit dem SDK freigegeben hat, aber ich bezweifle, dass dies zu etwas Produktionsfähigem werden soll. Das TyphoonAE- Projekt hat wahrscheinlich mehr Potenzial, aber ich glaube auch nicht, dass es noch produktionsbereit ist (korrigieren Sie mich, wenn ich falsch liege ).

Wenn jemand Erfahrung mit einer dieser Alternativen hat oder andere kennt, fügen Sie diese bitte in einem Kommentar hinzu. Persönlich mag ich den GAE-Datenspeicher sehr - ich finde, dass er eine erhebliche Verbesserung gegenüber der AWS SimpleDB darstellt - und wünsche mir daher den Erfolg dieser Bemühungen, um einige der Probleme bei der Verwendung zu verringern.

Tom
quelle
7

Ich empfehle Java für GAE nachdrücklich und hier ist der Grund:

  1. Leistung: Java ist möglicherweise schneller als Python.
  2. Die Python-Entwicklung steht unter dem Druck eines Mangels an Bibliotheken von Drittanbietern. Zum Beispiel gibt es überhaupt kein XSLT für Python / GAE. Fast alle Python-Bibliotheken sind C-Bindungen (und diese werden von GAE nicht unterstützt).
  3. Memcache-API: Java SDK bietet interessantere Funktionen als Python SDK.
  4. Datenspeicher-API: JDO ist sehr langsam, aber die native Java-Datenspeicher-API ist sehr schnell und einfach.

Ich verwende Java / GAE gerade in der Entwicklung.

Paul
quelle
1
@Paul - Könnten Sie den besten Weg empfehlen (oder Links dazu geben), um mit Persistenz mit Java auf GAE umzugehen, wenn JDO nicht der richtige Weg ist?
Mark
1
@ Mark, es tut mir leid für die Verzögerung. Ich denke, code.google.com/p/objectify-appengine ist derzeit die beste Wahl.
Paul
7
-1 für die völligen Unwahrheiten in den Punkten 2 und 3 und für 4, die keinen Sinn ergeben.
Triptychon
@Triptych, lassen Sie mich wissen, wie der XSLT-Prozessor für Python / GAE heißt. Und was entspricht der CAS-Operation (putIfUntouched) für memcache / python / GAE?
Paul
1
@Paul Wenn Sie wollten, dass ich diese Dinge als Teil Ihrer Antwort betrachte, hätten Sie sie in Ihre Antwort aufnehmen sollen. Stattdessen fügen Sie eine Reihe von Halbwahrheiten hinzu. Niemand wählt eine Sprache basierend auf den Eckfällen, die Sie sich gerade einfallen lassen.
Triptychon
6

Wie Sie bereits festgestellt haben, beschränkt sich die Verwendung einer JVM nicht auf die Verwendung der Java-Sprache. Eine Liste der JVM-Sprachen und -Links finden Sie hier . Die Google App Engine beschränkt jedoch die Anzahl der Klassen, die Sie aus der normalen Java SE-Gruppe verwenden können, und Sie sollten untersuchen, ob eine dieser Implementierungen in der App Engine verwendet werden kann.

EDIT: Ich sehe, Sie haben eine solche Liste gefunden

Ich kann die Leistung von Python nicht kommentieren. Die JVM ist jedoch eine sehr leistungsfähige Plattform, da sie in der Lage ist, Code während der Laufzeit dynamisch zu kompilieren und zu optimieren.

Letztendlich hängt die Leistung davon ab, was Ihre Anwendung tut und wie Sie sie codieren. In Ermangelung weiterer Informationen ist es meines Erachtens nicht möglich, in diesem Bereich weitere Hinweise zu geben.

Brian Agnew
quelle
Danke für die schnelle Antwort, Brian. Ich beabsichtige, die Anwendung auf das Abrufen von URLs und das Parsen von XML sowie die XSLT-Verarbeitung zu konzentrieren. Es wird weniger HTTP-Inhalte für Browser bereitstellen.
Viet
6

Ich war erstaunt, wie sauber, unkompliziert und problemlos das Python / Django SDK ist. Ich geriet jedoch in Situationen, in denen ich mehr JavaScript erstellen musste, und dachte, ich möchte möglicherweise die Vorteile von GWT und anderen Java-Dienstprogrammen nutzen. Ich habe gerade die Hälfte des GAE Java-Tutorials hinter mir und hatte ein Problem nach dem anderen: Eclipse-Konfigurationsprobleme, JRE-Versionitis, die verblüffende Komplexität von Java und ein verwirrendes und möglicherweise kaputtes Tutorial. Das Auschecken dieser Seite und anderer von hier verlinkter Seiten hat sie für mich gewonnen. Ich gehe zurück zu Python und werde mir Pyjamas ansehen, um bei meinen JavaScript-Herausforderungen zu helfen.

mjhm
quelle
5

Ich bin etwas spät dran, aber hier sind meine zwei Cent. Es fiel mir wirklich schwer, mich zwischen Python und Java zu entscheiden, da ich mich in beiden Sprachen gut auskenne. Wie wir alle wissen, gibt es für beide Vor- und Nachteile, und Sie müssen Ihre Anforderungen und die Rahmenbedingungen berücksichtigen, die für Ihr Projekt am besten geeignet sind.

Wie ich es normalerweise in solchen Dilemmata mache, suche ich nach Zahlen, um meine Entscheidung zu unterstützen. Ich habe mich aus vielen Gründen für Python entschieden, aber in meinem Fall gab es eine Handlung, die den Wendepunkt darstellte. Wenn Sie ab September 2014 in GitHub nach "Google App Engine" suchen , finden Sie folgende Abbildung:

GAE Sprachstatistik

Diese Zahlen können viele Verzerrungen aufweisen, aber insgesamt gibt es dreimal mehr GAE Python-Repositorys als GAE Java-Repositorys. Nicht nur das, aber wenn Sie die Projekte nach der "Anzahl der Sterne" auflisten, werden Sie sehen, dass ein Großteil der Python-Projekte oben angezeigt wird (Sie müssen berücksichtigen, dass Python schon länger existiert). Für mich ist dies ein starkes Argument für Python, da ich die Akzeptanz und Unterstützung der Community, die Dokumentation und die Verfügbarkeit von Open-Source-Projekten berücksichtige.

Jaime Ivan Cervantes
quelle
3

Es ist eine gute Frage, und ich denke, viele der Antworten haben auf beiden Seiten des Zauns gute Vor- und Nachteile gezeigt. Ich habe sowohl Python- als auch JVM-basierte AppEngine ausprobiert (in meinem Fall habe ich Gaelyk verwendet , ein für AppEngine entwickeltes Groovy-Anwendungsframework). Wenn es um die Leistung auf der Plattform geht, war eine Sache, an die ich nicht gedacht hatte, bis sie mich ins Gesicht starrte, die Implikation von "Ladeanforderungen", die auf der Java-Seite des Zauns auftreten. Bei Verwendung von Groovy sind diese Ladeanfragen ein Killer.

Ich habe einen Beitrag zum Thema zusammengestellt ( http://distractable.net/coding/google-appengine-java-vs-python-performance-comparison/ ) und hoffe, einen Weg zu finden, um das Problem zu umgehen, aber Wenn nicht, werde ich wahrscheinlich zu einer Python + Django-Kombination zurückkehren, bis der Kaltstart von Java-Anfragen weniger Auswirkungen hat.

Damon Oehlman
quelle
3

Basierend darauf, wie oft sich Java-Leute im Vergleich zu Python-Benutzern über AppEngine beschweren, würde ich sagen, dass die Verwendung von Python viel weniger stressig ist.

Noah McIlraith
quelle
7
Ich habe gehört, dass Ford-Besitzer sich viel mehr über ihre Autos beschweren als Koenigsegg-Besitzer. Warum könnte das sein?
Axarydax
2

Es gibt auch das Projekt Unladen Swallow , das anscheinend von Google finanziert wird, wenn nicht von Google. Sie versuchen, ein LLVM-basiertes Backend für Python 2.6.1-Bytecode zu implementieren, damit sie eine JIT und verschiedene nette native Code- / GC- / Multi-Core-Optimierungen verwenden können. (Nettes Zitat: "Wir streben danach, keine Originalarbeit zu leisten, sondern so viel wie möglich aus den letzten 30 Jahren der Forschung zu verwenden.") Sie suchen nach einer 5-fachen Beschleunigung von CPython.

Dies beantwortet natürlich nicht Ihre unmittelbare Frage, sondern deutet auf ein "Schließen der Lücke" (falls vorhanden) in der Zukunft (hoffentlich) hin.

Synchronisation
quelle
1
Unladen Swallow ist jetzt ein totes Projekt und das letzte Commit ist über ein Jahr alt .
Tshepang
2

Das Schöne an Python ist heutzutage, wie gut es mit anderen Sprachen kommuniziert. Beispielsweise können Sie mit Jython sowohl Python als auch Java in derselben Tabelle haben. Natürlich unterstützt jython, obwohl es Java-Bibliotheken vollständig unterstützt, Python-Bibliotheken nicht vollständig. Aber es ist eine ideale Lösung, wenn Sie sich mit Java-Bibliotheken anlegen möchten. Sie können es sogar mit Java-Code ohne zusätzliche Codierung mischen.

Aber auch Python selbst hat einige Schritte vorgezogen. Siehe ctypes zum Beispiel, in der Nähe der C-Geschwindigkeit, direkte Zugriffe auf C-Bibliotheken, ohne den Komfort der Python-Codierung zu verlassen. Cython geht noch einen Schritt weiter und ermöglicht das einfache Mischen von C-Code mit Python-Code. Selbst wenn Sie sich nicht mit C oder C ++ anlegen möchten, können Sie weiterhin in Python codieren, aber statische Variablen verwenden, wodurch Ihre Python-Programme so schnell wie C-Apps werden . Cython wird übrigens von Google verwendet und unterstützt.

Gestern habe ich sogar Tools für Python gefunden, um C oder sogar Assembly (siehe CorePy) zu integrieren. Sie können nicht leistungsfähiger sein.

Python ist sicherlich eine sehr ausgereifte Sprache, die nicht nur auf sich selbst steht, sondern auch problemlos mit jeder anderen Sprache zusammenarbeiten kann. Ich denke, das macht Python auch in sehr fortgeschrittenen und anspruchsvollen Szenarien zu einer idealen Lösung.

Mit Python können Sie auf C / C ++, Java, .NET und viele andere Bibliotheken zugreifen, ohne dass zusätzliche Codierung erforderlich ist. Dadurch erhalten Sie auch eine Sprache, die die Codierung minimiert, vereinfacht und verschönert. Es ist eine sehr verlockende Sprache.

Kilon
quelle
Die Frage bezieht sich auf Java vs Python auf GAE, das viele Einschränkungen hat. Daher sind Ihre Argumente nicht anwendbar.
Daniyar
Ich stimme @Daniyar zu, dass diese Antwort etwas (oder vielleicht völlig) vom Takt abweicht, aber ich mag die Antwort und das war etwas, wonach ich gesucht habe. Vielen Dank an Kilon für das Teilen dieses Wissens. Vielleicht war dies der falsche Ort, aber Sie haben sicherlich Wissen ausgetauscht. +1 und ein großes Lob dafür.
ZeFree
1

Mit Python weg, obwohl GWT perfekt zu der Art von App passt, die ich entwickle. JPA ist in Bezug auf GAE ziemlich durcheinander (z. B. keine @Embeddable und andere obskure, nicht dokumentierte Einschränkungen). Nachdem ich eine Woche verbracht habe, kann ich feststellen, dass sich Java im Moment bei GAE einfach nicht richtig anfühlt.

yanchenko
quelle
1

Ein zu berücksichtigender Gedanke sind die Frameworks, die Sie verwenden möchten. Nicht alle Frameworks auf Java-Seite eignen sich gut für Anwendungen, die auf App Engine ausgeführt werden, was sich etwas von herkömmlichen Java-App-Servern unterscheidet.

Eine zu berücksichtigende Sache ist die Startzeit der Anwendung. Bei herkömmlichen Java-Web-Apps müssen Sie nicht wirklich darüber nachdenken. Die Anwendung wird gestartet und dann einfach ausgeführt. Es spielt keine Rolle, ob der Start 5 Sekunden oder einige Minuten dauert. Mit App Engine kann es vorkommen, dass die Anwendung erst gestartet wird, wenn eine Anforderung eingeht. Dies bedeutet, dass der Benutzer wartet, während Ihre Anwendung gestartet wird. Neue GAE-Funktionen wie reservierte Instanzen helfen hier, aber überprüfen Sie zuerst.

Eine andere Sache sind die verschiedenen Einschränkungen, die GAE für Java hat. Nicht alle Frameworks sind zufrieden mit den Einschränkungen, welche Klassen Sie verwenden können, oder der Tatsache, dass Threads nicht zulässig sind oder dass Sie nicht auf das lokale Dateisystem zugreifen können. Diese Probleme sind wahrscheinlich leicht herauszufinden, wenn Sie nur über die GAE-Kompatibilität googeln.

Ich habe auch einige Leute gesehen, die sich über Probleme mit der Sitzungsgröße in modernen UI-Frameworks beschwert haben (nämlich Wicket). Im Allgemeinen tendieren diese Frameworks dazu, bestimmte Kompromisse einzugehen, um die Entwicklung unterhaltsam, schnell und einfach zu gestalten. Manchmal kann dies zu Konflikten mit den Einschränkungen der App Engine führen.

Ich begann zunächst mit der Entwicklung von GAE mit Java, wechselte dann aber aus diesen Gründen zu Python. Mein persönliches Gefühl ist, dass Python eine bessere Wahl für die App Engine-Entwicklung ist. Ich denke, Java ist mehr "zu Hause", zum Beispiel auf Amazon Elastic Beanstalk.

ABER mit App Engine ändern sich die Dinge sehr schnell. GAE ändert sich selbst und mit zunehmender Beliebtheit ändern sich auch die Frameworks, um seine Grenzen zu umgehen.

Juha Palomäki
quelle