문제

Erlang 표준 라이브러리에 일종의 '로드-밸런서'가 있는지 아는 사람이 있습니까? 정말 큰 데이터 세트에 대해 정말 간단한 작업이 있으면 모든 항목에 대한 프로세스를 구성하는 오버 헤드가 순차적으로 작업을 수행하는 것보다 클 것입니다. 그러나 작업의 '올바른 숫자'의 균형을 맞출 수 있다면 더 잘 수행 될 것이므로 기본적 으로이 작업을 수행 할 수있는 쉬운 방법이 있는지 묻습니다.

그건 그렇고, OTP 응용 프로그램이 균형로드를하는지 아는 사람이 있습니까? OTP 응용 프로그램에는 "작업자 프로세스"(Java-ish Thread Worker와 같은)의 개념이 있습니까?

도움이 되었습니까?

해결책

그만큼 plists 모듈은 아마도 당신이 원하는 것을 할 것입니다. 기본적으로 병렬 구현입니다 lists 모듈, 드롭 인 교체로 사용되는 설계. 그러나 예를 들어 얼마나 많은 작업자 프로세스를 생산 해야하는지를 정의하여 운영을 병렬화하는 방법을 제어 할 수 있습니다.

목록의 길이 또는 시스템의로드에 따라 일부 수의 근로자를 계산하여 할 것입니다.

웹 사이트에서 :

Plists는 Erlang 모듈 목록의 드롭 인 교체품으로 대부분의 목록 작업을 병렬로 만듭니다. CPU 결합 작업이있는 멀티 코어 머신 및 Erlang 노드에 걸쳐 클러스터 내부의 평행을 활용하기 위해 각 요소에서 IO- 결합 작업, 하위 목록에서 동시에 동작할 수 있습니다. 오류 및 노드 고장을 처리합니다. 오버 헤드를 최소화하면서 최적의 성능을 얻기 위해 구성, 조정 및 조정할 수 있습니다.

다른 팁

모듈을 참조하십시오 pg2 그리고 pool.

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

pool 모듈로 시작된 노드간에로드 밸런싱을 구현합니다 slave.

내 생각에 OTP에는 유용한 일반로드 밸런싱 도구가 없습니다. 그리고 아마도 특정 경우에 하나만 있으면 유용 할 것입니다. 직접 구현하는 것은 쉽습니다. 동일한 경우에도 의사 소환이 유용 할 수 있습니다. 나는 평행 라이브러리를 실제의 대체물로 믿지 않습니다. 당신 이이 길을 걷는다면 Amdahl은 당신을 영원히 괴롭힐 것입니다.

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

erlang:system_info(schedulers_online) -> NS

스케줄러 수를 얻으려면.

풍부한 작업자 프로세스로 시스템을 침수 할 때 오버 헤드라는 개념은 다소 결함이 있습니다. 새로운 프로세스로는 오버 헤드가 있지만 OS- 스레드만큼 많지는 않습니다. 주요 오버 헤드는 프로세스간에 메시지 복사이며, 이진에 대한 참조 만 전송되므로 바이너리 사용으로 완화 될 수 있습니다. Eterms를 사용하면 구조가 먼저 확장 된 다음 다른 프로세스에 복사됩니다.

측정하지 않고 기계적으로 작업 비용을 예측하는 방법은 없습니다. 어떤 사람은 일부 클래스의 작업을 위해 작업을 분할하는 방법을 결정해야합니다. 로드 밸런서 단어에서 나는 당신의 질문에서 매우 다른 것을 이해합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top