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?