Google App EngineでのJavaとPythonの選択


161

現在、Google App EngineはPythonとJavaの両方をサポートしています。Javaのサポートはあまり成熟していません。ただし、Javaはライブラリのリストが長く、特にそのコードの記述に使用された言語に関係なくJavaバイトコードをサポートしているようです。どの言語でパフォーマンスとパワーが向上しますか?お知らせ下さい。ありがとうございました!

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

編集: 「力」とは、拡張性が向上し、フレームワークの外部にある利用可能なライブラリを含めることを意味します。ただし、Pythonでは純粋なPythonライブラリのみを使用できます。


現在、Google App Engineは Go(実験的)をサポートしています。それについてあなたの考えは何ですか?
ベンジャミンクルージエ

@pinouchon Goの使用を開始し、GAEの運用環境に展開しました。GOはGAEで非常にうまく機能し、数秒でコンパイルされます。Webフレームワークを賢く選択してください:-)
Michele Giuseppe Fadda

回答:


123

私は偏見があります(Pythonの専門家ですが、Javaはかなり錆びています)が、GAEのPythonランタイムは現在、Javaランタイムよりも高度で開発が進んでいると思います-前者の開発と成熟にはさらに1年かかりました。

もちろん、今後どのように進むかを予測することは困難です。Java側の需要はおそらくより強くなります(特に、Javaだけでなく、JVMの上に他の言語も存在するため、PHPを実行するための方法です)またはApp EngineのRubyコード); ただし、Python App Engineチームには、Pythonの発明者であり、驚くほど強力なエンジニアであるGuido van Rossumが乗っているという利点があります。

柔軟性に関しては、すでに述べたように、Javaエンジンは、Javaだけでなく、さまざまな言語で作成されたJVMバイトコードを実行する可能性を提供します。逆に、Javascriptを嫌うがユーザーのブラウザーでコードを実行する必要がある場合、JavaのGWT(JavaレベルのコーディングからJavascriptを生成する)は、Pythonの代替手段よりもはるかに豊富で高度です(実際には、選択した場合) Pythonでは、この目的のためにJSを自分で作成しますが、Javaを選択した場合、JSの作成を嫌う場合は、GWTを使用できます。

ライブラリに関しては、それはかなり洗浄です-JVMは十分に制限され(スレッドなし、カスタムクラスローダーなし、JNIなし、リレーショナルDBなし)、既存のPythonと同じかそれ以上、既存のJavaライブラリの単純な再利用を妨げますライブラリは、Pythonランタイムに対する同様の制限によって同様に妨げられます。

パフォーマンスの点では、私はそれは洗浄だと思いますが、独自のタスクでベンチマークする必要があります-高度に最適化されたJITベースのJVM実装のパフォーマンスに依存しないでください。環境は非常に異なります(起動コストは、アプリのインスタンスが開始、停止、別のホストに移動されるなど、すべての透過的にあなたに見えるため、頻繁に支払われます-このようなイベントは、通常、JVMよりもPythonランタイム環境の方がはるかに安価です)。

XPath / XSLTの状況(とんでもない...)はどちらの側でも完全に完璧ではありませんが、ためらいがありますが、JVM(明らかに、Saxonの実質的なサブセットを実行できるようにすることができます) 、注意してください)。タイトルにXPathとXSLTが含まれているAppengineの問題ページで問題を開くことは価値があると思います-現在、特定のライブラリーを要求する問題しかありません。 PythonやJavaの場合、私が使用する限り。(特定のライブラリーは既存のコードのマイグレーションを容易にするかもしれませんが、それは「何らかの方法でXSLT変換を迅速に適用する」などのタスクを実行できるほど重要ではありません!-)。(特に言語に依存しない方法で)よく表現されている場合は、このような問題にスターを付けることを知っています。

最後に重要なことですが、Pythonランタイムで実装されているものとJavaランタイムで実装されているものの異なるバージョンのアプリを(同じデータストアを使用して)持つことができ、「デフォルト/アクティブ」とは異なるバージョンにアクセスできることに注意してください。 "明示的なURLを持つもの。そのため、Python Javaの両方のコード(異なるバージョンのアプリで)を使用して同じデータストアを変更し、さらに高い柔軟性を与えることができます(foobar.appspot.comなどの「素敵な」URLは1つしかありません-これはおそらく、ブラウザー上でインタラクティブなユーザーがアクセスする場合にのみ重要だと思います。


