Erlang高级原理和应用
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Erlang高级原理和应用

  • 4,364 views
Uploaded on

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

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
4,364
On Slideshare
4,342
From Embeds
22
Number of Embeds
3

Actions

Shares
Downloads
125
Comments
0
Likes
7

Embeds 22

http://www.lifeyun.com 11
http://www.slideshare.net 10
http://doc.jebe.d.xiaonei.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

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