2010-02-26 3 views
2

Facebook API와 함께 Postgres DB를 사용하고 Amazon EC2에서 실행되는 Facebook 애플리케이션을 작성 중입니다. (그리고 나는 무거운 하중을 기대하고있다)Haskell이나 Erlang과 같은 기능적 프로그래밍 언어로 웹 애플리케이션을 작성하면 J2EE보다 확장 성이 향상됩니까?

자바에서는 DB가 나의 주요 병목 지점이 될 것이고 Tomcat의 동시성 제한이 2 차적인 병목 현상이라는 것을 알고있다. 수평 확장을 통한 캐싱 및 동시성 문제로 DB 문제를 완화 할 수 있습니다. (그러나 이것은 나의 EC2 비용을 증가시킬 것이다).

어떻게 얼랑 또는 하스켈이 상황에서 도움이 될 것이다? (학습 곡선을 마스터 할 수 있다고 가정).

답변

5

http://www.highscalability.com을 살펴보고 크고 큰 부하로 응용 프로그램을 확장하는 방법에 대한 사례 연구를 살펴보십시오. 특히 Brad Fitzpatrick이 LiveJournal과 Danga Interactive (예 : this 2005 presentation)를 확장 한 방법에 대한 설명을 검색하십시오.

데이터베이스에 대한 직감이 첫 번째 병목 현상을 겪은 다음 웹 서버가 맞을 수도 있지만 물론 측정해야합니다. 사이트를 확장 할 수

주요 방법 등 클러스터링 및 캐싱 및 데이터베이스 샤딩 등을 포함 할 것이다. 프로그래밍 언어의 선택은 부차적이며 일반적으로 각 상자의 원시 성능에 영향을 미칩니다. 이 분야의 다른 아이디어와 배경에 대해서는 Henderson의 Building Scalable Web Sites과 Schlossnagle의 Scalable Internet Architectures을 참조하십시오.

는 함수형 언어가 전반적인 확장 성을 향상하는 데 도움이 될 수 있다고 말했다 가졌어요. 백 엔드 성능을 향상시키기 위해 Twitter used Scala. 스칼라는 객체 지향 및 기능 스타일을 결합하고 액터 동시성 모델을 지원하며 거의 자바 속도로 실행되는 JVM 언어입니다 (Scala의 작성자 Martin Odersky는 현재 Sun Java 컴파일러도 작성했습니다). 따라서 병행 병목 현상이 발생하면 자바를 사용하여 스칼라 비트를 뿌려야 할 수도 있습니다.

+0

스칼라에 대한 제안에 감사드립니다. 나는 그 안정성에 우려하고 짧은 목록에서 그것을 제거했다. 그러나 자바 + 스칼라는 훌륭한 조합처럼 보입니다. 저는 JSON을 사용하여 GWT (JavaScript)를 사용하여 프론트 엔드 GUI를 작성하여 백엔드와 통신하고 있습니다. GWT + JSON은 특정 백엔드 기술에 대한 의존성을 제거하기 위해 특별히 선택했습니다. Java JSON 서블릿을 스칼라로 이식하는 것이 하스켈에서 작성하는 것이 더 쉬울 것이라고 생각합니다. – user193116

+0

@ user193116 : 스칼라는 버그가 상당히 안정적으로 보입니다. 그러나 아직 완료되지 않았습니다. 새 스칼라 2.8 컬렉션 구현에는 약간의 비 호환성이 있으며, 2.8로 업그레이드하려면 다시 컴파일해야합니다 (http://www.scala-lang.org)./node/2060). –

-4

병목 현상이 이미 코드와 관련이없는 것으로 정의 된 경우 다른 언어를 선택하면 Java와 같은 컴파일 된 언어보다 응용 프로그램의 속도가 크게 향상됩니다. 대부분의 함수형 언어는 Java보다 오버 헤드가 많으므로 이미 Java에 익숙하다면 전환 할 강력한 이유가 있어야합니다.

+6

Java는 VM에서도 실행되기 때문에 (컴파일 할 때 기본 언어가 아닙니다) 함수형 언어가 본질적으로 더 많은 오버 헤드를 가지고 있다고 주장 할 수는 없습니다. 또한 Erlang은 여러 개의 '스레드'(스위치 용 소프트웨어 개발을위한 언어로 시작됨)를 처리하도록 특별히 설계되었으므로 Erlang의 고유 멀티 스레딩 기능이 특정 응용 프로그램에 따라 성능을 향상시킬 수 있습니다. 프로파일 링은 Erlang 플랫 아웃이 조기에 도움이 될 수 없다고 말하면서 최적화를 향한 첫 걸음 일 것입니다. – kyoryu

+0

GHC는 microbenchmarks [0]에서 Java와 거의 같은 속도로 보이지만 메모리는 상당히 적습니다. [0] http://shootout.alioth.debian.org/u64/benchmark.php?test=all&lang=ghc&lang2=java – Zak

+1

@kyoryu 최신 ​​버전의 JVM은 JIT 컴파일을 네이티브로 수행하는 훌륭한 작업을 수행합니다. 실행중인 기계의 코드. 벤치마킹에 따르면 최신 JVM은 이전 버전보다 훨씬 빠르며 많은 유스 케이스에서 C++에 비해 유리합니다. .Net 프레임 워크에서도 마찬가지입니다. 내 대답을 표시하는 사람들은 아마도 약간의 연구를해야 할 것입니다. –

12

두 반 답변 :

은 아직 사용자가 있습니까? 아니요? 그런 다음 프로젝트를 빨리 시작할 수 있도록 도와주십시오. 언제든지 나중에 다시 작성할 수 있습니다. "너무 많은 사용자"는 대부분의 사람들이 갖고 싶어하지만 문제는 아닙니다. 대규모 사용자 기반을 신속하게 기대할 실질적인 이유가있는 경우 (예 : 인기 블로그를 운영하고 많은 독자가 즉시 참여할 것으로 기대하는 등)이 점에 대해 걱정할 필요는 없습니다. 그렇지 않으면 문제를 해결할 수 있습니다.

병목 현상이 어디에서 발생하는지 알고 계십니까? 이와 같은 스케일 아웃은 작은 애플리케이션에서 성능과 크게 다른 점을 제기합니다. 선제 적으로 물건을 고정하기 전에 무엇이 망가 졌는지 정말로 알고 있는지 확인하십시오. 어쨌든 응용 프로그램의 아키텍처가 더 중요 할 것입니다.

그런 식으로하고 싶다면 Erlang 또는 Haskell이 작동하지만, 사용자가 묻는 것에는 큰 차이가 없을 것입니다. 하지만 다른은 Java를 선호하는 이유입니다.

+0

Stackoverflow가이 점이 우수함을 인식하지 못하면 로봇 대 군주에 대한 의문이 제기됩니다. – wlangstroth

관련 문제