`
guibin
  • 浏览: 364149 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

分布式的Erlang/OTP介绍

阅读更多
分布式的Erlang/OTP介绍
guibin.beijing@gmail.com

Erlang仅仅能在具有相同的magic cookie系统之间的直接对话。如果想要在几台机器之间运行相互通信的Erlang程序,最简单的方法就是放置一个名叫".erlang.cookie"的文件在每个机器的$HOME目录里,并且把该文件的权限设置为400,该文件的内容即cookie名字。400权限意味着该文件仅能被此文件的owner访问。
引用
$ cd
$ cat  .erlang.cookie
this is very secret
$ chmod 400 .erlang.cookie


Erlang支持分布式通信的两大基石
1. 进程间通过拷贝通信(Process communication by copying)
2. 透明的位置信息(Location transparency)

Erlang自己会保证进程标识符在运行网络上的唯一,即便是跨机器(Erlang guarantees that process identifiers are unique on the network, even across  machines.)也一样。

每一个Erlang VM都叫作一个节点(Node),当两个或者多个Node都知道了对方之后,这些节点就形成了集群(Cluster)。Erlang集群默认情况下是完全连接(fully connected)的,即Erlang集群中的每一个节点都知道每一个其他的节点,并且相互之间能够直接通信。正因为如此,在实际中Erlang通常只有几十个节点,一般不会有几百个或者更多的节点,因为在完全连接的网络中,节点越多,保持节点之间的通信开销越大。

但是可以通过某个特殊的节点,将多个cluster连接成一个更大的cluster,这样的cluster不是完全连接的,cluster直接是通过这个特殊的节点连接的。

在Erlang集群中,节点不会主动去寻找其他节点,除非他寻找其他节点有事要做;在找到其他节点之后,他们会相互追踪对方,并且交换彼此所知道的其他节点信息,以便于形成一个完全连接的网络。

每个节点都有自己的名字(Name),其他节点就是通过这个名字来查找到该节点,并且与之交互。通过内建函数node()可以取得当前节点的名字,节点的名字格式为: nodename@hostname。如果一个节点运行在非分布式模式下,则该节点的名字默认是nonode@nohost。在单台机器上允许同时运行多个节点。

如何启动一个节点?
启动一个节点可以使用命令
引用
erl -name my_node_name

-name选项用在有DNS正常工作的普通网络中,即可以正常使用完全限定名(fully qualified name)的网络环境中。
或者
引用
erl -sname my_node_name

当完全限定名(fully qualified name)不起作用的时候,使用-sname选项。这种情况经常发生在局域网的生产环境中。比如在局域网中不能通过域名访问其他机器时,你只能使用短名称(sname)访问。
只要所有节点都在同一个子网中,短名称就起作用。

使用短名称和长名称的节点会使用不同的通信模式工作。在同一个Erlang集群中,所有节点必须使用统一的通信模式,或者使用长名称,或者都是用短名称,不可混用。

当Erlang VM作为一个节点运行时,他的节点名称会显示在命令行提示符中,比如我启动了一个名叫guibin的短名称节点:
引用
$ erl -sname guibin
Erlang R14B01 (erts-5.8.2) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.8.2  (abort with ^G)
(guibin@localhost)1>


Erlang nodes是如何找到对方并通信?
负责Erlang节点间通信的是一个叫作epmd(Erlang Port Mapper Daemon)的后台线程。如下:
引用
$ ps ax | grep epmd
  305   ??  S      0:00.02 /opt/local/lib/erlang/erts-5.8.2/bin/epmd -daemon
  513 s003  U+     0:00.00 grep epmd

当启动一个node时,node会检查本机是否有epmd在运行,如果没有则启动epmd。epmd启动之后会跟踪记录所有本机运行的node和这些node被分配的端口号。
当一个在本机的node想和远程的node通信时,本地的epmd首先会和远程的epmd通信(默认在4369端口上使用TCP/IP),询问是否有相应的node在那里运行。如果有,则远程的epmd会响应请求,并直接和本地的epmd通信。
但是epmd不会自动去寻找其他的epmd,这些通信和寻找过程必须被node的查找操作触发。

注意:Erlang默认的分布模型是基于所有集群中的机器都运行在一个被信任和可靠的网络中。如果实际运行的网络环境并非如此信任和可靠,而是通过广域网连接,则集群中的机器间通信应该直接使用TCP(或者UDP,或者SCTP)。或者也可以基于SSL、SSH或者IPsec建立隧道通信。

Erlang基于cookie的安全系统
如果在一台机器上至少启动过一次node之后,就会生成cookie文件。初次启动node,node会自动生成由随机字符串组成的cookie。默认情况下,一个node认为其他的能和他通信的node都具有相同的cookie
推荐只有owner才对cookie文件具有读的权限,即400。

Erlang分布式控制常用命令选项
命令erl用来启动Erlang的运行时系统(Erlang runtime system)。
引用
-name NodeName

这个选项使得启动的Erlang的运行时系统处于分布式模式下,节点名称为NodeName@FullyQualifiedName。
引用
-sname NodeName

这个选项使得启动的Erlang的运行时系统也处于分布式模式下,节点名称为NodeName@ShortName。
引用
-setcookie Cookie

该选项设置当前节点的Magic Cookie为Cookie,而不使用默认的~/.erlang.cookie中的内容作为Cookie。
引用
-connect_all false

这个选项设置该启动节点和其他Erlang节点的连接模式为非完全连接,即该节点仅仅保存和他直接通信的节点状态,非直接连接的节点状态不理会。

1
0
分享到:
评论
3 楼 techabc 2012-04-16  
负载均衡是如何实现的呢?
2 楼 viweei 2011-09-11  
真的挺好的,一般我都是匿名看东西的。大半夜的忍不住大半夜的登陆上来支持博主一下。要是再呢深入一点就好了。
1 楼 viweei 2011-09-11  
写的挺好的。

相关推荐

    51单片机上实现贪吃蛇小游戏.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    小程序-4-node基于微信小程序的学生宿舍管理系统-源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    grpcio-1.23.1-cp35-cp35m-win32.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    Kotlin-master.zip

    Kotlin-master.zip

    html5-event-calendar-open-source-asp.net-core.20231120.zip

    在本文中,我们将构建一个简单的HTML5事件日历Web应用程序。客户端(HTML5/JavaScript)部分是通用的。我们使用示例PHP和ASP.NET Core后端。本文着眼于使用日期选择器(左侧)更改日历日期、拖放事件创建、移动和调整大小、使用CSS主题、PHP后端和ASP.NET Core后端(REST API)一键更改外观。

    计算机网络(第8版)-PPT课件(全9章).zip

    计算机网络(第8版)-PPT课件(全9章).zip

    aiohttp-3.8.1-cp38-cp38-musllinux_1_1_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    基于C++、Qt实现底层绘图算法的绘图系统.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    财务软件云的好还是客户端的好?易舟云深度解析.docx

    财务软件云的好还是客户端的好?易舟云深度解析 在现代企业管理中,财务软件的重要性不言而喻。而易舟云作为一款深受市场欢迎的财务软件,提供了云端和客户端两种使用方式。那么,财务软件云的好还是客户端的好呢?本文将为你详细解析。 财务软件云的优势 高效便捷 【图片:云端工作】 使用云端财务软件,你可以随时随地通过网络访问你的财务数据。无论是在公司、家中还是出差途中,只要能连接到互联网,就能轻松管理财务。 数据安全 【图片:数据安全】 云端财务软件通常具备多层次的数据安全防护措施,比如数据加密、定期备份等,保障你的数据安全无忧。 灵活扩展 【图片:灵活扩展】 随着企业的成长,云端财务软件可以根据需求进行灵活扩展,满足不断变化的财务管理需求。 客户端财务软件的优势 离线工作 【图片:离线工作】 客户端财务软件可以在不连接互联网的情况下工作,适合网络环境不佳或者对数据安全性有特别要求的用户。 功能丰富 【图片:功能丰富】 客户端财务软件通常功能更为丰富,满足不同行业、规模企业的财务管理需求。 更好的用户体验 【图片:用户体验】 客户端软件通常能提供更加流畅的用户体验,响应速度快,操作更加

    108-微信小程序-汽车测评小程序.zip

    源代码+截图

    cryptography-1.7.1-cp35-cp35m-win_amd64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    基于Springboot和Vue教务评教系统(PC端+server端源码+数据库MySQL脚本+环境部署步骤讲解+运行步骤讲解)

    服务宗旨:有任何问题私信我 适合人群:工作中项目需要、模板框架实战学习、大学毕业设计参考、找工作项目实战积累等等

    aiohttp-3.7.0b1-cp37-cp37m-manylinux2014_i686.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    基于springboot+Mysql+微信小程序的图书捐赠管理系统-1.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    aiohttp-3.9.4-cp38-cp38-musllinux_1_1_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    cryptography-1.5-cp34-cp34m-win_amd64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    cryptography-2.3-cp35-cp35m-win_amd64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    基于Java的BS结构下的OA流程可视化毕设(源码+使用文档)

    系统概述 BS结构下的OA流程可视化系统通常包括以下几个关键组件: 前端界面(UI):提供用户交互界面,使用HTML/CSS/JavaScript等技术。 后端服务:处理业务逻辑,使用Java相关的框架如Spring Boot。 数据库:存储流程定义、流程实例、任务、用户等数据。 工作流引擎:管理和执行业务流程的逻辑。 流程设计器:允许用户设计和修改流程图。 主要功能 流程定义和管理:允许用户定义新的工作流程和编辑现有流程。 流程实例创建:根据定义的流程创建实例,并进行跟踪和管理。 任务分配和执行:将流程中的任务分配给用户,并执行任务。 流程监控和可视化:实时监控流程状态,并通过图形化展示流程进度。 报表和统计:生成流程执行的报表和统计信息。 技术架构 Java:作为主要的后端编程语言。 Spring Boot:用于快速开发RESTful API。 Vue.js/React:用于构建前端用户界面。 数据库:如MySQL、PostgreSQL等关系数据库。 工作流引擎:如Activiti、Camunda等。 开发优势 现代Web技术:使用当前流行的Web前端和后端技术栈。 易于维护和扩

    洛雪音乐助手自定义音源v1.2.0下载.zip

    洛雪音乐助手自定义音源v1.2.0下载.zip

    011-微信小程序-kindle图书商城小程序.zip

    011-微信小程序-kindle图书商城小程序.zip

Global site tag (gtag.js) - Google Analytics