Transcript Document
Erlang零成本实现云计算 余锋 (褚霸) 淘宝网技术专家 http://yufeng.info 中国软件技术大会 北京 2010 议题 1. Erlang天生适合云计算 2 .Erlang并行计算的效率 3. Erlang云计算基础构件 4. Erlang集群管理和维护 5. 讨论 Erlang是什么? • • • • 通用的语言和运行环境 内置并发,集群,容错机制 电信和互联网行业大规模部署应用 经过时间验证的成熟商业系统 Erlang的历史 • • • • 很老的FP语言,始于80年代末 爱立信投资10亿美金主导开发 EPL版权方式开源 需要记住的几个年份 o 1987 The first experiments with Erlang. o 1993 Distribution is added to Erlang. o 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集群管理和维护 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集群管理和维护 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集群管理和维护 5. 讨论 集群特点及规模 • • • • • 集群全连通或者分区连通 访问授权: nothing or all策略 节点规模可强力伸缩 节点热插拔 规模可达上千台 典型系统的集群进程组织图 异构性 • 不同的平台 o Windows(smp支持的有待改进) o *nix • 不同的体系结构 o 无需关心endianess问题 o 工业级协议的支持(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集群管理和维护 5. 讨论 典型成功案例 国内: • 校内网 • 腾讯 • 华为 • 游戏公司 (如4399) • ... 国外: • Facebook • Github • ... 应用障碍 • • • • FP语言, 开发人员少, 招聘成本高 独特的并发和错误处理哲学 开发社区偏小,知识积累不够 应用库偏少 谢谢大家! Any questions?