Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29955507
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类:

2010-05-23 20:31:27

Erlang的高级特性和应用
1. Erlang在国内的应用案例
校内的广告平台
Sohu的白社会
阿里巴巴的云计算平台
Startup公司的webgame
一年一度的Erlang中国社区活动

Erlang在国外的成功项目
Ejabberd
Rabbitmq
Couchdb
Mochiweb
Disco

2.Erlang和操作系统比较
Unix操作系统 用c++做例子
函数 (void f() {})
类 (class xxx{};)
模块(xxx.cpp)
可执行文件(编译器,机器指令)
应用程序包括数据文件
OS启动,系统进程(抢占式调度 )
IPC通讯
监控工具(Top)


Erlang呢?
Erlang系统类比
函数 (fun () -> ok end)
模块(module xxx. xxx.erl)
Beam文件(编译器,opcode)
Application (beam+数据文件)
VM bootstrap, erlang进程 (抢占调度 )
消息,Port, IPC通讯
etop

Erlang的系统组成
编译器 erlang
库 erlang
VM + 基本库 c
调试器 erlang
Profile erlang
工具集 erlang


高性能高可靠(20年成就卓越)
用erlang可以很少的代码做出一个hello world web服务器 单个cpu达到16000个并发请求。
同样功能的nginx服务器(顶级高手写的, F5作者) 只能做到12000个并发请求。
Erlang的代码不存在c那样潜在的bug, cover工具能够100%覆盖过了,基本上0.9999%可靠
扩展容易 无需修改代码 多个cpu 效能就等于 N × 系数(0.8)
Jit支持,更快更强


3. Erlang 分布和集群
C底层支持, 效率保证
分布的原语是内置的 支持cnode, jnode
进程的位置无关性
名称服务
节点间自动tick,维护节点的up, down
Global模块提供全局空间的访问
Group leader提供全局的IO服务

分布之otp支持
gen_server 屏蔽位置相关
rpc
distribute application
Failover
Takeover
进程的迁移
分布数据库mnesia
trace seq_token

节点间通讯
紧凑的协议
可替换的通讯通道
节点名字
epmd 相当于DNS
消息透明
安全措施 cookie


节点交互和容错
支持节点间的link, monitor, exit
节点up down自动觉醒
节点加入自动化 同步信息
节点支持分区 避免flood


为集群内置了inet常用的模块
http/ftp/sftp
ssh
ssl
tcp/udp/sctp
asn.1
corba
snmp


看图不说话 (消息的跟踪)


3. Mnesia分布数据库
传统数据库
不保证实时
IPC通讯
数据列集
Master/slave 模式
数据水平切割麻烦

Mnesia的特点
适合读多写少的情况
软实时 大部分都都在本地内存(本地进程的cpu时间)
同一进程 无需列集 无需IPC通讯
支持水平分割
支持数据冗余
节点间对等 查询和写入可以在任何节点发起
数据自动迁移


数据操作
数据备份/恢复
和传统数据库的互动(unixodbc)
节点加入退出
数据分片 无限量的加大数据量 程序员透明


在实际中的应用
Ejabberd和rabbitmq用作数据后端
Distributed application的状态保持
缺点:网络失败分区后可能数据不统一
这个问题很棘手






阅读(1197) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~