2014-01-30 2 views
6

실습 스크린 캐스트 (Erlang in screencasts) (코드 here)를 완료했으며 배포에 대해 몇 가지 질문이 있습니다.얼랭 (Erlang) 채팅 시스템 배포

architecture 다음

이 같은 감독의 나무의 모양에 방법은 다음과 같습니다 :

다음은이 전체 아키텍처의

supervisortree

Distributed Applications 읽기 믿고 날 리드하는 주요 동기 중 하나 failover/takeover를위한 것입니다.

그러나 예를 들어 메시지 라우터 관리자와 그 작업자가 한 노드에 있고 나머지 시스템이 코드에 많은 변화없이 다른 노드에있을 수 있습니까?

아니면 3 가지 OTP 애플리케이션이 있어야합니까?

또한이 시스템을 어떻게 수평으로 확장 할 수 있습니까? 예를 들어 내 시스템이 100 명의 사용자를 처리 할 수 ​​있고 메시지 라우터를 주요 병목으로 확인했다면 이제 200 명의 사용자를 처리 할 수있는 다른 노드를 어떻게 추가 할 수 있습니까?

+0

상위 차트를 그리려면 어떤 도구를 사용하셨습니까? –

+0

나는 그것을 그리지 않았다. 그것은 스크린 캐스트의 스크린 샷이다. OmniGaffle에서 나온 것입니다. –

+0

자, 고마워. –

답변

3

나는 연구 중에 만 Erlang 응용 프로그램을 개발했지만, 일반적으로 한 가지만하고 다른 프로세스에 메시지를 보내는 많은 작은 프로세스가있었습니다. Erlang의 장점은 동일한 Erlang VM 내에서 메시지를 보내거나 동일한 컴퓨터, 동일한 LAN 또는 인터넷을 통해 메시지를 보내고 다른 프로세스에 대한 호출 및 포인터가 항상 동일하게 보이는지 여부는 중요하지 않습니다. 개발자.

그래서 시스템의 모든 작은 부분에 대해 하나의 응용 프로그램을 만들고 싶습니다.

즉, 확장 할 수있는 응용 프로그램을 구성하는 것이 더 간단하지는 않습니다. 어림짐에 따르면 응용 프로그램이 10 배 이상 더 많은 노드에서 작동하도록하려면 다시 작성해야합니다. 그렇지 않으면 메시징 오버 헤드가 너무 커질 수 있기 때문입니다. 그리고 분명히 1에서 2로 시작하면 그것을 고려해야합니다.

너무 많은 클라이언트를 처리 할 때 특히 느린 응용 프로그램 인 병목 현상을 발견 한 경우 두 번째로 실행하고 두 번째로 시작하기 전에 몇 가지 추가 부하 분산을 구현해야합니다. 신청.

감독자가 메시지 내용에 부적절한 내용이 있는지 확인하고 속도가 느립니다. 이 경우, 노드는 모두 라운드 로빈 (round robin) 방식으로 슈퍼 바이저 애플리케이션의 다른 인스턴스로 메시지를 전달하는 단순한 라우터 애플리케이션 일 것입니다. 그 1 또는 2 개의 인스턴스가 충분하지 않은 경우 라우터를 작성하여 제어 메시지를 전송하여 인스턴스 수를 조작 할 수 있습니다.

그러나이 경우 자동으로 작동하려면 서버를 모니터링하고 과부하 또는 과소 사용되었음을 발견하는 다른 프로세스가 있어야합니다.

리소스를 동적으로 추가하고 제거하는 것이 항상 좋은 것처럼 들리 겠지만 실제로 볼 수 있듯이 많은 작업이 필요하며 모니터링을 허용하는 일부 메시징 시스템이 필요합니다. 시스템은 필요성을 모니터링 할 수 있습니다.

호프 이것은 어떻게 할 수 있었는지 몇 가지 아이디어를 제공합니다. 불행히도 마지막 얼랑 애플리케이션을 작성한 지 1 년이 넘었습니다. 잘못된 코드를 제공하고 싶지 않았습니다.

+1

답변 해 주셔서 감사합니다. 나는 특히 마지막 두 번째 단락을 좋아한다. 적어도 나는 명백한 것을 놓치지 않았습니다. –

+0

네트워크 장애 또는 대기 시간은 어떻게 처리합니까? – CMCDragonkai

+0

나는 그렇게하지 못했습니다. 작은 일 이었기 때문에 나는 이것을 모두하고있었습니다. 일반적으로 얼랭 (Erlang)과 TCP는 많은 일을 할 수 있습니다. 충분하지 않은 경우 네트워크 및 노드 오류를 감지하는 응용 프로그램 위에 추가 시스템을 구현해야합니다. – peter

관련 문제