Google App Engine에서 Java vs Python 선택
현재 Google App Engine은 Python과 Java를 모두 지원합니다.Java 지원은 성숙도가 낮습니다.그러나 Java는 라이브러리 목록이 더 긴 것 같습니다. 특히 Java 바이트 코드를 기술하는 데 사용되는 언어에 관계없이 Java 바이트 코드를 지원합니다.어떤 언어가 더 나은 성능과 더 강력한 힘을 제공합니까?조언 부탁드립니다.감사해요!
편집: http://groups.google.com/group/google-appengine-java/web/will-it-play-in-app-engine?pli=1
편집: "파워"란 프레임워크 밖에서 사용할 수 있는 라이브러리의 확장성과 포함성을 향상시키는 것을 의미합니다.Python은 순수 Python 라이브러리만 허용합니다.
저는 (Python 전문가이지만 Java에서는 상당히 녹슬어 있는) 편견이 있지만, GAE의 Python 런타임은 Java 런타임보다 더 발전되고 더 잘 개발되었다고 생각합니다. 결국, 전자는 1년 더 발전하고 성숙해야 했습니다.
앞으로 어떻게 일이 진행될지는 물론 예측하기 어렵다--Java측에서 수요가 더 강할 것이다(특히 Java에 관한 것뿐만 아니라 JVM 위에 다른 언어도 있기 때문에 앱 엔진에서 PHP나 루비 코드를 실행하는 방법이 된다). 그러나 Python App Engine 팀은 G보드의 이점을 가지고 있다.파이썬의 발명자이자 놀랍도록 강한 엔지니어인 uido van Rossum.
유연성 측면에서 Java 엔진은 이미 언급한 바와 같이 JVM 바이트 코드를 Java뿐만 아니라 다양한 언어로 실행할 수 있는 가능성을 제공합니다. 다국어 상점에 있을 경우 상당히 긍정적인 결과를 얻을 수 있습니다.반대로 Javascript를 싫어하지만 사용자의 브라우저에서 일부 코드를 실행해야 하는 경우 Java의 GWT(Javascript를 Java 레벨 코딩에서 생성하는 것)는 Python의 다른 방법(실제로 Python을 선택하면 Java가 GW가 아닌 경우)보다 훨씬 풍부하고 고급입니다.JS)를 쓰는 것을 싫어할 경우 사용할 수 있습니다.
라이브러리 측면에서 보면, JVM은 기존 Python 라이브러리의 단순한 재사용을 방해할 정도로 충분히 제한되어 있습니다(스레드, 커스텀 클래스 로더, JNI, 관계형 DB 없음). Python 런타임에 대한 유사한 제한으로 인해 기존 Python 라이브러리의 재사용이 거의 또는 그 이상 방해받고 있습니다.
퍼포먼스에 관해서는, 자신의 태스크에 벤치마크 하는 것이 좋다고 생각합니다.대규모의 기동 시간과 메모리 설치 공간을 삭감하는 고도로 최적화된 JIT 베이스의 JVM 실장의 퍼포먼스에 의존하지 말아 주세요.앱 엔진 환경은 매우 다르기 때문입니다(시작 비용은 ap의 경우와 같이 자주 지불됩니다).p는 시작, 중지, 다른 호스트로 이동 등 모든 작업이 자동으로 수행됩니다. 이러한 이벤트는 일반적으로 Python 런타임 환경에서 JVM보다 훨씬 저렴합니다.)
XPath/XSLT 상황(완곡하게 말하면...)은 어느 쪽도 완벽하지 않지만, JVM에서는 조금 덜 나쁘다고 생각합니다(Saxon의 상당한 서브셋을 신중하게 실행할 수 있는 것 같습니다).앱 엔진 문제 페이지에서 XPath와 XSLT를 제목으로 한 이슈를 여는 것이 좋다고 생각합니다.현재는 특정 라이브러리를 요구하는 문제만 있습니다.그것은 근시안적인 것입니다.Python 및/또는 Java에 대해 좋은 XPath/XSLT를 어떻게 구현하든 상관없습니다.(특정 라이브러리는 기존 코드를 쉽게 이행할 수 있지만 어떤 식으로든 XSLT 변환을 신속하게 적용할 수 있는 것보다 덜 중요합니다!)표현만 잘하면 그런 이슈를 주연으로 삼을 수 있다는 것을 알고 있다(특히 언어에 구애받지 않는 방식으로요.
마지막으로, (같은 데이터스토어를 사용하여) 다른 버전의 앱을 사용할 수 있습니다.이들 중 일부는 Python 런타임으로 구현되고 일부는 Java 런타임으로 구현되며, 명시적인 URL을 사용하여 "기본/액티브" 버전과 다른 버전에 액세스할 수 있습니다.따라서 Python 코드와 Java 코드(앱의 다른 버전)가 같은 데이터 스토어를 사용하고 수정할 수 있으며, 더 많은 유연성을 얻을 수 있습니다(단, foobar.appspot.com과 같은 "멋진" URL을 가진 것은 단 한 개뿐이지만, 브라우저 상의 대화식 사용자만이 접근할 수 있을 것입니다.
이 앱에서 Python 및 Java 성능의 변화를 확인하십시오.
http://gaejava.appspot.com/ (편집: 죄송합니다.링크가 끊어졌습니다)하지만 마지막 실행 시에도 다음 단락이 적용되었습니다.)
현재 이 간단한 테스트의 경우 Python과 Java의 Low-level API 사용이 Java의 JDO보다 빠릅니다.적어도 기본 엔진이 변경되더라도 해당 앱은 성능 변화를 반영해야 합니다.
이러한 VM을 다른 플랫폼에서 실행한 경험을 바탕으로 볼 때, Python보다 Java에서 더 많은 원시 성능을 얻을 수 있을 것입니다.그러나 Python의 판매 포인트를 과소평가하지 마십시오.Python 언어는 코드 라인의 측면에서 훨씬 더 생산적입니다. 일반적인 합의는 Python이 동등한 Java 프로그램의 1/3 코드를 요구하면서도 가독성을 유지한다는 것입니다.이 이점에는 명시적인 컴파일 절차 없이 코드를 즉시 실행할 수 있는 기능이 더해져 있습니다.
이용 가능한 라이브러리와 관련하여, 광범위한 Python 런타임 라이브러리의 많은 부분이 (Java와 마찬가지로) 개봉 즉시 작동한다는 것을 알게 될 것입니다.인기 있는 Django Web 프레임워크(http://www.djangoproject.com/)는 AppEngine에서도 지원됩니다.
'power'에 대해서는 알기 어렵지만, Python은 다양한 영역에서 사용되고 있으며, 특히 Web: YouTube는 Sourceforge와 마찬가지로 Python으로 작성되어 있습니다(지난 주 기준).
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의 경우 JDO/JPA(IMO)보다 데이터스토어에 훨씬 적합한 지속성 라이브러리를 개발하기 위해 낮은 수준의 API가 사용되고 있습니다.예를 들어 Siena 프로젝트와 Objectify가 있습니다.
최근에 Objectify를 사용하기 시작했는데 매우 사용하기 쉽고 데이터스토어에 매우 적합하다는 것을 알게 되었고, 그 인기가 높아짐에 따라 좋은 지원이 제공되고 있습니다.예를 들어 Objectify는 Google의 새로운 Cloud Endpoints 서비스에서 공식적으로 지원됩니다.반면 Objectify는 데이터스토어에서만 작동하지만 Siena는 데이터스토어에서 '영감'을 얻었지만 다양한 SQL 데이터베이스와 NoSQL 데이터스토어 모두에서 작동하도록 설계되었습니다.
Python의 경우 GAE에서 Python GAE 데이터스토어 API를 사용할 수 있도록 노력하고 있습니다.예를 들어, 구글이 SDK에 사용하기 위해 공개한 SQLite 백엔드가 있지만, 이것이 실제 가동 가능한 상태로 확장될지는 의문입니다.태풍AE프로젝트는 더 가능성이 있다고 생각합니다만, 아직 생산 준비가 되어 있지 않다고 생각합니다(잘못이 있으면 정정해 주세요).
이 중 하나를 사용한 경험이 있거나 다른 것을 알고 있는 사람은 코멘트에 추가해 주세요.개인적으로 저는 GAE 데이터 저장소를 매우 좋아합니다. - AWS SimpleDB보다 상당히 향상된 기능임을 알 수 있습니다. 따라서 GAE 데이터 저장소를 사용하는 데 있어 이러한 노력이 성공적으로 이루어졌으면 합니다.
GAE에 Java를 적극 추천합니다.이유는 다음과 같습니다.
- 성능: Java가 Python보다 더 빠를 수 있습니다.
- Python 개발은 서드파티 라이브러리의 부족으로 압박을 받고 있다.예를 들어 Python/GAE용 XSLT는 전혀 없습니다.거의 모든 Python 라이브러리는 C 바인딩입니다(그리고 그것들은 GAE에서 지원되지 않습니다).
- Memcache API: Java SDK는 Python SDK보다 더 흥미로운 기능을 가지고 있습니다.
- 데이터스토어 API: JDO는 매우 느리지만 기본 Java 데이터스토어 API는 매우 빠르고 쉽습니다.
현재 개발 중에 Java/GAE를 사용하고 있습니다.
이미 확인했듯이 JVM을 사용해도 Java 언어 사용에 제한이 없습니다.JVM 언어 및 링크 목록은 여기에서 찾을 수 있습니다.그러나 Google App Engine은 일반 Java SE 집합에서 사용할 수 있는 클래스 집합을 제한하므로 이러한 구현 중 하나를 앱 엔진에서 사용할 수 있는지 조사해야 합니다.
편집: 그런 목록을 찾으셨군요.
Python의 퍼포먼스에 대해서는 코멘트를 할 수 없습니다.그러나 JVM은 런타임 동안 동적으로 코드를 컴파일하고 최적화할 수 있다는 점에서 성능 면에서 매우 강력한 플랫폼입니다.
최종적으로 퍼포먼스는 어플리케이션의 동작과 코딩 방법에 따라 달라집니다.더 이상의 정보가 없으면 이 부분에 대해 더 이상의 조언을 드릴 수 없을 것 같습니다.
Python/Django SDK가 얼마나 깨끗하고 간단하며 문제가 없는지에 놀랐습니다.그러나 JavaScript를 더 많이 실행해야 하는 상황에 직면하게 되었고 GWT와 다른 Java 유틸리티를 이용하고 싶다고 생각했습니다.저는 GA Java 튜토리얼을 반 정도 읽었는데, Eclipse 구성 문제, JRE 버전염, Java의 머릿속을 맴도는 복잡함, 혼란스럽고 고장날 수 있는 튜토리얼이 연이어 있었습니다.이 사이트와 링크된 다른 사이트들을 확인해보니 결말이 났다.Python으로 돌아가서 JavaScript 과제를 해결하기 위해 Pyjamas에 대해 알아보겠습니다.
대화는 좀 늦었지만, 제 의견은 이렇습니다.Python과 Java는 둘 다 잘 알고 있기 때문에 선택하기 어려웠습니다.아시다시피, 양쪽 모두에 장점과 단점이 있습니다.고객의 요건과 프로젝트에 최적인 프레임워크를 고려해야 합니다.
이런 종류의 딜레마에서 나는 보통 그렇듯이, 나의 결정을 뒷받침할 수 있는 숫자를 찾는다.여러 가지 이유로 Python을 선택하게 되었습니다만, 저의 경우 티핑 포인트가 되는 플롯이 하나 있었습니다.2014년 9월 현재 GitHub에서 "Google App Engine"을 검색하면 다음과 같은 그림을 볼 수 있습니다.
이러한 수치에는 많은 편견이 있을 수 있지만 전체적으로 GAE Java 저장소보다 GAE Python 저장소가 3배 더 많습니다.뿐만 아니라 프로젝트를 "별의 수"로 나열하면 대부분의 Python 프로젝트가 맨 위에 표시됩니다(Python이 더 오래 존재했다는 점을 고려해야 합니다).커뮤니티의 도입과 지원, 문서 작성, 오픈 소스 프로젝트의 가용성을 고려하기 때문에 Python에 대한 강력한 근거가 됩니다.
그것은 좋은 질문이고, 나는 많은 대답들이 양측의 찬반 양론으로 좋은 관점을 제시했다고 생각한다.Python과 JVM 기반의 AppEngine을 모두 사용해 보았습니다(내 경우 AppEngine용으로 구축된 Goolyk 어플리케이션 프레임워크를 사용하고 있었습니다).플랫폼에서의 퍼포먼스에 관해서라면, 그 플랫폼이 눈앞에 보일 때까지 생각하지 않았던 것은, Java측에서 발생하는 「요구의 로딩」의 영향입니다.Groovy를 사용할 때 이러한 로딩 요청은 치명적입니다.
저는 이 토픽(http://distractable.net/coding/google-appengine-java-vs-python-performance-comparison/)에 글을 올렸고, 이 문제를 해결할 방법을 찾고 싶습니다만, 그렇지 않다면 콜드 스타트 자바 요청이 영향을 덜 받을 때까지 Python + Django 조합으로 돌아갈 것입니다.
자바 사람들이 Python 사용자들에 비해 AppEngine에 대해 불평하는 것을 얼마나 많이 들었는지를 볼 때 Python이 사용하는 것에 대한 스트레스가 훨씬 덜하다고 생각합니다.
공차 스왈로우 프로젝트도 있습니다.구글 소유는 아니더라도 분명히 구글이 자금을 지원하고 있는 것 같습니다.Python 2.6.1 바이트 코드용 LLVM 기반 백엔드를 구현하여 JIT 및 다양한 네이티브 코드/GC/멀티 코어 최적화를 사용하려고 합니다.(좋은 인용문: "우리는 독창적인 작업을 하지 않고, 대신 지난 30년간의 연구를 최대한 활용하고자 합니다." 그들은 CPython의 5배 속도를 기대하고 있습니다.
물론 이것이 당신의 즉각적인 질문에 대한 답변은 아니지만, 미래에 (희망하는) "격차 해소"를 가리키고 있습니다.
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.
ReferenceURL : https://stackoverflow.com/questions/1085898/choosing-java-vs-python-on-google-app-engine
'programing' 카테고리의 다른 글
Java, Simplified는 int 배열에 int가 포함되어 있는지 확인합니다. (0) | 2022.09.04 |
---|---|
C 함수 선언에서 "..."는 마지막 매개 변수로서 무엇을 합니까? (0) | 2022.09.04 |
자바 이메일 주소의 가장 좋은 검증 방법은 무엇입니까? (0) | 2022.09.04 |
"java.security.cert" 수정 방법인증서.예외:제목 대체 이름이 없습니다" 오류입니까? (0) | 2022.09.04 |
@Mock, @MockBean 및 Mockito.mock()의 차이점 (0) | 2022.09.04 |