SlideShare a Scribd company logo
1 of 44
Erlang
分布式系统的的领域语言
淘宝核心系统资深专家 余锋
http://yufeng.info
@淘宝褚霸
2013-6-3
我是谁?
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
健壮性
• 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 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

More Related Content

What's hot

C1000K高性能服务器构建技术
C1000K高性能服务器构建技术C1000K高性能服务器构建技术
C1000K高性能服务器构建技术Feng Yu
 
淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践Feng Yu
 
了解应用服务器
了解应用服务器了解应用服务器
了解应用服务器Feng Yu
 
Flash存储设备在淘宝的应用实践
Flash存储设备在淘宝的应用实践Flash存储设备在淘宝的应用实践
Flash存储设备在淘宝的应用实践Feng Yu
 
SSD在淘宝的应用实践
SSD在淘宝的应用实践SSD在淘宝的应用实践
SSD在淘宝的应用实践Feng Yu
 
利用新硬件提升数据库性能
利用新硬件提升数据库性能利用新硬件提升数据库性能
利用新硬件提升数据库性能Feng Yu
 
“云存储系统”赏析系列分享三:Sql与nosql
“云存储系统”赏析系列分享三:Sql与nosql“云存储系统”赏析系列分享三:Sql与nosql
“云存储系统”赏析系列分享三:Sql与nosqlknuthocean
 
豆瓣网技术架构变迁
豆瓣网技术架构变迁豆瓣网技术架构变迁
豆瓣网技术架构变迁reinhardx
 
Q con shanghai2013-[刘海锋]-[京东文件系统简介]
Q con shanghai2013-[刘海锋]-[京东文件系统简介]Q con shanghai2013-[刘海锋]-[京东文件系统简介]
Q con shanghai2013-[刘海锋]-[京东文件系统简介]Michael Zhang
 
淘宝软件基础设施构建实践
淘宝软件基础设施构建实践淘宝软件基础设施构建实践
淘宝软件基础设施构建实践Wensong Zhang
 
虎扑基础设施架构探讨
虎扑基础设施架构探讨虎扑基础设施架构探讨
虎扑基础设施架构探讨hoopchina
 
大型视频网站单点分析与可用性提升-Qcon2011
大型视频网站单点分析与可用性提升-Qcon2011大型视频网站单点分析与可用性提升-Qcon2011
大型视频网站单点分析与可用性提升-Qcon2011Yiwei Ma
 
Lvs在大规模网络环境下的应用pukong
Lvs在大规模网络环境下的应用pukongLvs在大规模网络环境下的应用pukong
Lvs在大规模网络环境下的应用pukongMichael Zhang
 
Build scalable microblog qcon beijing 2010
Build scalable microblog qcon beijing 2010Build scalable microblog qcon beijing 2010
Build scalable microblog qcon beijing 2010Tim Y
 
众行业公司系统架构案例介绍
众行业公司系统架构案例介绍众行业公司系统架构案例介绍
众行业公司系统架构案例介绍mysqlops
 
Inside Erlang Vm II
Inside Erlang Vm IIInside Erlang Vm II
Inside Erlang Vm IIFeng Yu
 
了解内存
了解内存了解内存
了解内存Feng Yu
 
Operation and Maintenance of Large-Scale All-Flash Memory Ceph Storage Cluste...
Operation and Maintenance of Large-Scale All-Flash Memory Ceph Storage Cluste...Operation and Maintenance of Large-Scale All-Flash Memory Ceph Storage Cluste...
Operation and Maintenance of Large-Scale All-Flash Memory Ceph Storage Cluste...Ceph Community
 

What's hot (20)

C1000K高性能服务器构建技术
C1000K高性能服务器构建技术C1000K高性能服务器构建技术
C1000K高性能服务器构建技术
 
淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践
 
了解应用服务器
了解应用服务器了解应用服务器
了解应用服务器
 
Flash存储设备在淘宝的应用实践
Flash存储设备在淘宝的应用实践Flash存储设备在淘宝的应用实践
Flash存储设备在淘宝的应用实践
 
SSD在淘宝的应用实践
SSD在淘宝的应用实践SSD在淘宝的应用实践
SSD在淘宝的应用实践
 
利用新硬件提升数据库性能
利用新硬件提升数据库性能利用新硬件提升数据库性能
利用新硬件提升数据库性能
 
“云存储系统”赏析系列分享三:Sql与nosql
“云存储系统”赏析系列分享三:Sql与nosql“云存储系统”赏析系列分享三:Sql与nosql
“云存储系统”赏析系列分享三:Sql与nosql
 
豆瓣网技术架构变迁
豆瓣网技术架构变迁豆瓣网技术架构变迁
豆瓣网技术架构变迁
 
Q con shanghai2013-[刘海锋]-[京东文件系统简介]
Q con shanghai2013-[刘海锋]-[京东文件系统简介]Q con shanghai2013-[刘海锋]-[京东文件系统简介]
Q con shanghai2013-[刘海锋]-[京东文件系统简介]
 
