注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

ocean's blog

平常心——可以寂寞,但不允许空虚

 
 
 

日志

 
 

Erlang的分布式编程  

2009-06-03 17:10:56|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

1,什么是分布式程序?
Erlang分布式程序是设计用来在网络计算机上运行并且只可以通过消息传递来协调活动

2,为啥要写分布式程序?
(1) 性能
通过将程序的不同部分分布到不同计算机来并行运行,以此提升性能(适用于密集型、CPU是瓶颈的计算)
(2) 可靠性
通过将程序分布来构建容错系统,以此提升可靠性。如果一台机器失败了,我们可以在另一台机器上继续计算
(3) 伸缩性
如果我们scale up,迟早有一天机器性能会成为瓶颈。增加新机器应该是一个很简单的操作并且不需要应用程序架构做太大改动
(4) 本质上分布的程序
多用户游戏或聊天系统等程序的在本质上就是分布的,如果我们有大量在地理位置上不同的用户,我们希望将计算资源放在离用户近的地方
(5) 乐趣
大部分有意思的程序都是分布式的,这些程序大多数需要和全世界的人和机器交互

3,Erlang里两种分布模型
(1) 分布式Erlang
程序运行在Erlang节点上,我们可以在任一节点上spawn一个进程,任何节点都可以在其他节点上做任何操作
所有的消息传递和错误处理就和在一个单一节点上运行一样
(2) 基于Socket的分布
使用TCP/IP socket来分布,没有上面的分布式Erlang强大

4,erl -sname hideto表示在本地启动一个Erlang节点,名字为hideto
如果两个节点在同一机器上,或者没有DNS服务,只能用-sname参数,s表示short
不同的机器上使用-name参数来启动节点

5,rpc:call(Node, Mod, Func, [Arg1, Arg2, ..., ArgN)在Node上执行一个远程过程调用,要调用的方法是Mod:Func(Arg1, Arg2, ..., ArgN)

6,使用-setcookie参数来保证交互的两个节点有一样的cookie,以此保证安全性

7,使用-kernel inet_dist_listen_min Min \ inet_dist_listen_max Max参数来设置端口范围

8,分布式程序用到的BIF:
(1) @spec spawn(Node, Fun) -> Pid
(2) @spec spawn(Node, Mod, Func, ArgList) -> Pid
(3) @spec spawn_link(Node, Fun) -> Pid
(4) @spec spawn_link(Node, Mod, Func, ArgList) -> Pid
(5) @spec disconnect_node(Node) -> bool() | ignored
(6) @spec monitor_node(Node, Flag) -> true
(7) @spec node() -> Node
(8) @spec node(Arg) -> Node
(9) @spec nodes() -> [Node]
(10) @spec is_alive() -> bool()

9,分布式程序库:
(1) rpc
(2) global
rpc module里最常用的方法是call(Node, Mod, Function, Args) -> Result | {badrpc, Reason}

10,设置cookie的三种方式
(1) $HOME/.erlang.cookie
(2) erl -setcookie C
(3) erlang:set_cookie(node(), C)

  评论这张
 
阅读(507)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017