programing tip

Google App Engine에서 Java 및 Python 선택

itbloger 2020. 6. 2. 08:29
반응형

Google App Engine에서 Java 및 Python 선택


현재 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

편집 : "강력한"이란 프레임 워크 외부에서 사용 가능한 라이브러리의 확장 성과 포함 성이 향상되었음을 의미합니다. 파이썬은 순수한 파이썬 라이브러리 만 허용합니다.


나는 편견이 있지만 (파이썬 전문가이지만 Java에서는 꽤 녹슨 편이지만) GAE의 Python 런타임은 현재 Java 런타임보다 더 발전되고 발전된 것으로 생각합니다. .

앞으로 진행될 방법은 물론 예측하기 어렵습니다. 자바에 대한 수요는 아마도 더 강력 할 것입니다 (특히 Java에 대한 것이 아니라 JVM 위에 다른 언어도 있기 때문에 PHP를 실행하는 방법입니다). 또는 App Engine의 Ruby 코드); 그러나 Python App Engine 팀은 Python의 발명가이자 놀랍도록 강력한 엔지니어 인 Guido van Rossum에 탑승 할 수 있다는 이점이 있습니다.

유연성면에서 이미 언급했듯이 Java 엔진은 Java가 아닌 다른 언어로 작성된 JVM 바이트 코드를 실행할 수있는 가능성을 제공합니다. 여러 언어 상점에서 상당히 긍정적입니다. 반대로, Javascript를 혐오하지만 사용자 브라우저에서 일부 코드를 실행해야하는 경우 Java의 GWT (Java 레벨 코딩에서 Javascript 생성)는 Python 측 대안 (실제로 원하는 경우 파이썬, 당신은이 목적을 위해 JS를 직접 작성할 것입니다 .Java를 선택하면 JS를 싫어하는 경우 사용할 수있는 대안입니다.)

라이브러리의 관점에서 보면, 워시 (wash)는 상당히 복잡합니다. JVM은 기존의 파이썬보다 기존 Java 라이브러리의 단순한 재사용을 방해 할만큼 충분히 제한되어 있습니다 (스레드, 사용자 정의 클래스 로더, JNI, 관계형 DB 없음). 라이브러리는 Python 런타임에 대한 유사한 제한으로 인해 방해를받습니다.

성능 측면에서, 당신은 자신의 작업에 대한 벤치 마크를해야하지만 세척이라고 생각합니다. 응용 프로그램 엔진 때문에 큰 시작 시간과 메모리 공간을 할인하는 고도로 최적화 된 JIT 기반 JVM 구현의 성능에 의존하지 마십시오 환경이 매우 다릅니다 (앱의 인스턴스가 시작, 중지, 다른 호스트로 이동하는 등 모든 것이 당신에게 명백하게 시작되므로 종종 시작 비용이 지불됩니다. 이러한 이벤트는 일반적으로 JVM보다 Python 런타임 환경에서 훨씬 저렴합니다).

XPath / XSLT 상황 (어구 론적 인 ...)은 양쪽에서 정확히 완벽하지는 않지만 JVM에서 조금 덜 나쁘다고 생각하지만 (실제로 Saxon의 실질적인 하위 집합을 실행할 수있는 곳) , 조심스럽게). AppPath Issues 페이지에서 제목에 XPath 및 XSLT를 사용하여 문제를 해결할 가치가 있다고 생각합니다. 지금은 특정 라이브러리를 요구하는 문제 만 있으며, 근시안적입니다. 좋은 XPath / XSLT가 어떻게 구현되는지는 중요하지 않습니다. 파이썬이나 자바를 사용하는 한. (특정 라이브러리는 기존 코드의 마이그레이션을 용이하게 할 수 있지만 "XSLT 변환을 신속하게 적용"과 같은 작업을 수행하는 것보다 덜 중요합니다!-). 잘 말하면 (특히 언어 독립적 인 방식으로) 그런 문제에 별표를 표시한다는 것을 알고 있습니다.

마지막으로 : 동일한 데이터 스토어를 사용하여 다른 버전의 앱 (파이썬 런타임으로 구현 된 버전, Java 런타임으로 구현 된 버전)을 가질 수 있으며 "default / active와 다른 버전에 액세스 할 수 있음을 기억하십시오. 하나는 명시 적 URL입니다. 따라서 다른 버전의 앱에서 Python Java 코드를 사용하여 동일한 데이터 저장소를 사용하고 수정하여 훨씬 더 많은 유연성을 부여 할 수 있습니다 (하나는 foobar.appspot.com과 같은 "좋은"URL을 가지지 만) 브라우저에서 대화 형 사용자가 액세스하는 경우에만 중요합니다.


