2012-07-04 2 views
3

누군가가 매우 간단한 용어로 서비스를 확장하는 방법을 설명 할 수 있습니까? (서비스가 매우 간단하고 X() 함수라고 가정하십시오).확장 가능한 코드 작성

이것을 확장 가능하게 만들려면 X를 실행하려는 각 클라이언트에 대해 새 노드 (하드웨어에 따라 최대 값까지)를 실행하면됩니까?

그래서 하드웨어 상자가 4 개있는 경우 서비스 X()를 실행하기 위해 노드를 최대 4 개까지 실행할 수 있습니다. 5 번째 클라이언트 요청에서 첫 번째 노드에서 X()를 실행하고 두 번째 노드에서 6 번째 클라이언트 기타?

다음은 로컬에서 프로세스를 생성하는 방법을 알고 있지만 첫 번째 클라이언트와 다섯 번째 클라이언트가 동일한 노드 1을 사용하게하려면 클라이언트 노드마다 프로세스를 원격으로 생성해야합니다 시각?

간단한 예제가 가장 환영합니다!

+0

나는 잘 모르겠다. 노드를 통해 로빈을 돌리는 기술이 필요합니까? 그렇다면 Nodes = [node() |를 사용하여 목록을 순환 할 수 있습니다. nodes()]는 n 번째 (길이 (노드) - (카운터 길이 (노드)), 노드)를 나열합니다. 아니면 그런 식으로. – Isac

+0

@Isac, Im은 코드를 확장 할 때와 같이 작업을 원격 노드에 오프로드해야하는 기능과 기본 코드에 관심이 있습니다. 따라서 X()를 다른 상자에서 실행하려면 어떻게해야합니까? 감사 – user997112

답변

3

이것은 X가 무엇인지에 따라 다릅니다. X가 완전히 독립적 인 경우 (예 : x() -> 37.) 노드를 연결할 필요조차 없습니다. 단순히 표준 Load Balancer를 시스템 (HAProxy, Varnish 등) 앞에두기 만하면 모든 종류의 분산 통신을 잊어 버릴 수 있습니다. 실제로 Erlang을 사용할 필요가 없습니다. Erlang을 원하는 다른 언어로 바꾸십시오. 그것은 똑같이 좋다.

Erlang이 빛나는 곳은 여러 X 기능이 서로 다른 결과에 종속되어 있고 X가 다른 실제 컴퓨터에있을 때입니다. 이 경우 Erlang은 다른 노드에 있더라도 다른 X와 원활하게 통신 할 수 있습니다.

Erlang에서 라운드 로빈 방식을 구현하려는 경우 가장 쉬운 방법은 단일 입력 지점을 갖는 다음 요청을 여러 노드로 전달하는 것입니다. 그러나 특정 노드가 모든 장기 실행 프로세스로 끝나는 패턴이 있으면 이것은 나쁘다. 라운드 로빈 큐에 가중치를 부여하는 방법을 알기 위해 피드백 메커니즘을 구축해야합니다.