Erlang 开发 实践

40
Erlang 开开开开 开开开开开 开开开开 开开 http://yufeng.info @ 开开开开 2013-05-25

description

Erlang 开发 实践. 淘宝核心系统资深专家 余锋 http://yufeng.info @ 淘宝褚霸 2013-05-25. 平台架构 工程实践 讨论. UMP 整体架构. UMP 核心挑战. 平台对外保持单一入口,对内维护单一的资源池。 保证服务的高可用性,消除单点故障 保证系统是弹性可伸缩的,可以动态的增加、删减计算与存储节点。 保证分配给用户的资源也是弹性可伸缩的,资源之间相互隔离。. UMP 经验. 开 放的平台, 方便用户扩展 采用开放成熟的第三方部 件的好处 热部署和升级对不停机维护 的意义 容错系统设计 的 重要性. - PowerPoint PPT Presentation

Transcript of Erlang 开发 实践

Page 1: Erlang 开发 实践

Erlang 开发实践淘宝核心系统资深专家 余锋

http://yufeng.info@ 淘宝褚霸2013-05-25

Page 2: Erlang 开发 实践

平台架构工程实践讨论

Page 3: Erlang 开发 实践

UMP整体架构

Page 4: Erlang 开发 实践

UMP核心挑战• 平台对外保持单一入口,对内维护单一的资源池。• 保证服务的高可用性,消除单点故障• 保证系统是弹性可伸缩的,可以动态的增加、删减计算与存储节点。• 保证分配给用户的资源也是弹性可伸缩的,资源之间相互隔离。

统一平台统一 资源申请入口

统一数据服务入口 统一Portal入口

Page 5: Erlang 开发 实践

UMP经验• 开放的平台,方便用户扩展• 采用开放成熟的第三方部件的好处• 热部署和升级对不停机维护的意义• 容错系统设计的重要性

Page 6: Erlang 开发 实践

为什么要用 Erlang 实现• 高并发、高性能、集群易扩展• 时间检验的高可靠• 强大的管理功能,方便的问题定位支持• 强大的交互性,与其他系统整合能力• Erlang 独特的世界观

– 世界是并行的– 万物皆独善其身– 万物皆通讯– 天有不测风云

Page 7: Erlang 开发 实践

UMP内部组件图

Page 8: Erlang 开发 实践

平台架构工程实践讨论

Page 9: Erlang 开发 实践

设计• 哲学

– 小而美– 细节是魔鬼– fail fast

• 三高– HIGH cost performance– HIGH Reliability– HIGH Scalability

9

Page 10: Erlang 开发 实践

设计—典型三层

10

Page 11: Erlang 开发 实践

实现• 三化

– rebar 化– application 化– 插件化

• 代码组织– api 化– rpc 松散化– 接口平民化

• 代码质量– 警告零容忍– dialyzer– tidier

11

Page 12: Erlang 开发 实践

实现—功臣

12

Page 13: Erlang 开发 实践

实现— rebar化

13

$ ls -l deps/ump_controller/includeprivREADME.mdrebarrebar.configsrcTHANKS…

Page 14: Erlang 开发 实践

实现—以 app为单位扁平组织$ tree -L 1 depsdeps├── …├── ump├── ump_agent├── ump_alarm├── ump_bs├── ump_freakout├── ump_la├── ump_tc└──...

14

Page 15: Erlang 开发 实践

实现—功能 api化$ ls -al deps/ump_controller/src...ump_instance_job.erlump_job_clone.erlump_job_delete_share_user.erlump_metastore.erlump_metastore_instance.erlump_mnesia_monitor.erlump_monitor_node_api.erlump_monitor_resource_api.erl

15

Page 16: Erlang 开发 实践

实现— rpc化$ cat ump_diag_nodes.erl …get_nodes() -> case ump_diag_rpc:call(ump_monitor_node_api, registered_node, []) of {badrpc, _Reason} -> []; Nodes -> Nodes end.

16

Page 17: Erlang 开发 实践

实现—Makefile最小化$ cat deps/ump_diag/Makefile all: compile escriptizecompile:

./rebar get-deps compileescriptize:

./rebar escriptize

17

Page 18: Erlang 开发 实践

实现— dialyzer警告零容忍$ dialyzer ebin Checking whether the PLT /home/chuba/.dialyzer_plt is up-to-date... yes Proceeding with analysis... done in 0m5.67sdone (passed successfully)

18

Page 19: Erlang 开发 实践

部署• reltool 和 release_handler <=> 打包和热部署• ssh/sftp <=> 安装和升级包传递• ump_bootstrap <=> 大规模自动部署

19

Page 20: Erlang 开发 实践

测试• 白盒 <=> eunit 覆盖率 <=> cover• 黑盒 <=> common test• 压力测试 <=> tsung

– api– mysql– console

20

Page 21: Erlang 开发 实践

诊断• VM 层面信息 <=> observer

– crashdump– etop

• 业务信息 <=> console/portal• 主动诊断 <=> ump_diagnostic• 主动破坏 <=> ump_freakout

21

Page 22: Erlang 开发 实践

运维• 热更新 <=> 不停机• snmp 监控 <=> 方便对接现有监控系统• 节点管理 <=> 随时添加、移除、启停结点 • 集群安全 <=> 审计

22

Page 23: Erlang 开发 实践

调优• 消息流动 <=> dbg• 函数级别 <=> eprof• 驱动层面 <=> dtrace• 锁竞争 <=> lcnt• 角色协作 <=> percept

23

Page 24: Erlang 开发 实践

平台架构工程实践讨论

Page 25: Erlang 开发 实践

存在问题• 集群规模和安全• mnesia brain split• 节点间 rpc 通道压力• 小众语言

25

Page 26: Erlang 开发 实践

讨论时间

谢谢大家!

26

@ 淘宝褚霸

Page 27: Erlang 开发 实践

备用 -Portal 界面

27

Page 28: Erlang 开发 实践

备用 -Portal 界面

28

Page 29: Erlang 开发 实践

备用 -Portal 界面

29

Page 30: Erlang 开发 实践

备用 -Portal 界面

30

Page 31: Erlang 开发 实践

备用 -Portal 界面

31

Page 32: Erlang 开发 实践

备用 -Portal 界面

32

Page 33: Erlang 开发 实践

备用 -Portal 界面

33

Page 34: Erlang 开发 实践

备用 -Portal 界面

34

Page 35: Erlang 开发 实践

备用 -Portal 界面

35

Page 36: Erlang 开发 实践

备用 -Portal 界面

36

Page 37: Erlang 开发 实践

备用 -Portal 界面

37

Page 38: Erlang 开发 实践

备用 -Portal 界面

38

Page 39: Erlang 开发 实践

备用 -Portal 界面

39

Page 40: Erlang 开发 实践

备用 -Portal 界面

40