Erlang高级原理和应用

3,265 views

Published on

分布集群以及mnesia在中间的角色

Published in: Technology
0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,265
On SlideShare
0
From Embeds
0
Number of Embeds
27
Actions
Shares
0
Downloads
134
Comments
0
Likes
8
Embeds 0
No embeds

No notes for slide

Erlang高级原理和应用

  1. 1. Erlang 的高级特性和应用 [email_address] http://blog.yufeng.info 2009/8/19
  2. 2. Topic(90 分钟 ) <ul><li>Erlang 在国内应用情况 </li></ul><ul><li>Erlang 是个操作系统 *nix </li></ul><ul><li>Erlang 分布和集群 (*) </li></ul><ul><li>Erlang 数据库 Mnesia (*) </li></ul>
  3. 3. 1. Erlang 在国内的应用案例 <ul><li>校内的广告平台 </li></ul><ul><li>Sohu 的白社会 </li></ul><ul><li>阿里巴巴的云计算平台 </li></ul><ul><li>Startup 公司的 webgame </li></ul><ul><li>一年一度的 Erlang 中国社区活动 </li></ul>
  4. 4. Erlang 在国外的成功项目 <ul><li>Ejabberd </li></ul><ul><li>Rabbitmq </li></ul><ul><li>Couchdb </li></ul><ul><li>Mochiweb </li></ul><ul><li>Disco </li></ul><ul><li>… </li></ul>
  5. 5. 2.Erlang 和操作系统比较 <ul><li>Unix 操作系统 用 c++ 做例子 </li></ul><ul><ul><li>函数 (void f() {}) </li></ul></ul><ul><ul><li>类 (class xxx{};) </li></ul></ul><ul><ul><li>模块 (xxx.cpp) </li></ul></ul><ul><ul><li>可执行文件(编译器,机器指令) </li></ul></ul><ul><ul><li>应用程序包括数据文件 </li></ul></ul><ul><ul><li>OS 启动,系统进程(抢占式调度 ) </li></ul></ul><ul><ul><li>IPC 通讯 </li></ul></ul><ul><ul><li>监控工具 (Top) </li></ul></ul>
  6. 6. Erlang 呢? <ul><li>Erlang 系统类比 </li></ul><ul><ul><li>函数 (fun () -> ok end) </li></ul></ul><ul><ul><li>模块( module xxx. xxx.erl) </li></ul></ul><ul><ul><li>Beam 文件(编译器, opcode) </li></ul></ul><ul><ul><li>Application (beam+ 数据文件) </li></ul></ul><ul><ul><li>VM bootstrap, erlang 进程 ( 抢占调度 ) </li></ul></ul><ul><ul><li>消息, Port, IPC 通讯 </li></ul></ul><ul><ul><li>etop </li></ul></ul>
  7. 7. Erlang 的系统组成 <ul><li>编译器 erlang </li></ul><ul><li>库 erlang </li></ul><ul><li>VM + 基本库 c </li></ul><ul><li>调试器 erlang </li></ul><ul><li>Profile erlang </li></ul><ul><li>工具集 erlang </li></ul>
  8. 8. 高性能高可靠( 20 年成就卓越) <ul><li>用 erlang 可以很少的代码做出一个 hello world web 服务器 单个 cpu 达到 16000 个并发请求。 </li></ul><ul><li>同样功能的 nginx 服务器(顶级高手写的, F5 作者) 只能做到 12000 个并发请求。 </li></ul><ul><li>Erlang 的代码不存在 c 那样潜在的 bug, cover 工具能够 100% 覆盖过了,基本上 0.9999% 可靠 </li></ul><ul><li>扩展容易 无需修改代码 多个 cpu 效能就等于 N × 系数( 0.8 ) </li></ul><ul><li>Jit 支持,更快更强 </li></ul>
  9. 9. 3. Erlang 分布和集群 <ul><li>C 底层支持 , 效率保证 </li></ul><ul><li>分布的原语是内置的 支持 cnode, jnode </li></ul><ul><li>进程的位置无关性 </li></ul><ul><li>名称服务 </li></ul><ul><li>节点间自动 tick ,维护节点的 up, down </li></ul><ul><li>Global 模块提供全局空间的访问 </li></ul><ul><li>Group leader 提供全局的 IO 服务 </li></ul>
  10. 10. 分布之 otp 支持 <ul><li>gen_server 屏蔽位置相关 </li></ul><ul><li>rpc </li></ul><ul><li>distribute application </li></ul><ul><ul><li>Failover </li></ul></ul><ul><ul><li>Takeover </li></ul></ul><ul><li>进程的迁移 </li></ul><ul><li>分布数据库 mnesia </li></ul><ul><li>trace seq_token </li></ul>
  11. 11. 节点间通讯 <ul><li>紧凑的协议 </li></ul><ul><li>可替换的通讯通道 </li></ul><ul><li>节点名字 </li></ul><ul><li>epmd 相当于 DNS </li></ul><ul><li>消息透明 </li></ul><ul><li>安全措施 cookie </li></ul>
  12. 12. 节点交互和容错 <ul><li>支持节点间的 link, monitor, exit </li></ul><ul><li>节点 up down 自动觉醒 </li></ul><ul><li>节点加入自动化 同步信息 </li></ul><ul><li>节点支持分区 避免 flood </li></ul>
  13. 13. 为集群内置了 inet 常用的模块 <ul><li>http/ftp/sftp </li></ul><ul><li>ssh </li></ul><ul><li>ssl </li></ul><ul><li>tcp/udp/sctp </li></ul><ul><li>asn.1 </li></ul><ul><li>corba </li></ul><ul><li>snmp </li></ul>
  14. 14. 看图不说话 ( 消息的跟踪 )
  15. 15. 3. Mnesia 分布数据库 <ul><li>传统数据库 </li></ul><ul><ul><li>不保证实时 </li></ul></ul><ul><ul><li>IPC 通讯 </li></ul></ul><ul><ul><li>数据列集 </li></ul></ul><ul><ul><li>Master/slave 模式 </li></ul></ul><ul><ul><li>数据水平切割麻烦 </li></ul></ul>
  16. 16. Mnesia 的特点 <ul><li>适合读多写少的情况 </li></ul><ul><li>软实时 大部分都都在本地内存 ( 本地进程的 cpu 时间) </li></ul><ul><li>同一进程 无需列集 无需 IPC 通讯 </li></ul><ul><li>支持水平分割 </li></ul><ul><li>支持数据冗余 </li></ul><ul><li>节点间对等 查询和写入可以在任何节点发起 </li></ul><ul><li>数据自动迁移 </li></ul>
  17. 17. 数据操作 <ul><li>数据备份 / 恢复 </li></ul><ul><li>和传统数据库的互动( unixodbc) </li></ul><ul><li>节点加入退出 </li></ul><ul><li>数据分片 无限量的加大数据量 程序员透明 </li></ul>
  18. 18. 在实际中的应用 <ul><li>Ejabberd 和 rabbitmq 用作数据后端 </li></ul><ul><li>Distributed application 的状态保持 </li></ul><ul><li>缺点:网络失败分区后可能数据不统一 </li></ul><ul><li>这个问题很棘手 </li></ul>
  19. 19. 多谢大家 <ul><li>Q&A 时间 </li></ul>

×