`
qiezi
  • 浏览: 492142 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

erlang分布式节点通讯方式

阅读更多
搜到这篇:
erlang网络编程的几个性能调优和注意点

早看到这个就好了,我也是用strace发现它用的是poll,顺便搞清楚了erlang的分布式节点通讯方式。

erlang分布式节点通讯,A节点连接B节点,如果在同一机器上,只需要进程间通讯就可以找到节点。不在同一台机器上,A先连接B所在机器的4369端口,寻找节点。如果找到,就通知B节点监听一个端口,再回复A让它连接这个端口。

监听4369端口的是个后台进程epmd,在linux上它使用select,它只建短连接。windows上是epmd.exe。在linux上,节点的监听端口使用poll,指定+K true参数以后,会使用epoll,当然需要编译时打开开关。

每个节点只会监听一个端口,2个节点之间建立连接后,节点之间任意方向的通讯都会走这条连接,这种通讯方式是最合理的,我在做服务器间通讯时也想这种方式,不过这种方式通常是异步操作,所以一直没去实现它,目前服务器间都是临时建短连接,一般通讯量都不大,用做cache同步,腾讯好像也是这么干的。

多个节点之间遵循的规则如下:
1、每个节点只监听一个端口。
2、A节点连接B节点,还没有建立连接,则A connect到B;如果B还没有监听端口,就开一个端口监听。

这种方式可以保证任意两节点之间断开连接,不影响其它节点。
分享到:
评论
1 楼 mryufeng 2007-10-19  
节点启动的时候 会把自己监听的端口 汇报到epmd去 其他连接要联机它的时候 根据node名称向epmd质询listen端口 然后发起连接。 这个过程由net_kernel模块负责协调。

http://mryufeng.iteye.com

相关推荐

    Erlang分布式节点中的注册进程使用实例

    主要介绍了Erlang分布式节点中的注册进程使用实例,本文直接给出实例代码,需要的朋友可以参考下

    EdpBench:Erlang 分布式协议 (EDP) 基准

    Erlang分布式协议基准这是一个基准生成器,用于测量 Erlang 和 Java 节点之间的消息和字节传输速率。 它使用网络上的和包来创建 Java 节点,该节点知道 Erlang 端口映射器( )、数据类型及其分布式协议。基准为了...

    introducing erlang

    ● 分布式 - 一个分布式Erlang系统是多个Erlang节点组成的网络(通常每个处理器被作为一个节点) ● 健壮性 - Erlang具有多种基本的错误检测能力,它们能够用于构建容错系统。 ● 软实时性- Erlang支持可编程的“软...

    scalang:Scalang是一个scala包装器,可以轻松编写与erlang交互的服务

    Scalang包含Erlang分布式节点协议的完整实现。 它提供了一个面向参与者的API ,该API可用于以惯用的,符合OTP的方式与Erlang节点进行交互。 Scalang基于Netty构建其网络层,基于Jetlang构建其actor。 安装 从Maven...

    Erlang-In-Docker:通过重新实现 net_kernel 使用的分布式连接协议,启用来自不同主机上的不同 docker 容器的 Erlang VM 之间的连接

    Erlang-In-Docker 使中的Erlang连接distributed dockers (在不同的主机搬运... 下图展示了 Erlang 节点的连接建立过程:Docker 中的 Erlang 网络分布式Docker之间连接节点的困难分布式docker之间很难连接节点,因为:

    erlang-18.3.4.7-1.el6.x86_64.rpm

    ● 分布式 - 一个分布式Erlang系统是多个Erlang节点组成的网络(通常每个处理器被作为一个节点) ● 健壮性 - Erlang具有多种基本的错误检测能力,它们能够用于构建容错系统。 ● 软实时性- Erlang支持可编程的“软...

    Erlang安装手册

     ● 分布式 - 一个分布式Erlang系统是多个Erlang节点组成的网络(通常每个处理器被作为一个节点)  ● 健壮性 - Erlang具有多种基本的错误检测能力,它们能够用于构建容错系统。  ● 软实时性- Erlang支持可...

    Python-Riak是以Erlang编写的一个高度可扩展的分布式数据存储

    Riak是以 Erlang 编写的一个高度可扩展的分布式数据存储,Riak的实现是基于Amazon的Dynamo论文,Riak的设计目标之一就是高可用。Riak支持多节点构建的系统,每次读写请求不需要集群内所有节点参与也能胜任。、

    epmdpxy:使用 Erlang Port Mapper Deamon 模拟 Netsplits

    EPMDPXY - Erlang 端口映射器守护进程的代理 EPMDPXY 模拟了 EPMD 的基本功能,足以让本地 ... 分布式 Erlang 节点连接到 EPMD 并将其节点名称与随机侦听器端口一起注册,该端口用于接受来自集群中其他节点的连接 ( A

    mykv:用ErlangOTP编写的分布式键值存储

    关于Mykv是用Erlang / OTP编写的分布式键/值存储。 它使用Mnesia作为后端。 这个应用程式是为学习目的而建立,不适合在生产应用程式中使用。建造Mykv使用 。 $ git clone https://github.com/ferigis/mykv.git$ cd ...

    erlything:用 Erlang 编写的分布式物联网运行时

    概述1:wq erlyThing 是一个用 Erlang 编写的去中心化、分布式基于消息的事物平台。特征去中心化系统。 通过消息进行通信的分布式系统在运行时启动和停止事物事物理解的消息的配置配置文件的动态处理(things.config ...

    rabbitmq3.6.9集群搭建.doc

    通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服务为对等节点,即每个节点都提供服务给客户端连接,进行消息发送与接收。   这些节点通过 RabbitMQ HA 队列(镜像队列...

    ERLANG和PYTHON互通实现过程详解

    最近开发 Erlang ,对其字符串处理能力无言至极,于是决定把它和python联合起来,打造一个强力的分布式系统,等将来需要系统级开发时,我再把 C++/C组合进来. 首先参考了 Erlang 官方文档和 ...

    eixx:Erlang C ++接口

    分布式节点连接(包括在connect.hpp或eixx.hpp中) 库的术语编组部分具有以下功能: 使用单个函数调用(eterm :: encode()和eterm :: eterm()构造函数)对嵌套术语进行编码/解码。 全局原子表,用于原子的快速...

    一个用Erlang公告栏系统

    在一个局域网内构造 BBS 集群, Erlang、负载均衡技术, 这... 长期目标(或许永远不会实现): 在因特网范围内构造分布式 BBS,“分布式”指提供 BBS 服务 的节点不是固定的,类似于 skype 传说中的 super node, 参考 ...

    raftex:筏共识算法在ElixirErlang中的实现

    拉夫特克斯使用分布式有限状态机( gen_fsm )在Elixir / Erlang中实现。什么是共识/什么是筏? 从: 共识是容错分布式系统中的一个基本问题。 共识涉及多个服务器就价值... 使用5个分布式节点运行仿真: iex(1)> Raf

    binbo:使用Bitboards以Erlang编写的国际象棋表示,可以在游戏服务器上使用

    由于Binbo本身就是OTP应用程序,因此它可以充当在分布式Erlang节点上运行的多个国际象棋引擎的核心(关于移动生成和验证)。 此外,该应用程序还可以与()的进行通信,例如Stockfish , Shredder和Houdini等。...

    local-cluster:轻松为 Elixir 创建本地集群以帮助进行单元测试

    整个库是围绕 Erlang API 进行简单的填充,用于处理分布式节点,由于其中一些不明显,并且由于我需要将此代码用于多个项目,因此我将其扩展为一个较小的项目。安装要为您的项目安装它,您可以直接从 Hex 中提取它。...

    魔兽争霸:一种分布式多人浏览器游戏

    它是分布式游戏引擎的实现。 游戏的目的是产生单位以摧毁对手的基地。 要开始游戏,只需从游戏页面(/游戏)创建一个适当大小的游戏,然后与您的朋友共享游戏网址。 控制项 使用标准的wasd键生成单元,并使用arrow...

    merklet:Merkle树用于Erlang中的数据复制

    重新实现了Riak的旧merkle树模块,但以更具可读性的方式(根据我)。 其他区别包括: 重命名某些功能仅仅是因为 插入只需要二进制代码作为键和值,而对散列不做任何假设。 删除节点不会将空的内部节点保留为树的一...

Global site tag (gtag.js) - Google Analytics