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