2012-11-03 3 views
15

얼랭 (Erlang)을 모두 포함하는 접착제로 사용하여 클러스터를 구현하려고합니다. 나는 완전히 연결된 노드의 그래프를 생성한다는 생각을 좋아하지만 온라인으로 다른 기사를 읽는다면 이것은 잘 확장되지 않는 것처럼 보인다 (최대 50 - 100 개의 노드를 가짐). OTP 개발자는 이러한 제한을 목적에 부과 했습니까? 내가 명시 적으로 연결할 노드뿐만 아니라 숨겨진 된 노드 등 설정할 수 있습니다.하지만 기본 out-of-the-box 설치 매우 확장 성이 것 같습니다. 그래서 질문에얼랑 클러스터

:

  1. 당신이 5 개 노드를 한 경우 (A, B, C, D, E) 모두가 같은 A-B-C-D-E가 명시 적 연결을 한 것으로. Erlang/OTP는 A가 A가 E와 직접 대화 할 수 있도록 허용합니까? 아니면 A가 B에서 D를 통해 E를 통과해야만 E를 얻을 수 있습니까? 그렇기 때문에 이것이 완전히 연결된 그래프의 이유입니까? 다시 말하지만, 그것은 이해하지만, 내가 본 것에서는 잘 확장되지 않습니다.

  2. 확장 성 및 내결함성이있는 시스템을 사용하려는 경우 어떤 옵션이 있습니까? 마치 노드가 너무 많아서 완전히 연결된 그래프를 만들 수 없다면 다음으로 가장 좋은 것은 어떤 종류의 트리를 만드는 것입니다. 그러나 이는 루트 노드 나 자식 노드의 부모가 죽으면 클러스터의 상당 부분을 잃어 버리기 때문에 매우 내결함성이 없어 보입니다.

  3. 감독자와 작업자를 살펴보면 모든 예제에서이 작업이 단일 노드의 프로세스에 적용됩니다. 결함 허용을 구현하는 데 도움이되는 노드 클러스터에 적용 할 수 있습니까?

  4. 노드가 여러 클러스터에 속할 수 있습니까? 당신의 도움에 대한

덕분에, 반 최근의 웹 사이트 또는 블로그 게시물 내가 놓친 것 (오래된 약 1 년)이 있으면, 나는 그보고 드리겠습니다. 그러나 나는 인터넷을 꽤 잘 닦았다.

+0

관련 질문 : http://stackoverflow.com/questions/5044574/how-scalable-is-distributed-erlang? – Tilman

+0

CloudI를 살펴 보셨습니까? : http://cloudi.org/ – Tilman

답변

11
  1. 예를 들어 클러스터의 원격 노드에있는 프로세스 (예 : 프로세스 식별자 (pid))를 사용하여 메시지를 보낼 수 있습니다. 이를 위치 투명성이라고합니다. 그리고 예, 잘 확장됩니다 (Riak, CouchDB, RabbitMQ 등 참조).

  2. 하나의 노드가 수십만 개의 프로세스를 실행할 수 있습니다. Erlang은 확장 성이 뛰어나고 내결함성을 위해 제작되었습니다. 더 크게 만들기위한 다른 방법이 있습니다. CloudI의 SOA 접근법 (의견보기) 또한 이 실제로 인 경우 hidden nodes을 사용하는 클러스터를 구축 할 수 있습니다.

  3. 노드 레벨에서 다른 방법을 사용합니다. 예를 들어, 실패하고 나머지 노드가 작업을 대체하면 쉽게 대체 할 수있는 동일한 노드를 빌드하십시오. Riak이이 문제를 어떻게 처리하는지 확인하십시오 (riak_core을보고 블로그 게시물 Introducing Riak Core을 확인하십시오).

  4. 노드는 퇴장하여 클러스터에 들어갈 수 있지만 동시에 여러 클러스터의 일부가 될 수 없습니다. 연결된 노드는 연결된 노드를 식별하는 데 사용되는 하나의 클러스터 쿠키를 공유합니다. VM이 실행되는 동안 쿠키를 설정할 수 있습니다 (Distributed Erlang 참조).

더 잘 읽으려면 http://learnyousomeerlang.com/을 읽으십시오.

+0

왜 downvote? 의견을 부탁합니다. – Tilman

7

분산 프로토콜은 확장 성이 아닌 견고 함을 제공합니다. 클러스터를 작은 영역으로 그룹화 한 다음 얼랭 (Erlang)에서는 배포하지 않지만 TCP 세션에서는 연결을 사용하는 것이 좋습니다. 각각 10 개의 기계로 구성된 5 개의 그룹을 실행할 수 있습니다. 이것은 10 대의 기계가 Pid 분배가 원활하다는 것을 의미합니다. 다른 기계에서 pid를 호출 할 수 있습니다. 그러나 다른 그룹에 배포한다는 것은 그런 그룹을 원활하게 처리 할 수 ​​없다는 것을 의미합니다.

일반적으로 BGP에서와 같이 일종의 "경로 리플렉션"이 필요합니다.

1

1) 프로세스간에 통신하기 위해 노드간에 직접 연결이 필요하다고 생각합니다. 그러나 이는 두 노드가 절대 통신하지 않을 경우 (노드가 코디네이터가 아닌 근로자 만이라면) 모든 노드간에 영구 연결을 필요로하지 않는다는 것을 의미합니다.