淘宝软件基础设施构建实践
淘宝软件基础设施构建实践淘宝软件基础设施构建实践
淘宝软件基础设施构建实践
 
虎扑基础设施架构探讨
虎扑基础设施架构探讨虎扑基础设施架构探讨
虎扑基础设施架构探讨
 
大型视频网站单点分析与可用性提升-Qcon2011
大型视频网站单点分析与可用性提升-Qcon2011大型视频网站单点分析与可用性提升-Qcon2011
大型视频网站单点分析与可用性提升-Qcon2011
 
A
AA
A
 
Lvs在大规模网络环境下的应用pukong
Lvs在大规模网络环境下的应用pukongLvs在大规模网络环境下的应用pukong
Lvs在大规模网络环境下的应用pukong
 
Build scalable microblog qcon beijing 2010
Build scalable microblog qcon beijing 2010Build scalable microblog qcon beijing 2010
Build scalable microblog qcon beijing 2010
 
java title
java titlejava title
java title
 
众行业公司系统架构案例介绍
众行业公司系统架构案例介绍众行业公司系统架构案例介绍
众行业公司系统架构案例介绍
 
Inside Erlang Vm II
Inside Erlang Vm IIInside Erlang Vm II
Inside Erlang Vm II
 
了解内存
了解内存了解内存
了解内存
 
Operation and Maintenance of Large-Scale All-Flash Memory Ceph Storage Cluste...
Operation and Maintenance of Large-Scale All-Flash Memory Ceph Storage Cluste...Operation and Maintenance of Large-Scale All-Flash Memory Ceph Storage Cluste...
Operation and Maintenance of Large-Scale All-Flash Memory Ceph Storage Cluste...
 

Viewers also liked

了解IO协议栈
了解IO协议栈了解IO协议栈
了解IO协议栈Feng Yu
 
Rethink db&tokudb调研测试报告
Rethink db&tokudb调研测试报告Rethink db&tokudb调研测试报告
Rethink db&tokudb调研测试报告Feng Yu
 
了解IO设备
了解IO设备了解IO设备
了解IO设备Feng Yu
 
MySQL和IO(上)
MySQL和IO(上)MySQL和IO(上)
MySQL和IO(上)Feng Yu
 
高性能集群服务器(Erlang解决方案)
高性能集群服务器(Erlang解决方案)高性能集群服务器(Erlang解决方案)
高性能集群服务器(Erlang解决方案)Feng Yu
 
了解网络
了解网络了解网络
了解网络Feng Yu
 
mnesia脑裂问题综述
mnesia脑裂问题综述mnesia脑裂问题综述
mnesia脑裂问题综述Feng Yu
 

Viewers also liked (7)

了解IO协议栈
了解IO协议栈了解IO协议栈
了解IO协议栈
 
Rethink db&tokudb调研测试报告
Rethink db&tokudb调研测试报告Rethink db&tokudb调研测试报告
Rethink db&tokudb调研测试报告
 
了解IO设备
了解IO设备了解IO设备
了解IO设备
 
MySQL和IO(上)
MySQL和IO(上)MySQL和IO(上)
MySQL和IO(上)
 
高性能集群服务器(Erlang解决方案)
高性能集群服务器(Erlang解决方案)高性能集群服务器(Erlang解决方案)
高性能集群服务器(Erlang解决方案)
 
了解网络
了解网络了解网络
了解网络
 
mnesia脑裂问题综述
mnesia脑裂问题综述mnesia脑裂问题综述
mnesia脑裂问题综述
 

Similar to Erlang分布式系统的的领域语言

Erlang low cost_clound_computing
Erlang low cost_clound_computingErlang low cost_clound_computing
Erlang low cost_clound_computingFeng Yu
 
Erlang高级原理和应用
Erlang高级原理和应用Erlang高级原理和应用
Erlang高级原理和应用Feng Yu
 
Foundation of software development 2
Foundation of software development 2Foundation of software development 2
Foundation of software development 2netdbncku
 
Erlang Optimize
Erlang OptimizeErlang Optimize
Erlang OptimizeFeng Yu
 
程式設計師的自我修養 Chapter 8
程式設計師的自我修養 Chapter 8程式設計師的自我修養 Chapter 8
程式設計師的自我修養 Chapter 8Shu-Yu Fu
 
基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发mysqlops
 
基于MySQL开放复制协议的同步扩展
基于MySQL开放复制协议的同步扩展基于MySQL开放复制协议的同步扩展
基于MySQL开放复制协议的同步扩展Sky Jian
 
Baidu LSP and DISQL for Log Analysis
Baidu LSP and DISQL for Log AnalysisBaidu LSP and DISQL for Log Analysis
Baidu LSP and DISQL for Log AnalysisXiaoming Chen
 
Pytorch cnn netowork introduction 20240318
Pytorch cnn netowork introduction 20240318Pytorch cnn netowork introduction 20240318
Pytorch cnn netowork introduction 20240318FEG
 
开源软件营销策略
开源软件营销策略开源软件营销策略
开源软件营销策略linhaicaoyuan
 
