狠狠撸
Submit Search
QCon北京2015 sina jpool-微博平台自动化运维实践
?
2 likes
?
1,026 views
Weibo Corporation
Follow
InfoQ组织的QCon全球技术大赛 已闭幕。这是我在自动化运维专场 分享的PPT.
Read less
Read more
1 of 34
Download now
More Related Content
QCon北京2015 sina jpool-微博平台自动化运维实践
2.
Sina ?JPool ? 微博平台自动化运维实践
? @王关胜 ? ?运维架构师 ?
3.
目录 ? ?CONTENT
? 1 ? 2 ? 微博平台业务背景 ? Docker在平台的应用 ?4 ? Sina ?Jpool综合运维平台 ?3 ? Sina ?Dispatch的架构设计 ?
4.
1.微博平台业务背景 ? 业务量 ?
? 日志:百T+ ? RPC:万亿+ ? 接口:600亿+ ? 运维 ? ? Docker:53% ? 扩容:5min ? 变更:15次/w ? ? 系统 ? ? 设备:3000+ ? 集群:200+ ? 业务模块:50+ ? ? ? 强大的运维工具平台 ? KPI ? ? SLA:99.99% ? RT:150ms ? 故障分:<2/季 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 用户 ? ? 用户:8亿 ? DAU:8千万 ? MAU:1.75亿 ?
5.
2.纵观自动化运维发展概况 ? 自动化运维发展概况 ? 阶段1
? 阶段2 ? 阶段3 ? 阶段4 ?! 原始阶段 ? ?工具系统 ? 综合运维平台 ? 云计算&智能运维 ? 变更脚本化 ? 运维标准化 ? 工具Web化 ? 运维精细化 ? 工具平台化 ? 数据API化 ? 运维服务化 ? 智能化运维 ? DevOPS ? *aaS ?
6.
目录 ? ?CONTENT
? 1 ? 2 ? 微博平台业务背景 ? Docker在平台的应用 ?4 ? Sina ?Jpool综合运维平台 ?3 ? Sina ?Dispatch的架构设计 ? 1 ?
7.
1.Sina ?Dispatch介绍 ? l??什么是Sina
?Dispatch? ? u?? 通用化的Shell调度与任务调度 ? u?? 2012年新浪内部自研 ? u?? 基于C++及Cwinux通信架构库开发 ? u?? 主要组件:dispatch,agent,MySQL ? u?? 消息协议:PB(ProtoBuf) ? ? l??Dispatch主要特性 ? u?? 丰富的API:控制操作接口化 ? u?? 高可用:Master-Slave部署方式 ? u?? 高性能:支持万台服务器的并发调度 ? u?? 安全性强:MD5值校验,特殊字符过滤 ?
8.
2.Dispatch ?调度设计 ? l??Shell调度
? u?? 变量:内置Shell变量 ?+ ?自定义变量 ? u?? 安全:MD5值签名,密码保护 ? u?? 策略:可设置超时时间 ? u?? 其他:同时并发执行,输出实时回显 ? l??任务调度 ? u?? 变量:内置任务变量 ?+ ?自定义变量 ? u?? 安全:MD5值签名,签名错误拒绝执行 ? u?? 策略:并发数控制,最大比例控制,超时控制 ? u?? 输出:stdout ?, ?stderr实时回显 ? u?? 脚本:支持Shell,Python,PHP等脚本语言 ? u?? 状态:执行中,超时,失败,完成 ? u?? 操作:启动,暂停,取消,重做,完成,回滚 ? ?
9.
3.Dispatch ?架构 ? dispatch
? 主线程 ? admin线程 ? 任务处理线程 ? agent ? 服务器集群 ? 与agent连接的通信协议层及通信线程 ? agent ? agent ? 通知master变化 ? 获取shell指令定义 ? 获取新任务 ? 更新任务执行态 ? 发送任务 ? 接收消息 ? ? 接收消息 ? ? 发送 shell ? ? 指令 ? ? 配置数据库 ? 主线程 ? 指令流: ? agent上报 ? Shell调度 ? 任务调度 ?
10.
4.Agent ?架构 ? master
? dispatch ? 通信层 ? 指令流: ? agent上报 ? Shell调度 ? 任务调度 ? slave ? slave ? agent ? Shell处理 ? 操作队列 ? Vfork ? ?执行shell ? app ?pool1 ?Task队列 ? Vfork ? 执行任务 ? Vfork ? 任务处理 ? app ?pool2 ?Task队列 ? 执行任务 ? 接收 ? 任务 ? 结果 ? 结果 ? shell ? 任务 ? 接收 ? shell ? 轮询 ? 结果 ? push ? shell ? Exec ? shell ? Exec ? 任务 ? Exec ? 任务 ? 主动连接 ? 任务调度 ? Shell调度 ?
11.
目录 ? ?CONTENT
? 1 ? 2 ? 微博平台业务背景 ? Docker在平台的应用 ?4 ? Sina ?Jpool综合运维平台 ?3 ? Sina ?Dispatch的架构设计 ? 3 ? 1 ?
12.
1.One ?host的生命周期 ? Text
in here Step1 ?机器初始化 ? ? ? ?- ?设备录入资源池(资源管理) ? ? ? ?- ?一键初始化(配置管理) ? Step2 ?服务部署 ? ? ? ?- ?环境部署 ? ? ? ?- ?监控部署 ? ? ? ? ?- ?服务部署(代码 ?& ?confs) ? Step3 ?运维变更 ? ? ? ?- ?系统变更,代码发布 ? ? ? ?- ?服务迁移(动态扩容) ? Step4 ?自动报修&下架 ? ? ? ?- ?服务自动上下线 ? ? ? ?- ?机器置换或下架 ? 业务运维可控 上架装机 ? Title in here 服务部署 ? 新机器 ? 初始化 ? Title in here 分配给业务 ? 改管理员 ? CMDB ? Title in here 运维变更 ? Title in here 自动报修 ? Title in here 过期下架 ?
13.
2.1 ?Sina ?JPool介绍
? Dispatch Puppet ?Master agent ? 服务器集群 ? puppet ? agent ? puppet ? Web ? APP ? CLI ? API ? l??什么是Sina ?Jpool? ? u?? 通用化集群管控平台 ? u?? 核心模块 ? ??? 用户&权限 ? ??? 资源管理 ? ??? 设备管理 ? ??? APP管理 ? ??? 配置管理 ? ??? 部署管理 ? ??? 任务管理 ? ??? Nginx变更管理 ? ??? 降级/封杀管理 ? ??? 日志查询平台 ?
14.
公司级CMDB ? 配置数据库 ? 资源管理
? 关联系统API ? 设备管理 ? APP集群管理 ? 配置管理 ? 服务 部署 ? 任务 管理 ? Shell 管理 ? Nginx ? 管理 ? 降级 ? 封杀 ? 监控 管理 ? dispatch ? puppet ?master ? ?用 ? 户 ? & ? 权 ? 限 & ? 审 计 ? ? 流 程 & 灰 度 发 布 ? 工 单 管 理 ? 问 题 管 理 ? 运维变更窗口 ? 2.2 ?JPool技术框架 ?
15.
l??平台核心需求:DB化 ? u?? 设备信息-唯一性
? ??? 配置管理 ? ??? 系统监控 ? ??? 。。。 ? u?? 应用信息-多对多 ? ??? 应用&发布部署 ? ??? 降级&封杀 ? ??? Nginx变更 ? ??? 。。。 ? u?? 关联关系 ? ? 3.1 ?JPool-资源管理 ? 设备池 ? 设备列表 ? 1:n ? 应用 ? 应用池 ? 1:n ? 设备 ? 应用设备 ?1:n ? 应用 ? 1:n ? ??设计复杂,实现简单,可用性强 ? ??案例:Sina ?Jpool,BaiDu ?Noah ? 基于严谨的带层级的关联关系 ? ??设计简单,实现复杂,灵活多变,可扩展性强 ? ??案例:小米,Jpool2 ? 基于tag形式的关系 ? ??复杂的关联结构模型 ? ??案例:Amazon ? 混合型 ? 业界实践 ?
16.
3.2 ?JPool-资源管理关系图 ? 应用管理
?设备管理 ? 产物 ? APP ? APP ? APP ? APP_Pool ? APP_Pool ? APP_Pool ? N ?个 设备 ? 设备 池子 ? Node ? Node ? Node ? 导入 ? 基于网络拓扑, 设备类型 ? JPool ? 应用服务拓扑 ? 配置管理 ? Node ? Node ? Node ? Node ? Shell操作 ? 操作 ? 脚本 文件 ? 任务(子任务) ? 任务模板 ? 任务 ? 历史任务 ? 并发& ? 回显 ? 比例并行 ? 执行状态 ? 任务操作 ? 实时回显 ? 任务脚本 ?
17.
4.1 ?Jpool-配置管理需求 ? l??
hostname ? l?? hosts ? l?? sudo ? l?? repo ? l?? scripts ? l?? sysctl ? l?? nrpe ? l?? sys_init ? l?? all ?agent ? ? 基础配置 ? l?? route ? l?? resolver ? l?? dnsmasq ? ? 机房相关 ? l?? crontab ? l?? rsync ? l?? scribe ? l?? service_confs ? l?? name_pool ? l?? logtailer ? ? 业务相关 ?
18.
4.2 ?基于Puppet的实践 ? --install
? ? ? ? ? ? ? ?|--puppet.conf: ? ?配置文件 ? ? ? ? ? ? ? ?|--fileserver.conf: ? ?file ?server的配置文件 ? ? ? ? ? ? ? ?|--auth.conf: ? ?权限的配置文件 ? ? ? ? ? ? ? ?|--files: ? ? ?puppet的文件目录 ? ? ? ? ? ? ? ?| ? ? ? ? ? ?|--module1 ? ? ? ? ? ? ? ?| ? ? ? ? ? ?| ? ? ? ? ?|--池子1 ? ? ? ? ? ? ? ?| ? ? ? ? ? ?| ? ? ? ? ?| ? ? ? ?|--各个资源文件的各个版本 ? ? ? ? ? ? ? ?| ? ? ? ? ? ?| ? ? ? ? ?|--池子2 ? ? ? ? ? ? ? ?| ? ? ? ? ? ?|--module2 ? ? ? ? ? ? ? ?|--manifests: ? ?节点定义目录 ? ? ? ? ? ? ? ?| ? ? ? ?|--variable ? ? ? ?池子的变量目录 ? ? ? ? ? ? ? ?| ? ? ? ?| ? ? ? ?|--池子1~n ? ? ? ? ? ? ? ?| ? ? ? ?| ? ? ? ?| ? ? ? ? ?|--pool_env ? ?池子参数目录 ? ? ? ? ? ? ? ?| ? ? ? ?| ? ? ? ?| ? ? ? ? ? ? ? ? ?|--池子的参数文件,存在多个版本。 ? ? ? ? ? ? ? ?| ? ? ? ?| ? ? ? ?| ? ? ? ? ?|--pool_module_env ? ? ? ? ? ? ? ?| ? ? ? ?| ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ?|--池子加载的各个modlue的参数文件,存在多个版本。 ? ? ? ? ? ? ? ?| ? ? ? ?|--nodes ?节点目录 ? ? ? ? ? ? ? ? ?| ? ? ? ?| ? ? ? ?|--池子1~n ? ? ? ? ? ? ? ?| ? ? ? ?| ? ? ? ?| ? ? ? ? ?|--池子下的服务器 ? ? ? ? ? ? ? ?|--modules: ? ? ? ? ?模块定义目录 ? ? ? ? ? ? ? ?| ? ? ?|--module的参数化class,一个module存在多个版本的文件 ? ? ? ? ? ? ? ?|--test: ? ? ? ? ? ? ? ? ?测试目录 ? l?? 源码目录规划: ? 线上实践 ?
19.
4.3 ?Puppet ?DB化
? 可视化操作界面 ?l??配置修改范围 ? u?? 变量 ? ??? 公共变量 ? ??? module变量 ? ??? 池子变量 ? u?? module ? u?? 节点与池 ? ? l??版本化管理 ? u?? 版本 ? ??? 变量 ? ??? module ? u?? 快照:池 ? ? ?
20.
4.4 ?Puppet配置DB化架构 ? Puppet
? 模块UI ? JPool ? 配置管理库 1.Puppet配置修改 ? 2.配置入库 ? 3.应用配置 ? SVN服 务器 ? Puppet ? Master1 ? Nginx ? Puppet ?client ? Puppet ?client ? Puppet ?client ? Puppet ? Master2 ? 4.提交SVN ? 5.修改状态 ? 7.配置同步 ? Backup(配置同步) ?
21.
5.1 ?JPool-任务管理 ? l??任务设计
? u?? 通用的脚本自动执行平台 ? u?? 安全,可靠,可视 ? u?? 任务变量:内置变量 ?+ ?自定义变量 ? ??? 任务脚本变量 ?= ?app变量+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?app_pool变量+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?任务变量+ ? u?? 任务类型&任务模板 ? l??线上某服务代码发布 ? ? Java服务代码发布 ? Tag ? 输 ? 入 ? 任务 创建 ? 变量 Init ? 判断应用 ? server ? 判断Tag ? 类型 ? 增量下载 Tag ? 切走流量 ? 停服务 ? 拷贝 ? 代码 ? 切回流 量 ? 代 码 上 线 逻 辑 ? 处 理 ? 输 出 ? 日志检测 服务检测 ? 启动服务 ? 实时任务状态 ? 完成 ?
22.
5.2 ?Jpool-任务状态监控 ?
? tag ? 部署路径 ? 任务状态 ? 超时时间 ? 步长&比例 ? APP_Pool列表 ? 状态分布 ? 任务实时回显 ?
23.
6.1 ?Jpool-Nginx变更管理 ? l??
变更需求 ? u?? 参数调整 ? u?? member修改 ? u?? 规则修改 ? ? l?? 配置拆分 ?: ?include ? Nginx.conf ? upstream ? pool1 ? pool2 ? vhost ? server1 ? server2 ? Nginx变更窗口示例 ?
24.
6.2 ?Nginx变更流程 ? Nginx
? 模块UI ? 本地 文件 ? 配置管理库 1.Nginx修改 ? 2.拉取池信息 ? SVN服 务器 ? dispatch ? Nginx ? 5.任务下发 ? Nginx ? Nginx ? 3.提交 ? Nginx配置变更 ?l?? 主要特性 ? u?? 配置文件diff ? u?? 下发版本校验 ? u?? 审批工作流 ? u?? 记录查询 ? u?? API化 ? l?? 下发控制 ? u?? 一键发布 ? u?? 灰度发布 ? 配置修改 ? 应用变更 ?
25.
7. ?Jpool-降级封杀管理 ? l??
降级封杀:5000+开关 ? u?? 原则:覆盖全,开关避免手输 ? u?? 方案: ? ??? 业务代码框架层实现 ? ??? 动态修改运行时变量值 ? ??? 前端监听端口,支持check/on/off ? ??? 集成JPool ? 降级封杀窗口 ?
26.
8. ?自动化变更 ? 服务降级/封禁
? 流量切换 ? JPool ? 限流 ? Docker机动池 ? 数据修复 ? 日常 ? 其他 ? 变更策略 ? 变更手段 ? 扩容/缩容 ? 依赖系统 ? 分工&职责&流程 ? 工单系统&量化KPI ? checklist ?& ?Double ?check ? 区分四种环境 ? 灰度发布 ? 代码部署 ? Puppet/Nginx变更 ?
27.
目录 ? ?CONTENT
? 1 ? 2 ? 微博平台业务背景 ? Docker在平台的应用 ? 1 ? Sina ?Jpool综合运维平台 ?3 ? Sina ?Dispatch的架构设计 ? 1 ? 4 ?
28.
1. ?双实例Cgroup隔离方案 ? l??Cgroup优化
? u??硬件配置 ? ??? 2CPU-12核 ? ??? Mem:12G ? u??隔离方案 ? ??? CPU分组 ? ??? 内存分组 ? ? ? l??UMA ?vs ?NUMA ? ?
29.
2.Docker单机部署方案 ? statsd ? Logs1 Nginx
? 打镜像 ? scribe ?cadvisor ? ELK ? 日志 中心 ? HOST(10.75.0.2) ? Jenkins ? 8080 ? APP1 ? 8081 ? APP2 ? Logs2 流量调度 ? 容器监控 ? 行为日志 ? 业务日志 ? -v ? -v ? -link ? -host ? -host ? 容器 ? 存储卷 ? 系统 ? 工具 ?
30.
3.Docker集群部署 ? l??部署原则 ? u??
发布代码一样发布镜像 ? u?? 部署时间成本:分钟级 ? u?? 快速流量转移 ? l??部署明细:5分钟 ? u?? 设备录入及迁移 ? u?? 前端镜像发布 ? u?? Nginx变更 ? ? 新设备 ? 迁移设备 ? CM 系统 ? Jpool资源池 ? 简易服务发现 ? upstream ? 生成&提交 ? dispatch ? 新扩容 ? 服务同步 ? ip:port ? 镜像发布 ?
31.
4.JPool2-Paas平台 ? Networking ?tools
? RPC ? APP ? Nginx ? MqProcess ? MC ? Redis ? MySQL ? Service(ip:port) ? RPC ? Nginx ? Wserf ? Consul ? Dispatch ? JPool ? ?Graphite ?& ?ELK ? Cadvisor&Logstash ? 监控 ? 编排 ? 负载调度 ? 服务发现 ? JPool2 ? Jenkins ? CI ? CD ? ?Gitlab ? ? Registry ?Hub ? DEV ? TEST ? 基础设施 ?
32.
5.平台Docker化进展 ? l??部署进度 ? u??
前端Docker化比率:53% ? u?? 实例数:1000+ ? l??春晚大考 ? u?? 10次动态扩容 ? u?? 节点迁移数:200+ ? u?? 单次操作时间:<5分钟 ? 业务部署范围 ?
33.
谢谢! ?
34.
@InfoQ ? infoqchina
?
Download