2) 완전히 연결되지 않은 그래프 노드를 만들 수 있습니다. 설명서는 찾기가 어렵고 문제가 있습니다. 클러스터의 글로벌 이름을 처리하는 global 시스템을 사용하지 않도록 설정하면 로컬로 등록 된 이름이나 원격 노드에 로컬로 등록 된 이름으로 모든 작업을 수행해야합니다. 또는 Pids를 사용하면됩니다. 이와 같이 erlang 노드를 시작하려면 erl ... -connect_all false ...을 사용하십시오. 나는 네가 그 일을 믿을 수 없어 네가 뭘하고 있는지 알기를 바란다.

또한 완전히 연결되지 않은 erlang 노드의 그래프가 현재의 연구 주제 인 것으로 나타났습니다. RELEASE Project은 현재이를 정확히 수행하고 있으며 본질적으로 완전히 연결된 그룹 인 S 그룹의 개념을 제안했습니다. 그러나 노드는 둘 이상의 S 그룹의 구성원이 될 수 있으며 별도의 s 그룹의 노드는 완전히 연결될 필요는 없지만 직접 노드 간 통신을 수행하는 데 필요한 연결을 설정할 수 있습니다. 연구가 정말 재미 있기 때문에 프레젠테이션을 찾을 가치가 있습니다.

다른 지적 할만한 점은 완전히 연결된 클러스터에서 최대 150-200 개의 노드를 얻을 수 있다는 것을 여러 사람이 발견 한 것입니다. 그보다 더 많은 노드에 대한 유스 케이스가 있습니까? 분명히 150-200 대의 믿을 수 없을 정도로 무거운 컴퓨터가 당신이 할 수있는 말도 안되는 프로젝트가 없다면, 당신이 그들에게 던질 수있는 대부분의 일을 할 것입니다.

3) gen_server:start_link/3,4을 사용하여 다른 노드에서 프로세스를 시작할 수는 없지만 확실히 외부 노드의 서버를 쉽게 호출 할 수 있습니다. 그들은 외부 노드에서 서버를 시작할 수 있다는 것을 간과 한 것 같지만, 그럴만한 이유가 있습니다. 예를 들어 어리석은 오류 사례가 있습니다.

4) 숨겨진 노드를보고 완전히 연결되지 않은 클러스터가 있는지 확인하십시오. 자신이 적합하다고 생각하는대로 노드를 그룹화 할 수 있어야합니다.

TL : DR : 확장이 어렵고 쇼핑하러 가야합니다.

0

이미 좋은 답변이 있으므로 간단하게하려고합니다.

1) 아니요, AE이 직접 연결되어 있지 않으면 AE과 통신 할 수 없습니다. 배포 프로토콜은 직접 TCP 연결에서 실행됩니다. 라우팅은 포함되지 않습니다.

2) 트리 구조가 충분하다고 생각합니다. 트레이드 오프가 항상 존재합니다.

3) '노드 관리자'는 없지만 erlang:monitor_node은 친구입니다.

4) 예. 노드는 다른 '클러스터'의 노드와 통신 할 수 있습니다. 로컬 노드에서 다른 쿠키가있는 원격 노드에 액세스하려면 erlang:set_cookie(OtherNode, OtherCookie)을 사용하십시오.

0

1) 예. 그들은 서로 이야기합니다.

2) 3) 및 4) 일반적으로 말하자면 확장 가능하고 내결함성이있는 시스템을 구축 할 때 작업 부하를 서로 다른 "지역"또는 " 클러스터 ". 감독자/근로자 모델은 이렇게 토폴로지를 구상합니다. 필요한 것은 클러스터 간의 작업을 조율하는 몇 가지 프로세스와 단일 클러스터 내의 모든 작업자가 그룹 내에서 균형을 유지하기 위해 서로 이야기하는 것입니다.

이 토폴로지에서 볼 수 있듯이 "제한 사항"은 작업을 신중하고 균형 잡힌 방식으로 나누는 한 실제로 제한 사항이 아닙니다. 개인적으로, 저는 감독자 프로세스를위한 구조와 같은 나무가 대규모 시스템에서는 피할 수 없다고 생각합니다. 이것이 제가 따르는 관행입니다. 이유는 다양하지만 확장 성, 폴백 허용, 폴백 허용 정책 구현, 유지 관리 필요성 및 클러스터의 이식성 등이 있습니다. 그래서 결론에

,

2) 당신의 감독자 나무 같은 토폴로지를 사용합니다. 노동자들이 명시 적으로 서로 연결되어 자신의 영역 내에서 상사와 이야기 할 수있게하십시오.

3) 이것은 네이티브 설계 환경이지만, 저는 관리자가 다른 시스템의 작업자와 대화 할 수 있다고 확신합니다. 내결함성은 원격 작업자 시나리오에서 지옥이 될 수 있으므로이 제안을하지 않을 것입니다.

4) 노드가 동시에 두 개의 다른 클러스터의 일부가되도록해서는 안됩니다. 하나의 클러스터에서 다른 클러스터로 전환 할 수 있습니다.