余锋 (褚霸) 淘宝网技术专家 http://yufeng.info 中国软件技术大会 北京 2010 Erlang零成本实现云计算 余锋 (褚霸) 淘宝网技术专家 http://yufeng.info 中国软件技术大会 北京 2010
议题 1. Erlang天生适合云计算 2 .Erlang并行计算的效率 3. Erlang云计算基础构件 4. Erlang集群管理和维护 2 .Erlang并行计算的效率 3. Erlang云计算基础构件 4. Erlang集群管理和维护 5. 讨论
Erlang是什么? 通用的语言和运行环境 内置并发,集群,容错机制 电信和互联网行业大规模部署应用 经过时间验证的成熟商业系统
Erlang的历史 很老的FP语言,始于80年代末 爱立信投资10亿美金主导开发 EPL版权方式开源 需要记住的几个年份 1987 The first experiments with Erlang. 1993 Distribution is added to Erlang. 2006 SMP support is added to Erlang.
云计算定义 云计算就是应用公共网络设施对逻辑的组建,像水和电一样融入大家的生活,为用户提供海量一站式的服务. -腾讯首席执行官马化腾 Cloud = "CPU + Storage + Queues + Management" -The Amazon Web Services says essentially
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
语言和虚拟机天生可伸缩 最COOL的语言特性: 函数式语言,方便排错 轻量级进程 异步消息机制 软实时 代码热升级
内置集群和分布的基础设施和库 进程分布和名称同步管理 进程和节点容错管理 rpc gen_server mnesia数据库
稳定性 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
Erlang零成本云计算适用的领域 互联网应用服务器 消息推送系统 网关代理服务器 软实时的服务 集群管理
Erlang社区快速壮大, 见证云计算的增长
小结 Erlang天生适合特定领域的云计算
议题 1. Erlang天生适合云计算 2 .Erlang并行计算的效率 3. Erlang云计算基础构件 4. Erlang集群管理和维护 2 .Erlang并行计算的效率 3. Erlang云计算基础构件 4. Erlang集群管理和维护 5. 讨论
Erlang语言运行和开发效率 摩托罗拉C/Erlang开发效率比较 纯Erlang的运行效率大概是C的1/5, 编码效率是C的7倍,在脚本语言中属于中等水平.但是云计算不仅仅是纯计算,任务调度和集群管理是Erlang的强项,从而拉升系统的整体表现. 第三方独立评测网站 The Computer Language Benchmarks Game
Erlang对SMP的支持 从2006年发布的R11B开始. SMP开发人员的信条: "SMP should be transparent to programers in much the way as erlang distribution." -Ulf Wiger, Ericsson AB
Erlang进程调度及策略 Full load or not 多个运行队列,动态迁移进程 调度器看起来很像操作系统,实际上Erlang的第一个进程名字叫做otp_ring
Erlang调度器的伸缩性 小消息,大计算原则
架构设计方面的考虑 不共享 没有显式的同步 并发导向的编程 进程是低廉的,和现实世界对象1:1模型 所有无依赖的任务,都抽象为进程并发执行 终止的进程,一切都是垃圾,资源集中回收 简洁为王
Erlang技术发展路线图 虚拟机的运行期持续改进计划涵盖了对众核和NUMA体系结构的支持,保证了它在未来新的硬件体系结构下能持续获得更好的性能。
小结 Erlang并行计算效率高
议题 1. Erlang天生适合云计算 2 .Erlang并行计算的效率 3. Erlang云计算基础构件 4. Erlang集群管理和维护 2 .Erlang并行计算的效率 3. Erlang云计算基础构件 4. Erlang集群管理和维护 5. 小结
从Vmware收购谈起... Vmware 计算虚拟化 Redis 存储 RabbitMQ 消息交换系统 我们可以清楚的看到云计算的三个基础设施!
存储系统(noSQL) CouchDB Riak Membase
消息交换系统 RabbitMQ Ejabberd
WEB服务器 Mochiweb Erlyweb
Map/Reduce系统 Disco
小结 Erlang基础设施齐全, 开发成本低
议题 1. Erlang天生适合云计算 2 .Erlang并行计算的效率 3. Erlang云计算基础构件 4. Erlang集群管理和维护 2 .Erlang并行计算的效率 3. Erlang云计算基础构件 4. Erlang集群管理和维护 5. 讨论
集群特点及规模 集群全连通或者分区连通 访问授权: nothing or all策略 节点规模可强力伸缩 节点热插拔 规模可达上千台 典型系统的集群进程组织图
异构性 不同的平台 Windows(smp支持的有待改进) *nix 不同的体系结构 无需关心endianess问题 工业级协议的支持(asn.1, snmp等)
强大的交互性, 与其他遗留系统整合 NIF C节点(ei) Java (jinterface) Cobra TCP/HTTP 内置RPC
部署 Standalone发布,无需单独安装Erlang运行期 不停机维护 在线升级,系统同时运行新旧代码 发现问题在线降级 工具化, 一切自动化
代码安全 代码可远程从网络加载, Diskless减少维护的成本 代码可加密, 强加密防止反编译
远程维护 强大的内置shell ssh/sftp 可集中管理的日志系统
监控功能 OS mon SNMP HTTP
小结 Erlang集群管理成本低
议题 1. Erlang天生适合云计算 2 .Erlang并行计算的效率 3. Erlang云计算基础构件 4. Erlang集群管理和维护 2 .Erlang并行计算的效率 3. Erlang云计算基础构件 4. Erlang集群管理和维护 5. 讨论
典型成功案例 国内: 校内网 腾讯 华为 游戏公司 (如4399) ... 国外: Facebook Github
应用障碍 FP语言, 开发人员少, 招聘成本高 独特的并发和错误处理哲学 开发社区偏小,知识积累不够 应用库偏少
谢谢大家! Any questions?