Erlang开发实践

2,189 views

Published on

Erlang在MySQL云平台的开发实践

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,189
On SlideShare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
32
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

Erlang开发实践

  1. 1. Erlang开发实践淘宝核心系统资深专家 余锋http://yufeng.info@淘宝褚霸2013-05-25
  2. 2. 平台架构工程实践讨论
  3. 3. UMP整体架构
  4. 4. UMP核心挑战• 平台对外保持单一入口,对内维护单一的资源池。• 保证服务的高可用性,消除单点故障• 保证系统是弹性可伸缩的,可以动态的增加、删减计算与存储节点。• 保证分配给用户的资源也是弹性可伸缩的,资源之间相互隔离。统一平台统一 资源申请入口统一数据服务入口统一Portal入口
  5. 5. UMP经验• 开放的平台,方便用户扩展• 采用开放成熟的第三方部件的好处• 热部署和升级对不停机维护的意义• 容错系统设计的重要性
  6. 6. 为什么要用Erlang实现• 高并发、高性能、集群易扩展• 时间检验的高可靠• 强大的管理功能,方便的问题定位支持• 强大的交互性,与其他系统整合能力• Erlang独特的世界观– 世界是并行的– 万物皆独善其身– 万物皆通讯– 天有不测风云
  7. 7. UMP内部组件图
  8. 8. 平台架构工程实践讨论
  9. 9. 设计• 哲学– 小而美– 细节是魔鬼– fail fast• 三高– HIGH cost performance– HIGH Reliability– HIGH Scalability9
  10. 10. 设计—典型三层10
  11. 11. 实现• 三化– rebar化– application化– 插件化• 代码组织– api化– rpc松散化– 接口平民化• 代码质量– 警告零容忍– dialyzer– tidier11
  12. 12. 实现—功臣12
  13. 13. 实现—rebar化13$ ls -l deps/ump_controller/includeprivREADME.mdrebarrebar.configsrcTHANKS…
  14. 14. 实现—以app为单位扁平组织$ tree -L 1 depsdeps├── …├── ump├── ump_agent├── ump_alarm├── ump_bs├── ump_freakout├── ump_la├── ump_tc└──... 14
  15. 15. 实现—功能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.erl15
  16. 16. 实现—rpc化$ cat ump_diag_nodes.erl…get_nodes() ->case ump_diag_rpc:call(ump_monitor_node_api,registered_node, []) of{badrpc, _Reason} ->[];Nodes ->Nodesend.16
  17. 17. 实现—Makefile最小化$ cat deps/ump_diag/Makefileall: compile escriptizecompile:./rebar get-deps compileescriptize:./rebar escriptize17
  18. 18. 实现—dialyzer警告零容忍$ dialyzer ebinChecking whether the PLT/home/chuba/.dialyzer_plt is up-to-date...yesProceeding with analysis... done in 0m5.67sdone (passed successfully)18
  19. 19. 部署• reltool 和 release_handler <=> 打包和热部署• ssh/sftp <=> 安装和升级包传递• ump_bootstrap <=>大规模自动部署19
  20. 20. 测试• 白盒 <=> eunit 覆盖率 <=> cover• 黑盒 <=> common test• 压力测试 <=> tsung– api– mysql– console20
  21. 21. 诊断• VM层面信息 <=> observer– crashdump– etop• 业务信息<=> console/portal• 主动诊断 <=> ump_diagnostic• 主动破坏 <=> ump_freakout21
  22. 22. 运维• 热更新 <=> 不停机• snmp监控 <=> 方便对接现有监控系统• 节点管理 <=> 随时添加、移除、启停结点• 集群安全 <=> 审计22
  23. 23. 调优• 消息流动 <=> dbg• 函数级别 <=> eprof• 驱动层面 <=> dtrace• 锁竞争 <=> lcnt• 角色协作 <=> percept23
  24. 24. 平台架构工程实践讨论
  25. 25. 存在问题• 集群规模和安全• mnesia brain split• 节点间rpc通道压力• 小众语言25
  26. 26. 讨论时间谢谢大家!26@淘宝褚霸
  27. 27. 备用-Portal界面27
  28. 28. 备用-Portal界面28
  29. 29. 备用-Portal界面29
  30. 30. 备用-Portal界面30
  31. 31. 备用-Portal界面31
  32. 32. 备用-Portal界面32
  33. 33. 备用-Portal界面33
  34. 34. 备用-Portal界面34
  35. 35. 备用-Portal界面35
  36. 36. 备用-Portal界面36
  37. 37. 备用-Portal界面37
  38. 38. 备用-Portal界面38
  39. 39. 备用-Portal界面39
  40. 40. 备用-Portal界面40

×