1、Erlang的高级特性和应用,http:/blog.yufeng.info2009/8/19,Topic(90分钟),Erlang在国内应用情况Erlang是个操作系统 *nixErlang分布和集群 (*)Erlang数据库 Mnesia (*),1. Erlang在国内的应用案例,校内的广告平台Sohu的白社会阿里巴巴的云计算平台Startup公司的webgame 一年一度的Erlang中国社区活动,Erlang在国外的成功项目,EjabberdRabbitmqCouchdbMochiwebDisco,2.Erlang和操作系统比较,Unix操作系统 用c+做例子函数 (void f()
2、)类 (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库 erlangVM + 基本库 c调试器 erlangProfile erlang工
3、具集 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,维护节点的u
4、p, downGlobal模块提供全局空间的访问Group leader提供全局的IO服务,分布之otp支持,gen_server 屏蔽位置相关rpcdistribute applicationFailoverTakeover进程的迁移分布数据库mnesiatrace seq_token,节点间通讯,紧凑的协议 可替换的通讯通道节点名字epmd 相当于DNS消息透明安全措施 cookie,节点交互和容错,支持节点间的link, monitor, exit节点up down自动觉醒节点加入自动化 同步信息节点支持分区 避免flood,为集群内置了inet常用的模块,http/ftp/sftpss
5、hssltcp/udp/sctpasn.1corbasnmp,看图不说话 (消息的跟踪),3. Mnesia分布数据库,传统数据库不保证实时IPC通讯数据列集Master/slave 模式数据水平切割麻烦,Mnesia的特点,适合读多写少的情况软实时 大部分都都在本地内存(本地进程的cpu时间)同一进程 无需列集 无需IPC通讯支持水平分割支持数据冗余节点间对等 查询和写入可以在任何节点发起数据自动迁移,数据操作,数据备份/恢复和传统数据库的互动(unixodbc)节点加入退出数据分片 无限量的加大数据量 程序员透明,在实际中的应用,Ejabberd和rabbitmq用作数据后端Distributed application的状态保持缺点:网络失败分区后可能数据不统一这个问题很棘手,多谢大家,Q&A时间,