2016-07-31 5 views
0

Erlang을 배우면서 소켓이 OTP와 언어의 가장 강력한 부분 중 하나이기 때문에 소켓의 작동 방식을 이해하려고합니다.Erlang과 다른 서버 소켓

NodeJS에 대한 경험이 있습니다. NodeJS 및 Erlang으로 만든 응용 프로그램이 여러 소켓 연결을 관리하는 방법과 어떻게 다른지 궁금합니다.

Erlang은 여러 연결 자체를 관리 할 수 ​​있지만 JavaScript가 단일 스레드 인 반면 V8은 여러 개의 동시 연결을 모두 관리합니다.

Erlang이 한 번에 여러 연결을 관리하는 데 탁월한 지원을한다면, 프로그래머가 다른 기술과 어떻게 다른가요? 내 말은, NodeJS 용 앱을 작성할 때 Erlang에서 코드를 작성한 것처럼 많은 연결을 열어 잘 관리 할 수 ​​있다는 것입니다.

이런 맥락에서 얼랑의 명물에 대한 몇 가지 기사에 대한 의견을 보내주십시오.

답변

1

나는 Erlang의 전문가는 아니지만 같은 레벨에서 Erlang과 NodeJs를 알고 있다고 생각합니다.

당신이 말하는 것은 모두 정확합니다. Bot은 여러 연결을 매우 효율적으로 처리 할 수 ​​있으며 잘 관리됩니다.

하지만 문제는 여러 개의 동시 연결을 처리하는 것이 아닙니다. Erlang이 해결하려고 시도하는 문제는 오류 안전성과 배포입니다. NodeJ가 지금처럼 훌륭하다고 생각하지 않습니다.

잘못된 것은 아니지만 NodeJs에 분산 응용 프로그램을 코딩 할 수있는 사람은 아무도 없다고 말하는 것은 아니지만 Erlang이 제공하는 도구를 고려할 때 더 나은 선택 일 수 있습니다.

예를 들어, 오류 안전성을 위해 얼랑 (Erlang)은 프로세스를 연결하여 하나가 실패하면 다른 프로세스도 실패하거나 알림을받습니다. 이것은 그 자체로는별로 실용적이지 않지만, supervisors과 공유 된 아무것도없는 프로세스와 함께 볼 때, 그것은 훌륭한 도구입니다.

배포를 위해 Erlang은 노드를 서로 연결시켜 보겠습니다. 링크 된 노드는 마치 같은 머신에있는 것처럼 서로 말할 수 있으며 다른 쪽에서도 프로세스를 생성 할 수 있습니다. 정상적인 다른 노드의 장애가 발생한 노드에서 실패한 응용 프로그램을 시작할 수있는 기능을 고려해보십시오. 뛰어난 가동 시간을 제공합니다.

그리고 이러한 도구에는 수년 간의 경험이 있습니다.

다른 생태계에서 이러한 문제를 해결하기 만하면됩니다. 나는 Erlang이 언어로서 완전하지 않기 때문에 생태계를 말하지만 도구와 프레임 워크 (대부분 OTP)도 고려해야한다. 그렇다면 얼랭 (Erlang)이이 분야에서 정말 빛을 발한다 고 말할 수 있습니다.

그러나 Erlang은 선형 처리, 숫자 처리, 이미지/사운드 처리 등의 경우에는별로 좋지 않습니다. 다른 시스템에서는 더 잘 구현 될 것입니다.

이 부분에서 NodeJs와 Erlang의 가장 큰 차이점은 런타임 모델이라고 생각합니다. NodeJs에는 io 관련 작업에서 비동기로 작동하는 하나의 프로세스가 있습니다. 물론 여러 프로세스를 실행할 수는 있지만 기본 작업입니다. 한편 Erlang에는 BEAM이라는 VM이 ​​있습니다. Erlang은 매우 가벼운 프로세스 인이 VM 내부의 특별한 프로세스를 사용합니다. BEAM은 OS 프로세스가 아니기 때문에 자체적으로 스케줄합니다. 이로써 BEAM은 동시에 수십만 개의 프로세스를 가질 수있게되었으며, 각 프로세스는 io 또는 다른 것입니다.

지금은 차이가 있습니다. Erlang은 더 많은 전투 테스트를 거쳤으며 실패 안전 또는 배포가 필수 일 때 더욱 개선되었습니다. NodeJs는 더 빠른 개발과 배포가 필요할 때 더 좋습니다.