9
GWTは主にクライアント側のテクノロジーです。バックエンドがpythonかjavaかに関係なく、GWTを使用できます。GWTに組み込まれているRPCではなくJSONでrpcを実行する必要があるため、構文上の砂糖が少し失われますが、JSが嫌いでpythonを実行する場合は、一見の価値があります:)
Peter Recore

9
GWTに代わるPythonicとしてパジャマ(pyjs.org)があります。GWTがJavaコードに対して行うように、Pythonコードを取得してJavascriptにコンパイルします。
デイブカービー

7
「5年後」の視点を与えるためだけに。Java開発者として、GAEは古いスタックを実行しているように感じます。Java 8のサポートは見つかりません(彼らはJava 6Servlet API 2.5のレガシーJetty 6コンテナーを実行しています)。GAEでのすべてのJavaサポートは2010年のままです。私はGAEのシンプルさとGoogleの強力なサービスが大好きですが、スタックをアップグレードするまで、GAE for Javaを推奨することはできません。
アンソニーAccioly 2014

72

PythonとJavaのパフォーマンスの変化については、このアプリをご覧ください。

http://gaejava.appspot.com/ (編集:謝罪、リンクは今壊れています。しかし、最後に実行されているのを見たときに、次のパラがまだ適用されています)

現在、PythonとJavaでの低レベルAPIの使用は、この単純なテストではJava上のJDOよりも高速です。少なくとも、基になるエンジンが変更された場合、そのアプリはパフォーマンスの変更を反映する必要があります。


5
すべての敬意を払って、私はこのテストが意味をなさないほど単純であると思います。価値があることについて... Java / GAEを使用する場合は、低レベルAPIを使用し、JDOまたはその他のフレームワークを使用しないことをお勧めします。さらに重要なことに、JDOはリレーショナルデータベースで作業している「感覚」を提供します。これは「誤解を招く」可能性があります。
Mo'in Creemers

1
私はJDOを避けることについて同意します。これは、あなたが言及した理由の一部ですが、低レベルよりも遅いためです。(テストが一般的に示すものです。)パフォーマンスの違いがあることをほのめかしているだけなので、特定のタスクに対してJDOやテストを使用しないでください。独自のコードをすべてJDOおよび低レベルAPIからObjectifyに移動しました。いずれにしても、PythonがGAEのパフォーマンスのいとこではないことは明らかです。
Richard Watson、

1
アプリ、内部サーバーエラーがスローされています。
tomdemuyt

1
トムに感謝します。残念ながら、私のアプリではありません。リンクされている可能性のある人にメールを送信しました。
Richard Watson

1
このテスト
Moshe

18

他のプラットフォームでこれらのVMを実行した経験に基づくと、Javaの方がPythonよりもパフォーマンスが優れていると思います。ただし、Pythonのセールスポイントを過小評価しないでください。Python言語はコード行の点ではるかに生産的です。一般的な合意では、Pythonは同等のJavaプログラムの3分の1のコードを必要とし、読みやすさはそのままです。この利点は、明示的なコンパイル手順なしでコードをすぐに実行する機能によって増大します。

