erlang分布式编程

本文介绍了使用Erlang进行分布式编程的概念和实践,包括两种分布式模型:分布式Erlang和基于套接字的模型。文章详细讲解了如何创建名称服务器,从简单的本地服务器到跨互联网的客户端和服务器交互,并探讨了在不同阶段遇到的安全性和可扩展性问题。此外,还提到了Erlang的分布式编程库和内置函数,如rpc模块和spawn系列函数在分布式环境中的应用。
摘要由CSDN通过智能技术生成

前言

用Erlang编写分布式程序和编写并发程序只有一步之遥。在分布式Erlang里,可以在远程节点和机器上分裂进程。分裂出远程进程之后,我们会看到其他所有的基本函数( send 、 receive和 link 等)都能透明运作在网络中,就像在单个节点上一样。
下面是一些想要编写分布式应用程序的原因。

  • 性能
    可以通过安排程序的不同部分在不同的机器上并行运行来让程序跑得更快。

  • 可靠性
    可以通过让系统运行在数台机器上来实现容错式系统。如果一台机器出了故障,可以在另一台机器上继续。

  • 可扩展性
    随着我们把应用程序越做越大,即使机器的处理能力再强大也迟早会耗尽。到那时,就必须添加更多的机器来提升处理能力。添加一台新机器应当是一次简单的操作,不需要对应用程序的架构做出大的修改。

  • 天生分布式的程序
    许多应用程序天生就是分布式的。如果编写一个多用户游戏或聊天系统,就会有来自世界各地的分散用户。如果我们在某个地理位置上拥有大量的用户,就会希望把计算资源放置在接近这些用户的地方。

  • fun
    我想要编写的fun程序大部分都是分布式的。其中许多涉及与全世界各地的人与机器进行交互。

一、两种分布式模型

  • 分布式Erlang
    在分布式Erlang里,我们编写的程序会在Erlang的节点(node)上运行。节点是一个独立的Erlang系统,包含一个自带地址空间和进程组的完整虚拟机。
    可以在任何节点上分裂进程,前几章讨论的所有消息传递和错误处理基本函数也都能像在单节点上那样工作。分布式Erlang应用程序运行在一个可信环境中。因为任何节点都可以在其他Erlang节点上执行任意操作,所以这涉及高度的信任。虽然分布式Erlang应用程序可以运行在开放式网络上,但它们通常是运行在属于同一个局域网的集群上,并受防火墙保护。
  • 基于套接字的分布式模型
    可以用TCP/IP套接字来编写运行在不可信环境中的分布式应用程序。这个编程模型不如分布式Erlang那样强大,但是更安全。在14.6节里,我们会来看看如何用基于套接字的简单分布式机制来构建应用程序。

二、创建名称服务器

第 1 阶段:一个简单的名称服务器

我们的名称服务器 kvs 是一个简单的 Key → Value 服务器,它的接口如下。

  • spec kvs:start()->true
    启动服务器。它将创建一个注册名为 kvs 的服务器。
  • spec kvs:store(key,value)->true
    关联 Key 和 Value 。
  • spec kvs:lookup(Key)->{ok,value}|undefined
    查询 Key 的值。如果 Key 带有关联值就返回 {ok, Value} ,否则返回 undefined 。这个键值服务器是用进程字典里的基本函数 get 和 put 实现的,它的代码如下:
start() -> register(kvs, spawn(fun() -> loop() end)).
store(Key, Value) -> rpc({
   store, Key, Value}).
lookup(Key) -> rpc({
   lookup, Key}).
rpc(Q) ->
	kvs ! {
   self(), Q},
	receive
		{
   kvs, Reply} ->
			Reply
	end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值