노드 간 통신 채널 미세 조정

전송:http://blog.yufeng.info/archives/36
erlang 노드 간 통신 은 설정 할 수 있 습 니 다.기본 값 은 inet 입 니 다.tcp 。두 노드 가 소통 하려 고 할 때 netkernel 모듈 은 필요 한 연결 을 만 드 는 것 을 책임 집 니 다.inet_tcp 는 밑 에 있 는 gen 을 호출 합 니 다.tcp 데이터 전송 수락.rpc 나 노드 간 의 메시지 상호작용 은 모두 이 port 를 통 해 나 갑 니 다.
분포 노드 간 에 가끔 대량의 정보 가 흐 르 면 모든 소식 이 이 port 를 통 해 들 어 오기 때문에 이 port 의 성능 은 노드 간 통신 의 효율 에 큰 영향 을 미친다.그러면 가끔 우 리 는 이 port 의 인 자 를 미세 조정 하여 업무 의 특징 에 따라 효율 을 극 대화 하려 고 합 니 다.그러나 port 는 어떻게 얻 습 니까?
node_port(Node)->
    {_, Owner}=lists:keyfind(owner, 1, element(2, net_kernel:node_info(Node))),
    hd([P|| P<-erlang:ports(), erlang:port_info(P, connected) == {connected,Owner}])

Port 가 있 으 면 tcp port 의 수위 선,buffer 등 을 설정 할 수 있 습 니 다.
inet:setopts(node_port('xx@nd-desktop'), [{high_watermark, 131072}]).

또한 nodeup nodedown 이 tcp 링크 를 바 꿀 수 있 으 니 다시 가 져 오 는 것 에 주의해 야 합 니 다.
또 다른 방법 이 있 습 니 다.모든 gen 을 설정 합 니 다.tcp 의 행동,예 를 들 어 다음 과 같은 방법:
erl -kernel inet_default_connect_options '[{sndbuf, 1048576}, {high_watermark, 131072}]'

그러나 이 영향 면 은 매우 커서 정상 tcp 의 매개 변수 에 영향 을 주 었 다.

좋은 웹페이지 즐겨찾기