利用可能なライブラリに関しては、広範なPythonランタイムライブラリの多くがそのまま(Javaと同様に)動作することがわかります。人気のあるDjango Webフレームワーク(http://www.djangoproject.com/)もAppEngineでサポートされています。

「パワー」に関しては、意味がわかりにくいですが、Pythonは多くの異なるドメイン、特にWebで使用されています。YouTubeはSourceforgeと同様にPythonで記述されています(先週現在)。


Judy2K、ありがとう!権力とは、より多くのことができ、拡張が容易であることを意味します。
ベトナム

15

2013年6月:このビデオは、Googleエンジニアによる非常に良い答えです。

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

TLDR; です:

  • あなたとあなたのチームが最も生産性の高い言語を選択してください
  • プロダクション用に何かをビルドしたい場合:JavaまたはPython(Go以外)
  • 大きなチームと複雑なコードベースがある場合:Java(静的コード分析とリファクタリングのため)
  • すばやく反復する小さなチーム:Python(Javaも問題ありません)

9

PythonとJavaの間で決定する際に考慮すべき重要な質問は、各言語でデータストアをどのように使用するかです(そして、元の質問に対する他のほとんどの角度は、このトピックですでに十分にカバーされています)。

Javaの場合、標準的な方法はJDOまたはJPAを使用することです。これらは移植性には優れていますが、データストアにはあまり適していません。

低レベルのAPIが利用可能ですが、これは日常的な使用には低レベルであるため、サードパーティのライブラリの構築に適しています。

Pythonには、データストアへの簡単で強力なアクセスをアプリケーションに提供するために特別に設計されたAPIがあります。ポータブルではないので素晴らしいですが、GAEにロックされます。

幸い、両方の言語で挙げられている弱点を解決するためのソリューションが開発されています。

Javaの場合、低レベルAPIを使用して、JDO / JPA(IMO)よりもデータストアに非常に適した永続性ライブラリを開発しています。例としては、SienaプロジェクトObjectifyなどがあります。

私は最近Objectifyを使い始めましたが、非常に使いやすく、データストアに適していることがわかりました。その人気の高まりは、優れたサポートにつながりました。たとえば、Objectifyは、Googleの新しいCloud Endpointsサービスによって正式にサポートされています。一方、Objectifyはデータストアでのみ機能しますが、Sienaはデータストアから「影響を受けています」が、SQLデータベースとNoSQLデータストアの両方で動作するように設計されています。

Pythonの場合、GAEからPython GAEデータストアAPIを使用できるようにするための取り組みが行われています。1つの例は、GoogleがSDKで使用するためにリリースしたSQLiteバックエンドですが、これが製品版に成長することを意図しているとは思えません。TyphoonAEのプロジェクトは、おそらくより多くの可能性を秘めているが、私は(私が間違っている場合は、正しい私)それは生産準備ができて、まだどちらかではないと思います。

誰かがこれらの選択肢のいずれかで経験を持っているか、他の人を知っている場合は、コメントに追加してください。個人的には、私はGAEデータストアが本当に好きです-これはAWS SimpleDBを大幅に改善しているので、それを使用していくつかの問題を軽減するこれらの取り組みが成功することを願っています。


7

GAEにはJavaを強くお勧めします。その理由は次のとおりです。

  1. パフォーマンス:JavaはPythonより潜在的に高速です。
  2. Python開発は、サードパーティのライブラリが不足しているというプレッシャーにさらされています。たとえば、Python / GAE用のXSLTはまったくありません。ほとんどすべてのPythonライブラリはCバインディングです(これらはGAEでサポートされていません)。
  3. Memcache API:Java SDKには、Python SDKよりも興味深い機能があります。
  4. データストアAPI:JDOは非常に低速ですが、ネイティブJavaデータストアAPIは非常に高速で簡単です。

現在、Java / GAEを開発に使用しています。


1
@Paul-JDOを使用する方法がない場合、GAEでJavaを使用して永続性を処理する最良の方法を推奨(またはリンクを提供)できますか?
マーク

1
@マーク、遅れてすみません。今のところcode.google.com / p / objectify-appengineが最適です。
ポール

7
ポイント#2と#3の完全な虚偽、および#4が意味をなさない場合は-1。
トリプティク

@ Triptych、Python / GAE用のXSLTプロセッサの名前は何ですか?そして、memcache / python / GAEのCAS(putIfUntouched)操作に相当するものは何ですか?
ポール

1
@Paulあなたが私にそれらのことをあなたの答えの一部と見なしてほしかったなら、あなたはそれらをあなたの答えに含めるべきでした。代わりに、半真理の文字列を含めます。あなたが今考えているコーナーケースに基づいて言語を選択する人はいません。
トリプティク

6

ご存じのとおり、JVMを使用しても、Java言語の使用に限定されません。JVMの言語とリンクのリストは、ここにありますただし、Google App Engineでは、通常のJava SEセットから使用できるクラスのセットが制限されているため、これらの実装のいずれかがApp Engineで使用できるかどうかを調査する必要があります。

編集:あなたはそのようなリストを見つけたと思います

Pythonのパフォーマンスについてコメントすることはできません。ただし、JVMは、実行時にコードを動的にコンパイルおよび最適化する機能を備えているため、パフォーマンスに関して非常に強力なプラットフォームです。

最終的には、パフォーマンスはアプリケーションの機能とコーディング方法によって異なります。これ以上の情報がないため、この領域でこれ以上の指針を示すことは不可能だと思います。


迅速な返信をありがとう、ブライアン。私は、アプリケーションをurlフェッチとXML解析およびXSLT処理に集中するつもりです。ブラウザにHTTPコンテンツを提供することは少なくなります。
ベトナム、

6

私はPython / Django SDKがどれほどクリーンでわかりやすく、問題のないものであるかに驚いています。しかし、さらに多くのJavaScriptを開始する必要がある状況に出くわし始め、GWTやその他のJavaユーティリティを利用したいと思った。私はGAEのJavaチュートリアルの途中までたどり着きました。Eclipseの構成の問題、JREのバージョンの問題、Javaの面倒な複雑さ、そして混乱していて壊れている可能性のあるチュートリアルという問題が次々と発生しました。このサイトと、ここからリンクされている他のサイトをチェックして、私のためにそれを固めました。Pythonに戻ります。JavaScriptの課題を解決するためにパジャマを調べます。


5

私は会話に少し遅れましたが、ここに私の2セントがあります。私は両方の言語に精通しているため、PythonとJavaのどちらを選択するか本当に苦労しました。誰もが知っているように、どちらにも長所と短所があり、要件とプロジェクトに最適に機能するフレームワークを考慮する必要があります。

私はこの種のジレンマで通常そうするように、自分の決定を裏付ける数字を探します。私は多くの理由でPythonを使用することにしましたが、私の場合、転換点である1つのプロットがありました。2014年9月の時点でGitHubで「Google App Engine」を検索すると、次の図が見つかります。

GAE言語統計

これらの数値には多くのバイアスがある可能性がありますが、全体として、GAE Javaリポジトリーの3倍のGAE Pythonリポジトリーがあります。それだけでなく、「星の数」でプロジェクトを一覧表示すると、Pythonプロジェクトの大部分が上部に表示されます(Pythonの方が長いことを考慮に入れる必要があります)。私にとっては、コミュニティの採用とサポート、ドキュメント、オープンソースプロジェクトの可用性を考慮に入れているため、これはPythonの強力な例になります。


3

これは良い質問です。多くの回答から、フェンスの両側で賛否両論の良い見方が得られたと思います。私はPythonとJVMベースのAppEngineの両方を試しました(私の場合、AppEngine用にビルドされたGroovyアプリケーションフレームワークであるGaelykを使用していました)。プラットフォームでのパフォーマンスに関して、私が正面から見つめるまで私が考慮していなかったことの1つは、フェンスのJava側で発生する「要求のロード」の影響です。Groovyを使用する場合、これらの読み込み要求はキラーです。

このトピックについて投稿をまとめました( http://distractable.net/coding/google-appengine-java-vs-python-performance-comparison/)に、問題を回避する方法を見つけたいと思っていますが、そうでない場合、Javaリクエストのコールドスタートによる影響が少なくなるまで、Python + Djangoの組み合わせに戻ると思います。


3

Pythonユーザーと比較してJavaの人々がAppEngineについて不満を言うのを聞くと、Pythonを使用するのははるかにストレスが少ないと思います。


7
フォードの所有者は、ケーニグセグの所有者よりも自分の車に多くの不満を持っていると聞きました。それはなぜでしょうか?
Axarydax 2010

2

Unladen Swallowというプロジェクトもあります。これは、Googleが所有していなくても、Googleが資金を提供しているようです。彼らは、Python 2.6.1バイトコード用のLLVMベースのバックエンドを実装しようとしているため、JITとさまざまな素晴らしいネイティブコード/ GC /マルチコア最適化を使用できます。(良い引用:「私たちは元の仕事をしないことを目指しており、代わりに過去30年間の研究のできるだけ多くを使用しています。」)彼らはCPythonの5倍の高速化を求めています。

もちろん、これはあなたの当面の質問に答えるものではありませんが、(もしあれば)将来の(できれば)「ギャップを埋める」ことを示しています。


1
Unladen Swallowは死んだプロジェクトになり、最後のコミットは1年以上前のものです。
tshepang

2

今日のpythonの優れた点は、他の言語との通信がどれほど優れているかです。たとえば、Pythonとjavaの両方をJythonの同じテーブルに置くことができます。もちろん、jythonはJavaライブラリを完全にサポートしていますが、Pythonライブラリを完全にはサポートしていません。しかし、Javaライブラリをいじくり回したい場合は、これが理想的なソリューションです。追加のコーディングなしでJavaコードと混在させることもできます。

しかし、Python自体でさえ、いくつかの対策を講じています。たとえば、C速度に近いctypesを参照してください。Pythonコーディングの快適さを失うことなく、Cライブラリに直接アクセスできます。Cythonはさらに一歩進んで、cコードとpythonコードを簡単に混在させることができます。または、cまたはc ++を台無しにしたくない場合でも、Pythonでコーディングできますが、静的型変数を使用して、PythonプログラムをCアプリと同じくらい高速にできます。ちなみにCythonは、グーグルによって使用され、サポートされています。

昨日私はpythonがCまたはAssembly(CorePyを参照)をインライン化するためのツールも見つけましたが、それより強力なものはありません。

Pythonは確かに非常に成熟した言語であり、それ自体で立つだけでなく、他の言語と簡単に連携することができます。私は、Pythonが非常に高度で要求の厳しいシナリオでも理想的なソリューションにする理由だと思います。

Pythonを使用すると、C / C ++、Java、.NET、およびその他の多くのライブラリにアクセスでき、追加のコーディングがほぼゼロになり、コーディングを最小化、簡略化、および美化する言語も提供されます。その非常に魅力的な言語です。


問題は、GAEでのJavaとPythonに関するものです。GAEには多くの制限があります。したがって、引数は適用できません。
Daniyar 2010

私は@Daniyarに同意します。この答えは少し(またはおそらく完全に)狂っていますが、私は答えが好きで、これは私が探していたものでした。この知識を共有してくれたKilonに感謝します。これは間違った場所だったかもしれませんが、あなたは確かにいくつかの知識を共有しました。そのための+1と称賛。
zeFree

1

私が開発している種類のアプリにGWTは完全に一致しているように見えますが、Pythonを使用しています。JPAはGAEでかなりめちゃくちゃになっています(たとえば、@ Embeddableやその他の不明瞭な文書化されていない制限はありません)。1週間を費やしてきたので、現時点ではJavaがGAEに適切に対応していないと言えます。


1

考慮すべき1つは、使用するフレームワークです。Java側のすべてのフレームワークがApp Engineで実行されるアプリケーションに適しているわけではありません。これは、従来のJavaアプリサーバーとは多少異なります。

考慮すべき1つのことは、アプリケーションの起動時間です。従来のJava Webアプリでは、これについて考える必要はありません。アプリケーションが起動し、実行されます。起動に5秒または数分かかるかどうかは問題ではありません。App Engineを使用すると、リクエストが受信されたときにのみアプリケーションが開始される状況になる可能性があります。これは、アプリケーションの起動中にユーザーが待機していることを意味します。リザーブドインスタンスなどの新しいGAE機能が役立ちますが、最初に確認してください。

もう1つは、JavaでのGAEの制限の違いです。すべてのフレームワークが、使用できるクラスの制限、またはスレッドが許可されていない、またはローカルファイルシステムにアクセスできないという事実に満足しているわけではありません。これらの問題は、GAEの互換性について調べるだけで簡単に見つけることができます。

また、最近のUIフレームワーク(つまり、Wicket)でのセッションサイズの問題について不満を言う人もいます。一般に、これらのフレームワークは、開発を楽しく、迅速かつ簡単にするために、一定のトレードオフを行う傾向があります。これにより、App Engineの制限との競合が発生する場合があります。

最初はJavaでGAEの開発を始めましたが、これらの理由からPythonに切り替えました。私の個人的な気持ちは、PythonがApp Engine開発に適しているということです。Javaは、たとえばAmazonのElastic Beanstalkのほうが「自宅」にあると思います。

しかし、App Engineでは物事が非常に急速に変化しています。GAEは変化を続けており、GAEの人気が高まるにつれ、その制限を回避するためにフレームワークも変化しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.