• 1. Erlang 分布式系统的的领域语言淘宝核心系统资深专家 余锋http://yufeng.info @淘宝褚霸 2013-6-3
  • 2. 我是谁?2
  • 3. 传统服务器集群 开发的痛3
  • 4. 编程语言和模型选择各种编程语言? 多线程? 事件模型? 阻塞模型? 各种库?4
  • 5. 典型问题稳定性挑战 C10K问题 资源争夺 锁冲突和粒度 多核scale效果 网络编程复杂性 内存管理复杂性 5
  • 6. 传统服务器集群 运维的痛6
  • 7. 集群规模集群规模带来的问题 集群全联通 心跳压力7
  • 8. 集群范围挑战性能和瓶颈分析 日志分析挑战 消息跟踪需求 趋势分析8
  • 9. 集群升级不间断服务带来的挑战 灰度发布 升级和回滚9
  • 10. 集群容错机器失效 网络故障 机房层面failover/takeover10
  • 11. 服务质量软实时带来的挑战 公平服务 爆发流量 11
  • 12. 为什么Erlang? Erlang关键特性12
  • 13. Erlang是什么?江湖传说 支持高并发 伤眼睛 怪异难学 官方定义 通用的语言和运行环境 内置并发,集群,容错机制 电信行业大规模部署应用 经过时间验证的成熟商业系统 13
  • 14. Erlang的历史很老的FP语言,始于80年代末 爱立信投资10亿美金主导开发 EPL版权方式开源 需要记住的几个年份 1987  The first experiments with Erlang.  1993  Distribution is added to Erlang. 2006  SMP support is added to Erlang. 14
  • 15. 印象Erlang“Erlang was built from the ground up for concurrency.  Not just in a single machine, but in clusters of machines.  Lots of machines.  Lost of machines running many processes.  Sounds like a cloud, right?” -Colin Clark 15
  • 16. Erlang适合做什么互联网应用服务器 消息系统 海量存储 需要软实时的数据库应用  网关代理服务器 异构系统粘合 …16
  • 17. 哲学- Joe ArmstrongThe world is concurrent Things in the world don't share data Things communicate with messages Things fail" 17
  • 18. 语言和虚拟机天生可伸缩 函数式语言,方便排错 轻量级进程 异步消息机制 软实时 代码热升级 最酷的语言特性:
  • 19. 编程模型函数式编程 变量不可变 actor模型 与真实世界1:1 映射 异步消息驱动 模式匹配 无类型系统 行为提炼: gen_server, gen_fsm,gen_event 90%的模块都是gen_server 19
  • 20. Erlang运行效率20
  • 21. Erlang开发效率开发人员素质要求中等 开发效率是C/C++的7倍 21
  • 22. Erlang的系统组成编译器 erlang 库 erlang VM + 基本库 c 调试器 erlang Profile erlang 工具集 erlang 22
  • 23. 其实是个操作系统Unix操作系统 用c++做例子 函数 (void f() {}) 类 (class xxx{};) 模块(xxx.cpp) 可执行文件(编译器,机器指令) 应用程序包括数据文件 OS启动,系统进程(抢占式调度 ) IPC通讯 监控工具(Top) 23
  • 24. 其实是个操作系统(续)Erlang系统类比 函数 (fun () -> ok end) 模块(module xxx. xxx.erl) Beam文件(编译器,opcode) Application (beam+数据文件) VM bootstrap, erlang进程 (抢占调度 ) 消息,Port, IPC通讯 etop24
  • 25. Erlang对SMP的支持从2006年发布的R11B开始. SMP开发人员的信条: "SMP should be transparent to programers in much the way as erlang distribution."   -Ulf Wiger, Ericsson AB   25
  • 26. 集群特点及规模集群全连通或者分区连通 访问授权: nothing or all策略 节点规模可强力伸缩 节点热插拔 规模可达上千台 26典型系统的集群进程组织图
  • 27. 集群实现保障C底层支持, 效率保证 分布的原语是内置的(支持cnode, jnode) 进程的位置无关性 名称服务 节点间自动心跳检查,维护节点的up, down Global模块提供全局空间的访问 Group leader提供全局的IO服务 27
  • 28. 健壮性12000个以上test case 容错设计 进程可监控 supervisor角色 heart看门狗 时间检验过的 In 1998, the Ericsson AXD301 switch was announced, containing over a million lines of Erlang, and reported to achieve a reliability of nine "9"s. -Joe Armstrong28
  • 29. 软实时性ms级别 抢占式调度 公平调度 进程 IO bif nif29
  • 30. 互联互通和异构性不同的平台 不同的体系结构 协议互联 http/ftp/sftp ssh ssl tcp/udp/sctp asn.1 corba snmp 30
  • 31. 部署独立的安装包自带运行环境 无需停机维护 在线升级,系统同时跑新旧代码 发现问题在线降级 工具化,一切自动化 31
  • 32. 监控功能操作系统,CPU,内存,磁盘监控 无比详细的运行期状态 支持工业标准SNMP/HTTP32
  • 33. Erlang应用情况33
  • 34. 行业Advertising and New Media Automotive Financial Services Gaming Telecom34
  • 35. Erlang成熟项目35
  • 36. whatsapp 300M 集群架构36
  • 37. whatsapp 300M 集群性能37
  • 38. whatsapp 300M 集群性能(续)38
  • 39. Erlang后续发展39
  • 40. Erlang社区40
  • 41. Erlang影响力TIOBE 2013年5月 排名31 Go、Scala等语言山寨的对象 超算和并行计算大放异彩41
  • 42. Erlang技术发展路线图虚拟机的运行期持续改进计划涵盖了对众核NUMA体系结构的支持,保证了它在未来新的硬件体系结构下能持续获得更好的性能。42
  • 43. 推广障碍函数式语言, 开发人员少, 招聘成本高 独特的并发和错误处理哲学 开发社区偏小,知识积累不够 应用库偏少 软件经理不了解 … 43
  • 44. 提问时间 谢谢大家!44