微服務架構 導入經驗分享 吳剛志 - Community Open Camp
微服務架構 導入經驗分享 吳剛志 - Community Open Camp微服務架構 導入經驗分享 吳剛志 - Community Open Camp
微服務架構 導入經驗分享 吳剛志 - Community Open CampAndrew Wu
 
20030623 linuxbasic and-security
20030623 linuxbasic and-security20030623 linuxbasic and-security
20030623 linuxbasic and-security建融 黃
 
构建可扩展的微博系统
构建可扩展的微博系统构建可扩展的微博系统
构建可扩展的微博系统lonegunman
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰Scourgen Hong
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAEq3boy
 
Ch2 unix introduction(2013 ncu-nos_nm)
Ch2   unix introduction(2013 ncu-nos_nm)Ch2   unix introduction(2013 ncu-nos_nm)
Ch2 unix introduction(2013 ncu-nos_nm)Kir Chou
 
OpenRISC whsap
OpenRISC whsapOpenRISC whsap
OpenRISC whsap柏毅 李
 

Similar to Erlang分布式系统的的领域语言 (20)

Erlang low cost_clound_computing
Erlang low cost_clound_computingErlang low cost_clound_computing
Erlang low cost_clound_computing
 
Erlang高级原理和应用
Erlang高级原理和应用Erlang高级原理和应用
Erlang高级原理和应用
 
Develop Your Own Operating System
Develop Your Own Operating SystemDevelop Your Own Operating System
Develop Your Own Operating System
 
Foundation of software development 2
Foundation of software development 2Foundation of software development 2
Foundation of software development 2
 
作業系統概論
作業系統概論作業系統概論
作業系統概論
 
Erlang Optimize
Erlang OptimizeErlang Optimize
Erlang Optimize
 
程式設計師的自我修養 Chapter 8
程式設計師的自我修養 Chapter 8程式設計師的自我修養 Chapter 8
程式設計師的自我修養 Chapter 8
 
Some tips
Some tipsSome tips
Some tips
 
基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发
 
基于MySQL开放复制协议的同步扩展
基于MySQL开放复制协议的同步扩展基于MySQL开放复制协议的同步扩展
基于MySQL开放复制协议的同步扩展
 
Baidu LSP and DISQL for Log Analysis
Baidu LSP and DISQL for Log AnalysisBaidu LSP and DISQL for Log Analysis
Baidu LSP and DISQL for Log Analysis
 
Pytorch cnn netowork introduction 20240318
Pytorch cnn netowork introduction 20240318Pytorch cnn netowork introduction 20240318
Pytorch cnn netowork introduction 20240318
 
开源软件营销策略
开源软件营销策略开源软件营销策略
开源软件营销策略
 
微服務架構 導入經驗分享 吳剛志 - Community Open Camp
微服務架構 導入經驗分享 吳剛志 - Community Open Camp微服務架構 導入經驗分享 吳剛志 - Community Open Camp
微服務架構 導入經驗分享 吳剛志 - Community Open Camp
 
20030623 linuxbasic and-security
20030623 linuxbasic and-security20030623 linuxbasic and-security
20030623 linuxbasic and-security
 
构建可扩展的微博系统
构建可扩展的微博系统构建可扩展的微博系统
构建可扩展的微博系统
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
 
Ch2 unix introduction(2013 ncu-nos_nm)
Ch2   unix introduction(2013 ncu-nos_nm)Ch2   unix introduction(2013 ncu-nos_nm)
Ch2 unix introduction(2013 ncu-nos_nm)
 
OpenRISC whsap
OpenRISC whsapOpenRISC whsap
OpenRISC whsap
 

More from Feng Yu

Cpu高效编程技术
Cpu高效编程技术Cpu高效编程技术
Cpu高效编程技术Feng Yu
 
了解Cpu
了解Cpu了解Cpu
了解CpuFeng Yu
 
开源混合存储方案(Flashcache)
开源混合存储方案(Flashcache)开源混合存储方案(Flashcache)
开源混合存储方案(Flashcache)Feng Yu
 
Systemtap
SystemtapSystemtap
SystemtapFeng Yu
 
Oprofile linux
Oprofile linuxOprofile linux
Oprofile linuxFeng Yu
 
Tsung 压力测试工具
Tsung 压力测试工具Tsung 压力测试工具
Tsung 压力测试工具Feng Yu
 

More from Feng Yu (8)

Cpu高效编程技术
Cpu高效编程技术Cpu高效编程技术
Cpu高效编程技术
 
了解Cpu
了解Cpu了解Cpu
了解Cpu
 
开源混合存储方案(Flashcache)
开源混合存储方案(Flashcache)开源混合存储方案(Flashcache)
开源混合存储方案(Flashcache)
 
Systemtap
SystemtapSystemtap
Systemtap
 
Oprofile linux
Oprofile linuxOprofile linux
Oprofile linux
 
Go
GoGo
Go
 
Tsung 压力测试工具
Tsung 压力测试工具Tsung 压力测试工具
Tsung 压力测试工具
 
Go Lang
Go LangGo Lang
Go Lang
 

Erlang分布式系统的的领域语言