淘宝核心系统资深专家 余锋http://yufeng.info @淘宝褚霸 2012-12-23(v0.1) MySQL云平台和Erlang实现 淘宝核心系统资深专家 余锋http://yufeng.info @淘宝褚霸 2012-12-23(v0.1)
关于我 淘宝核心系统资深技术专家 余锋 超过15年互联网行业的网络、内核以及底层软件开发经验 专注于高性能分布式服务器的研究和实现 擅长构建大规模集群服务器 对数据库系统和分布式文件存储有深入的研究
平台设计 平台架构和部件 平台开发和运维 讨论
平台设计原则 平台对外保持单一入口,对内维护单一的资源池 保证服务的高可用性,消除单点故障 保证系统是弹性可伸缩的,可以动态的增加、删减计算与存储节点。 保证分配给用户的资源也是弹性可伸缩的,资源之间相互隔离。
平台设计层次 通过层次消化复杂性,层越靠后业务越单纯 前端状态尽可能的推到后一层 后端功能单一、结构简单,性能和可靠性容易做到极致 性能不够,通常可引入cache层解决 三层是个好的选择 LAMP(Linux-Apache-MySQL-PHP)流行的启示
技术选择 采用成熟主流的技术 复用工业强度的部件,避免造轮子 Massive adoption leads to massive investment. Massive investment leads to better tools, better and faster VMs. 复用工业强度的部件,避免造轮子
为什么要用Erlang实现 高并发,高性能,集群易扩展 时间检验的高可靠 强大的管理功能,方便的问题定位支持 强大的交互性, 与其他系统整合能力
平台设计 平台架构和部件 平台开发和运维 讨论
系统架构
平台特性 平台足够稳定,支持热升级 支持几千台物理机规模, 以对用户透明的形式提供主从热备、数据备份、迁移、容灾、读写分离、分库分表功能 资源隔离,按需分配和限制CPU、内存和IO资源 不影响提供数据服务的前提下根据用户业务的发展动态的扩容和缩容 屏蔽数据节点不同的软硬件差异
平台概况 稳定性生产系统验证过 依赖的开源组件:Mnesia、Lvs、RabbitMQ、ZooKeeper 代码规模 承载的实例数:千级别 核心使用以高性能、健壮以及可伸缩性出名的Erlang语言开发 7万行Erlang代码,3万c代码,2万其他代码 六人团队,历时1.5年
系统组件 controller服务器 proxy服务器 agent服务器 API/Web服务器 日志分析、信息统计服务器 报警和自动部署模块 元数据存储、集群成员管理、发起备份、迁移、主从切换等操作 proxy服务器 提供访问MySQL数据库的服务 agent服务器 管理每台物理机上MySQL实例,执行备份、迁移、主从切换等操作 API/Web服务器 提供系统管理界面 日志分析、信息统计服务器 收集用户SQL、集群状态信息 报警和自动部署模块
创建数据库实例流程
数据主路径流程
LVS 安全隔离 L4流量切割,实现负载均衡 Proxy故障自动转移
ZooKeeper 作为配置服务器 提供分布式锁 MySQL插件监控所有实例的可用性
RabbitMQ Erlang消息机制与AMQP极度吻合 系统中各节点间的可靠通信(不包括SQL查询、日志等大数据流的传输) 系统各部件广播服务 标准的AMQP协议,方便第三方对接和扩展 工作流方式消息流动,方便监控
Mnesia分布式数据库 MySQL NDB出自同门,可靠性长时间验证过 Mnesia支持分布式事务,也支持脏读写 无中心点,带持久内存数据库,数据存取软实时 核心元数据全集群可见
其他Erlang组件 Chicago Mochiweb Cowboy …
平台设计 平台架构和部件 平台开发和运维 讨论
平台开发 系统实现足够简单清晰 开发效率/运行效率/维护效率方面的考虑 平台和工具方面的考虑 高并发带来的收益和风险 Erlang工具链(特别提到rebar) 高并发带来的收益和风险
平台单点问题 逻辑单点 物理单点 目标 单一视图简化系统模型 潜在风险点,尽量消除 候补队员 物理单点 潜在风险点,尽量消除 候补队员 目标 在晚上得知节点挂掉后,依然可以去睡觉,留到有时间的时候解决
平台服务保障 不中断服务(公路的例子) 容量规划(高速公路5车道例子) 预警机制 (依据是什么) 流量调度/排队机制( 国庆高速公路不发卡例子) 降级服务 (高速绕行国道例子)
平台保障关键技术 流量切割 L4层和L7层 角色分工明确 名称服务 引入间接层 其他服务如全局锁的基础 数据冗余 故障隔离/恢复
稳定性和容灾 高可用,为失效设计 watchdog/heartbeat系统 failover/takeover机制 硬件/软件都会失效 节点自我保护(拒绝服务/服务降级) 处处维稳 (非典期间人员监控的例子) watchdog/heartbeat系统 failover/takeover机制
可维护性 系统健康检查和报警日常化 双集群保证平滑切换 系统升级/热部署日常化 包管理 代码和配置变更日常化 节点添加/退出 想想公路修理例子 系统升级/热部署日常化 包管理 代码和配置变更日常化 节点添加/退出 通过ssh自动化部署
平台问题定位 为诊断而开发 日志/收集分析融入到集群 监控系统 主动诊断工具 事后审计 信息尽可能的能自描述所做的事情 snmp协议/web portal 图形说话 主动诊断工具 系统环境随着时间在变化 事后审计 想想超速例子
提问时间 谢谢大家!
备用-Portal界面
备用-Portal界面
备用-Portal界面
备用-Portal界面
备用-Portal界面
备用-Portal界面
备用-Portal界面
备用-Portal界面
备用-Portal界面
备用-Portal界面
备用-Portal界面
备用-Portal界面