[concurrency] Node.js 또는 Erlang

처리 할 수있는 동시성 수준과 관련하여 이러한 도구를 정말 좋아합니다.

Erlang / OTP는 훨씬 더 안정적인 솔루션처럼 보이지만 훨씬 더 많은 학습과 기능적 언어 패러다임에 대한 많은 다이빙이 필요합니다. 그리고 Erlang / OTP가 멀티 코어 CPU에 관해서는 훨씬 더 나은 것처럼 보입니다.

그러나 나는 무엇을 선택해야합니까? 단기 및 장기 관점에서 어느 것이 더 낫습니까?

나의 목표는 전통적인 언어보다 더 쉽게 웹 프로젝트를 확장 할 수있는 도구를 배우는 것입니다.



답변

나는 Erlang을 시도해 볼 것입니다. 더 가파른 학습 곡선이 될지라도 함수형 프로그래밍 언어를 배우게되므로 더 많은 것을 얻을 수 있습니다. 또한 Erlang은 안정적이고 동시성있는 시스템을 만들도록 특별히 설계되었으므로 확장 성이 뛰어난 서비스를 동시에 만드는 방법에 대해 많은 것을 배울 것입니다.


답변

Erlang에 대해 말할 수는 없지만 노드에 대해 언급되지 않은 몇 가지 사항이 있습니다.

  • Node는 Google의 V8 엔진을 사용하여 실제로 자바 스크립트를 기계 코드로 컴파일합니다. 그래서 노드는 실제로 꽤 빠릅니다. 이벤트 기반 프로그래밍 및 비 차단 io가 제공하는 속도 이점에 더합니다.
  • Node에는 꽤 활동적인 커뮤니티가 있습니다. freenode의 IRC 그룹에 들어가면 무슨 뜻인지 알 수 있습니다.
  • 위의 주석이 기능적 프로그래밍 언어를 배우는 것이 유용 할 것이라는 근거로 Erlang을 밀어 붙이는 것을 보았습니다. 기술을 확장하고 그 중 하나를 확보하는 것이 중요하다는 데 동의하지만, 새로운 프로그래밍 스타일을 배우고 싶다는 사실을 바탕으로 프로젝트를 작성해서는 안됩니다.
  • 반면에 Javascript는 이미 작성하기에 편한 패러다임에 있습니다! 또한 자바 스크립트이므로 클라이언트 측 코드를 작성할 때 일관성있는 모양과 느낌을줍니다.
  • 노드 커뮤니티는 이미 수많은 모듈을 펌핑했습니다 ! redis, mongodb, couch 및 무엇을위한 모듈이 있습니다. 살펴볼 또 다른 좋은 모듈은 Express입니다 (노드 용 Sinatra를 생각해 보십시오 ).

실제로 노드를 작성한 사람인 Ryan Dahl의 yahoo 블로그 동영상 을 확인하세요 . 노드가 어디에 있는지, 어디로 가는지 더 잘 알 수있을 것입니다.

노드는 아직 개발 후반 단계에 있으며 이전 코드를 망가 뜨린 변경과 같은 몇 가지 변경 사항을 겪고 있습니다. 그러나 API가 너무 많이 변경되지 않을 것으로 예상 할 수있는 시점에 있습니다. 따라서 재미있는 것을 찾고 있다면 노드가 훌륭한 선택이라고 말하고 싶습니다.


답변

저는 오랫동안 Erlang 프로그래머이며이 질문으로 node.js를 살펴 보게되었습니다. 꽤 좋아 보인다.

여러 코어를 활용하려면 여러 프로세스를 생성해야하는 것으로 보입니다. 그래도 프로세서 선호도 설정에 대해 아무것도 볼 수 없습니다. 리눅스에서 taskset을 사용할 수 있지만 아마도 매개 변수화하고 프로그램에서 설정해야합니다.

또한 플랫폼 지원이 약간 약할 수 있음을 알았습니다. 특히 Windows 지원을 위해 Cygwin에서 실행해야 할 것 같습니다.

그래도 좋아 보인다.


편집하다

Node.js는 이제 Windows를 기본적으로 지원합니다.


답변

여러 프로젝트에 대해 동일한 두 가지 대안을 찾고 있습니다.