이 앱에서 Python 및 Java 성능의 변경 사항을 확인하십시오.

http://gaejava.appspot.com/ (편집 : 사과, 링크가 끊어졌습니다. 그러나 마지막으로 실행되는 것을 볼 때 다음과 같은 파라가 여전히 적용됩니다)

현재이 간단한 테스트를 위해 Python과 Java에서 저수준 API를 사용하는 것이 Java의 JDO보다 빠릅니다 . 최소한 기본 엔진이 변경되면 해당 앱은 성능 변경을 반영해야합니다.


다른 플랫폼에서 이러한 VM을 실행 한 경험을 바탕으로 파이썬보다 Java에서 더 많은 원시 성능을 얻을 수 있다고 말하고 싶습니다. 그러나 파이썬의 판매 포인트를 과소 평가하지 마십시오. 파이썬 언어는 코드 라인 측면에서 훨씬 더 생산적입니다. 일반적인 동의는 파이썬은 동등한 Java 프로그램 코드의 3 분의 1이 필요하지만 읽을 수있는 상태로 유지하는 것입니다. 이 이점에는 명시적인 컴파일 단계없이 즉시 코드를 실행할 수있는 기능이 추가됩니다.

사용 가능한 라이브러리와 관련하여 광범위한 Python 런타임 라이브러리의 많은 부분이 Java와 마찬가지로 즉시 작동합니다. 인기있는 Django 웹 프레임 워크 ( http://www.djangoproject.com/ )도 AppEngine에서 지원됩니다.

'파워'와 관련하여 무슨 뜻인지 알기는 어렵지만 Python은 여러 도메인, 특히 웹에서 사용됩니다. YouTube는 Python으로 작성되며, Sourceforge와 마찬가지로 (지난 주 현재).


2013 년 6 월 : 이 동영상은 Google 엔지니어의 답변입니다.

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

TLDR; 입니다 :

  • 귀하와 귀하의 팀이 가장 생산적인 언어를 선택하십시오
  • 프로덕션을 위해 무언가를 빌드하려는 경우 : Java 또는 Python (Go가 아님)
  • 대규모 팀과 복잡한 코드 기반이있는 경우 : Java (정적 코드 분석 및 리팩토링으로 인해)
  • 빠르게 반복되는 소규모 팀 : Python (Java도 괜찮음)

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 데이터 스토어 모두에서 작동하도록 설계되었습니다.

For Python, there are efforts being made to allow the use of the Python GAE datastore API off of the GAE. One example is the SQLite backend that Google released for use with the SDK, but I doubt they intend this to grow into something production ready. The TyphoonAE project probably has more potential, but I don't think it is production ready yet either (correct me if I am wrong).

If anyone has experience with any of these alternatives or knows of others, please add them in a comment. Personally, I really like the GAE datastore - I find it to be a considerable improvement over the AWS SimpleDB - so I wish for the success of these efforts to alleviate some of the issues in using it.


I'm strongly recommending Java for GAE and here's why:

  1. Performance: Java is potentially faster then Python.
  2. Python development is under pressure of a lack of third-party libraries. For example, there is no XSLT for Python/GAE at all. Almost all Python libraries are C bindings (and those are unsupported by GAE).
  3. Memcache API: Java SDK have more interesting abilities than Python SDK.
  4. Datastore API: JDO is very slow, but native Java datastore API is very fast and easy.

I'm using Java/GAE in development right now.


As you've identified, using a JVM doesn't restrict you to using the Java language. A list of JVM languages and links can be found here. However, the Google App Engine does restrict the set of classes you can use from the normal Java SE set, and you will want to investigate if any of these implementations can be used on the app engine.

EDIT: I see you've found such a list

I can't comment on the performance of Python. However, the JVM is a very powerful platform performance-wise, given its ability to dynamically compile and optimise code during the run time.

Ultimately performance will depend on what your application does, and how you code it. In the absence of further info, I think it's not possible to give any more pointers in this area.


I've been amazed at how clean, straightforward, and problem free the Python/Django SDK is. However I started running into situations where I needed to start doing more JavaScript and thought I might want to take advantage of the GWT and other Java utilities. I've gotten just half way through the GAE Java tutorial, and have had one problem after another: Eclipse configuration issues, JRE versionitis, the mind-numbing complexity of Java, and a confusing and possibly broken tutorial. Checking out this site and others linked from here clinched it for me. I'm going back to Python, and I'll look into Pyjamas to help with my JavaScript challenges.


I'm a little late to the conversation, but here are my two cents. I really had a hard time choosing between Python and Java, since I am well versed in both languages. As we all know, there are advantages and disadvantages for both, and you have to take in account your requirements and the frameworks that work best for your project.

As I usually do in this type of dilemmas, I look for numbers to support my decision. I decided to go with Python for many reasons, but in my case, there was one plot that was the tipping point. If you search "Google App Engine" in GitHub as of September 2014, you will find the following figure:

GAE Language Stats

There could be many biases in these numbers, but overall, there are three times more GAE Python repositories than GAE Java repositories. Not only that, but if you list the projects by the "number of stars" you will see that a majority of the Python projects appear at the top (you have to take in account that Python has been around longer). To me, this makes a strong case for Python because I take in account community adoption & support, documentation, and availability of open-source projects.


It's a good question, and I think many of the responses have given good view points of pros and cons on both sides of the fence. I've tried both Python and JVM-based AppEngine (in my case I was using Gaelyk which is a Groovy application framework built for AppEngine). When it comes to performance on the platform, one thing I hadn't considered until it was staring me in the face is the implication of "Loading Requests" that occur on the Java side of the fence. When using Groovy these loading requests are a killer.

I put a post together on the topic (http://distractable.net/coding/google-appengine-java-vs-python-performance-comparison/) and I'm hoping to find a way of working around the problem, but if not I think I'll be going back to a Python + Django combination until cold starting java requests has less of an impact.


Based on how much I hear Java people complain about AppEngine compared to Python users, I would say Python is much less stressful to use.


There's also project Unladen Swallow, which is apparently Google-funded if not Google-owned. They're trying to implement a LLVM-based backend for Python 2.6.1 bytecode, so they can use a JIT and various nice native code/GC/multi-core optimisations. (Nice quote: "We aspire to do no original work, instead using as much of the last 30 years of research as possible.") They're looking for a 5x speed-up to CPython.

Of course this doesn't answer your immediate question, but points towards a "closing of the gap" (if any) in the future (hopefully).


The beauty of python nowdays is how well it communicates with other languages. For instance you can have both python and java on the same table with Jython. Of course jython even though it fully supports java libraries it does not support fully python libraries. But its an ideal solution if you want to mess with Java Libraries. It even allows you to mix it with Java code with no extra coding.

But even python itself has made some steps forwared. See ctypes for example, near C speed , direct accees to C libraries all of this without leaving the comfort of python coding. Cython goes one step further , allowing to mix c code with python code with ease, or even if you dont want to mess with c or c++ , you can still code in python but use statically type variables making your python programms as fast as C apps. Cython is both used and supported by google by the way.

Yesterday I even found tools for python to inline C or even Assembly (see CorePy) , you cant get any more powerful than that.

Python is surely a very mature language, not only standing on itself , but able to coooperate with any other language with easy. I think that is what makes python an ideal solution even in a very advanced and demanding scenarios.

With python you can have acess to C/C++ ,Java , .NET and many other libraries with almost zero additional coding giving you also a language that minimises, simplifies and beautifies coding. Its a very tempting language.


Gone with Python even though GWT seems a perfect match for the kind of an app I'm developing. JPA is pretty messed up on GAE (e.g. no @Embeddable and other obscure non-documented limitations). Having spent a week, I can tell that Java just doesn't feel right on GAE at the moment.


One think to take into account are the frameworks you intend yo use. Not all frameworks on Java side are well suited for applications running on App Engine, which is somewhat different than traditional Java app servers.

One thing to consider is the application startup time. With traditional Java web apps you don't really need to think about this. The application starts and then it just runs. Doesn't really matter if the startup takes 5 seconds or couple of minutes. With App Engine you might end up in a situation where the application is only started when a request comes in. This means the user is waiting while your application boots up. New GAE features like reserved instances help here, but check first.

Another thing are the different limitations GAE psoes on Java. Not all frameworks are happy with the limitations on what classes you can use or the fact that threads are not allowed or that you can't access local filesystem. These issues are probably easy to find out by just googling about GAE compatibility.

I've also seen some people complaining about issues with session size on modern UI frameworks (Wicket, namely). In general these frameworks tend to do certain trade-offs in order to make development fun, fast and easy. Sometimes this may lead to conflicts with the App Engine limitations.

I initially started developing working on GAE with Java, but then switched to Python because of these reasons. My personal feeling is that Python is a better choice for App Engine development. I think Java is more "at home" for example on Amazon's Elastic Beanstalk.

BUT with App Engine things are changing very rapidly. GAE is changing itself and as it becomes more popular, the frameworks are also changing to work around its limitations.

참고URL : https://stackoverflow.com/questions/1085898/choosing-java-vs-python-on-google-app-engine

반응형