[java] 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 런타임보다 더 발전되고 발전된 것으로 생각합니다. .

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

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

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

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

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

마지막으로 : 동일한 데이터 스토어를 사용하는 다른 버전의 앱 (예 : 동일한 데이터 스토어 사용) 중 일부는 Python 런타임으로 구현되고 일부는 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도 괜찮음)

답변

파이썬과 자바를 결정할 때 고려해야 할 중요한 질문 은 각 언어로 데이터 스토어를 사용하는 방법 입니다.

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를 사용할 수 있도록 노력하고 있습니다. 한 가지 예는 Google이 SDK와 함께 사용하기 위해 출시 한 SQLite 백엔드이지만 이것이 프로덕션 환경으로 성장할 의향이없는 것 같습니다. TyphoonAE의 프로젝트는 아마 더 가능성이 있지만, 나는 (만약 내가 잘못 올바른 나) 아직 중 생산 준비가 생각하지 않습니다.

누구든지 이러한 대안에 대해 경험이 있거나 다른 것을 알고 있다면 의견에 추가하십시오. 개인적으로 저는 GAE 데이터 스토어를 정말 좋아합니다. AWS SimpleDB에 비해 상당히 개선 된 것 같습니다. 따라서 이러한 노력을 통해 데이터를 사용하는 데있어 일부 문제를 완화하고자합니다.


답변

GAE에 Java를 강력하게 권장하고 있으며 그 이유는 다음과 같습니다.

  1. 성능 : Java는 잠재적으로 Python보다 빠릅니다.
  2. 파이썬 개발은 타사 라이브러리가 부족하다는 압박을 받고 있습니다. 예를 들어, Python / GAE 용 XSLT는 전혀 없습니다. 거의 모든 Python 라이브러리는 C 바인딩이며 GAE에서 지원하지 않습니다.
  3. Memcache API : Java SDK는 Python SDK보다 흥미로운 기능이 있습니다.
  4. 데이터 스토어 API : JDO는 매우 느리지 만 기본 Java 데이터 스토어 API는 매우 빠르고 쉽습니다.

현재 개발에 Java / GAE를 사용하고 있습니다.


답변

확인했듯이 JVM을 사용한다고해서 Java 언어를 사용하는 것으로 제한되지는 않습니다. JVM 언어 및 링크 목록은 여기 에서 찾을 수 있습니다 . 그러나 Google App Engine은 일반 Java SE 세트에서 사용할 수있는 클래스 세트를 제한하므로 이러한 구현 중 하나를 앱 엔진에서 사용할 수 있는지 조사해야합니다.

편집 : 당신이 그런 목록을 찾았습니다

파이썬의 성능에 대해서는 언급 할 수 없습니다. 그러나 JVM은 런타임 동안 코드를 동적으로 컴파일하고 최적화하는 기능을 제공하므로 성능면에서 매우 강력한 플랫폼입니다.

궁극적으로 성능은 응용 프로그램의 기능과 코딩 방법에 따라 다릅니다. 추가 정보가 없으면이 영역에 더 이상 포인터를 제공 할 수 없다고 생각합니다.