지금까지 주어진 프로젝트를 위해 그들 사이에서 결정하기 위해 내가 생각 해낸 최고의 면도기는 자바 스크립트를 사용해야하는지 여부입니다. 마이그레이션하려는 기존 시스템 중 하나는 이미 Javascript로 작성되었으므로 다음 버전은 node.js에서 수행 될 가능성이 높습니다. 마이그레이션 할 기존 코드 기반이 없기 때문에 다른 프로젝트는 일부 Erlang 웹 프레임 워크에서 수행됩니다.

또 다른 고려 사항은 Erlang이 여러 코어를 넘어서 전체 데이터 센터로 확장 할 수 있다는 것입니다. 나는 node.js에서 어떤 시스템에 있는지 신경 쓰지 않고 다른 JS 프로세스에 메시지를 보낼 수있는 내장 메커니즘을 보지 못했지만, 그것은 가장 낮은 수준에서 Erlang에 바로 내장되어 있습니다. 문제가 여러 대의 시스템을 필요로 할만큼 크지 않거나 여러 협력 프로세스가 필요하지 않은 경우이 이점은 중요하지 않으므로 무시해야합니다.

Erlang은 실제로 다이빙하기에 깊은 풀입니다. 웹 앱 빌드를 시작하기 전에 먼저 독립 실행 형 기능 프로그램을 작성하는 것이 좋습니다. 자바 스크립트에 익숙해 보이기 때문에 더 쉬운 첫 번째 단계는보다 기능적인 스타일로 JS를 프로그래밍하는 것입니다. jQuery 또는 Prototype을 사용하는 경우 이미이 경로를 시작했습니다. Erlang의 순수 함수형 프로그래밍이나 그 유사 (Haskell, F #, Scala …) 중 하나와 함수형 JS 사이를 바운스 해보십시오.

함수형 프로그래밍에 익숙해지면 많은 Erlang 웹 프레임 워크 중 하나를 찾으십시오. inets이 후기 단계 와 같이 저수준에 앱을 직접 작성해서는 안됩니다 . 예를 들어 Nitrogen 과 같은 것을보십시오 .


답변

개인적으로 Erlang을 선택하는 동안 JavaScript에 약간 편견이 있음을 인정합니다. 내 조언은 몇 가지 사항을 평가하는 것입니다.

  1. 두 언어 중 하나의 기존 코드를 재사용하고 있습니까 (소스 코드 및 프로그래머 경험 측면에서 모두!)
  2. 응용 프로그램을 중지하지 않고 즉석 업데이트가 필요합니까 / 원합니까? (이는 기본적으로 Erlang이이기는 곳입니다. 런타임은이 경우를 위해 설계되었으며 OTP에는 필요한 모든 도구가 포함되어 있습니다)
  3. 대역폭이 아닌 별도의 동시 작업 측면에서 예상되는 트래픽은 얼마나 큽니까?
  4. 각 요청에 대해 수행하는 작업이 얼마나 “병렬”입니까?

Erlang은 정말 정밀하게 조정 된 동시성 및 네트워크 투명 병렬 분산 시스템을 갖추고 있습니다. 프로젝트가 정확히 무엇인지에 따라 그러한 시스템의 성숙한 구현의 가용성이 새로운 언어 학습과 관련된 문제보다 클 수 있습니다. 또한 사용할 수있는 Erlang VM에서 작동하는 두 가지 다른 언어 인 Ruby / Python과 유사한 ReiaLisp-Flavored Erlang이 있습니다.

또 다른 옵션은 둘 다 사용하는 것입니다. 특히 Erlang이 일종의 “허브”로 사용되는 경우입니다. Node.js에 Foreign Function Interface 시스템이 있는지 확실하지 않지만 만약 있다면 Erlang에는 다른 Erlang 프로세스와 마찬가지로 외부 프로세스가 시스템과 인터페이스 할 수있는 C 라이브러리가 있습니다.


답변

Erlang은 비교적 저가형 서버 (512MB 4 코어 2.4GHz AMD VM)에 배포 할 때 더 나은 성능을 발휘하는 것 같습니다. 이것은 SyncPad가 가상 화이트 보드 서버 애플리케이션의 Erlang과 Node.js 구현을 비교 한 경험 에서 비롯된 것 입니다.


답변

erlang-> Elixir 와 동일한 VM에 하나 이상의 언어가 있습니다.

Erlang에 대한 매우 흥미로운 대안입니다. 이것을 확인하십시오.

또한 it-> Phoenix Framework를 기반으로 빠르게 성장하는 웹 프레임 워크가 있습니다.