2009-02-04 4 views
4

얼랭 표준 라이브러리에 일종의 '로드 밸런서'가 있는지 아는 사람 있습니까? 내 말은, 정말로 큰 데이터 집합에 대해 아주 간단한 작업을 수행하면 모든 항목에 대한 프로세스를 구성하는 오버 헤드가 작업을 순차적으로 수행하는 것보다 더 클 것입니다. 그러나 프로세스의 '올바른 번호'로 작업의 균형을 잡으면 성능이 향상되므로 기본적으로이 작업을 수행하는 쉬운 방법이 있는지 묻습니다.Erlang의 프로세스 밸런싱

그런데, OTP 애플리케이션이 어떤 종류의 균형로드를 수행하는지 아는 사람이 있습니까? OTP 애플리케이션에는 "작업자 프로세스"(java-ish 스레드 작업자와 같은)의 개념이 있습니까?

답변

3

plists 모듈이 원하는대로 작동 할 것입니다. 기본적으로는 lists 모듈의 병렬 구현으로 드롭 인 대체품으로 사용됩니다. 그러나 생성 된 작업자 프로세스 수 등을 정의하여 작업을 병렬화하는 방법을 제어 할 수도 있습니다.

목록 또는로드의 길이에 따라 일부 작업자 수를 계산하면됩니다 시스템 등 웹 사이트에서

의 :

속성 목록 드롭 인 교체 얼랭 모듈 목록의 대부분의 목록 작업 평행을 만들기입니다. 그것은 클러스터 내부 parallizing에 대한 얼랑 노드, 를 통해 CPU 바인딩 운영과 멀티 코어 시스템을 활용하기위한 병렬 하위 목록 에 병렬로 각 요소, IO-바인딩 작업 에 작동 할 수 있습니다 . 그것은 오류와 노드 실패를 처리합니다. 은 최적의 성능을 얻으려면 을 구성, 조정 및 조정할 수 있으며 은 오버 헤드를 최소화합니다.

13

모듈 pg2pool을 참조하십시오.

pg2은 매우 단순한 분산 프로세스 풀을 구현합니다. pg2:get_closest_pid/1은 "가장 가까운"pid, 즉 사용 가능한 경우 임의의 로컬 프로세스를 반환하고 그렇지 않으면 임의의 원격 프로세스를 반환합니다.

pool은 모듈 slave으로 시작된 노드간에로드 균형 조정을 구현합니다.

0

예를 들어 측정하지 않고 기계적으로 비용을 예측하는 방법은 없습니다. 어떤 사람은 어떤 종류의 작업을 위해 작업을 분할하는 방법을 결정해야합니다. 로드 밸런서 단어에서 저는 여러분의 질문과 다른 것을 이해합니다.

1

내보기에는 유용하지 않은 일반적인로드 균형 조정 도구가 otp에 있습니다. 그리고 특정 경우에 하나만 갖는 것이 유용 할 수도 있습니다. 스스로 구현하기는 쉽습니다. plists는 동일한 경우에 유용 할 수 있습니다. 나는 실세계의 대체물로서 평행선을 믿지 않는다. Amdahl이 길을 걸어도 영원히 당신을 괴롭힐 것입니다.

올바른 작업자 프로세스 수는 스케줄러 수와 같습니다. 이는 시스템에서 수행되는 다른 작업에 따라 다를 수 있습니다. 사용,

erlang:system_info(schedulers_online) -> NS 

스케줄러 수를 얻으려면.

시스템에 많은 수의 작업자 프로세스가 넘쳐 흐르게 될 때의 오버 헤드 개념은 다소 결함이 있습니다. 새로운 프로세스에는 오버 헤드가 있지만 os- 스레드에는 오버 헤드가 없습니다. 주 오버 헤드는 프로세스 간 메시지 복사입니다. 바이너리에 대한 참조 만 전송되므로 바이너리 사용으로이 문제를 해결할 수 있습니다. eterms를 사용하면 구조가 먼저 확장되어 다른 프로세스로 복사됩니다.