이제 우리는 2 개의 얼랭 노드로 구성된 애플리케이션을 설계한다고 가정 해 보겠습니다. 노드 A에서는 매우 많은 프로세스가 수천 개가 될 것입니다. 노드 A에 노드 대 노드 처리량, 시간 초과 및 보증
start_server()-> register(zeemq_server,spawn(?MODULE,server,[])),ok., 실행하고자하는 모든 프로세스 : 노드 B 노드 B에서
server()-> receive {{CallerPid, Ref}, {Module, Func, Args}} -> Result = (catch erlang:apply(Module, Func, Args)), CallerPid ! {Ref, Result}, server(); _ -> server() end.
에 등록 된 프로세스로 메시지를 전송하여 노드 B에 이러한 프로세스 액세스 자원은 다음과 같은 기능을 실행하여 시작하는 과정이 말할 수 그래서 노드 B에서 해당 프로세스
zeemq_server
가정
call(Node, Module, Func, Args)-> Ref = make_ref(), Me = self(), {zeemq_server,Node} ! {{Me, Ref}, {Module, Func, Args}}, receive {Ref, Result} -> Result after timer:minutes(3) -> error_logger:error_report(["Call to server took so long"]), {error,remote_call_failed} end., 아래 수 없을 것이며, 노드 A와 B 사이의 네트워크 연결이 항상 즉, 답변을하시기 바랍니다 : 노드 B에 해당 모듈의 모든 기능은 다음 코드 조각을 사용하여 다음 질문 :
QN 1 : 노드 B에 하나의 수신 프로세스가 있기 때문에, 그 메일 상자가 가득 차있을 가능성이 가장 높은 모든 시간. 이는 프로세스가 노드 A에서 많고 일정한 간격 (예 : 2 초)으로 모든 프로세스가 적어도 노드 B 서버에 대한 단일 호출을하기 때문입니다. 노드 B에서 어떤 방식으로 수신이 중복 될 수 있습니까? 예를 들어 프로세스 그룹 e.t.c 위의 서버 측 코드를 대체하는 방법 (개념)을 설명하십시오. 클라이언트 측에서 어떤 변화가 일어날 지 보여주십시오.
QN 2 : 노드 B에 하나 개의 수신기가있는 상황에서, 공정 메일 상자로 허용 메시지의 최대 수는있다? 단일 프로세스 메일 ox에 너무 많은 메시지가 넘치면 erlang이 어떻게 응답합니까?
Qn 3 : 위의 개념을 사용하면 요청을 보내는 모든 프로세스가 가능한 빨리 응답을 얻도록 보장 할 수 있습니까? 노드 B의 수신부를 병렬 작업으로 변환 할 수 있습니까? 이 같은
start_server()-> register(zeemq_server,spawn(?MODULE,server,[])),ok.이 방법은 전술 하였다, 노드 B에서 실행중인 프로세스의 일시 수를 증가 할 수 있으며, 이는 메모리에 크게 서비스에 영향을 미칠 수있다. 그러나, 그것은 좋아 보인다 및
server()-> receive {{CallerPid, Ref}, {Module, Func, Args}} -> spawn(?MODULE,child,[Ref,CallerPid,{Module, Func, Args}]), server(); _ -> server() end.
child(Ref,CallerPid,{Module, Func, Args})-> Result = (catch erlang:apply(Module, Func, Args)), CallerPid ! {Ref, Result}, ok.
server()
루프는 즉시 다음 요청을 처리 반환합니다. 이 수정에 대한 당신의 생각은 무엇입니까? 마지막으로
: 당신이 노드 B에
Pool of receiver Threads
을 구현하는 예, 아직, 수신 메시지는 수신 스레드 사이에 다중화하고, 부하가 프로세스의이 그룹 내에서 공유 노드 A와 같은 관하여 하나 Name
아래로 등장 . 문제의 의미를 동일하게 유지하십시오. 감사합니다.
Erlangers
!
이것은 java와 관련이 있습니까? –
My Apologies @Quoi –
너무 많은 답변을 얻지 못했지만 결국 나에게 묻지 않았던 것은 무엇이냐고 묻습니다. –