《从无到有:熊猫直播 Rancho 发布系统构建之路》要点:
本文介绍了从无到有:熊猫直播 Rancho 发布系统构建之路,希望对您有用。如果有疑问,可以联系我们。
本文由高效运维社区热心群友投稿整理发布,高效运维社区致力于陪伴您的职业生涯,与您一起愉快的成长.
作者介绍:
符杰超
熊猫直播 基础架构部高级运维开发工程师
主要负责熊猫直播运维自动化架构平台建设和开发
前言:
随着熊猫直播的业务发展越来越快,业务需求的迭代和版本更新需求越来越多,对开发和运维面临以下4个痛点:
由此,团队内部决定在现有的发布过程上实现开发统一的发布系统平台,实现熊猫直播的运维发布流程化、标准化、自动化为一体的统一发布要求,下面围绕整个 Rancho 发布系统做总结梳理,总共分为9个方面:
Rancho 发布系统流程概述架构图:
Rancho 发布系统流程完整架构图:
一、实现的最终目的
随着熊猫直播业务的迅猛发展,项目、产品的需求规模和版本迭代频次是无法预估的.传统的运维支持方式已渐渐无法满足这种工程应用现状.但是如果把发布权利交付到开发人员手里控制,运维安全是比较大的隐患.当2者都无法平衡的时候,利用高效的标准化,自动化体系将2个无法逾越的问题优化结合起来,我们结合了上述问题,实现了内部的发布系统,对于发布系统,实现了2个核心目标,如下:
总结:让研发自助运维.
二、用户登陆(发布系统的第一道安全墙)
对于发布系统的登陆,我们结合了内部开发的一套 SSO 系统+Rancho 系统并加了一层白名单策略,有以下3个方面考虑:
三、 用户权限(发布系统的第二道安全墙)
用户权限,我们分为2类角色:
四、项目权限(发布系统的第三道安全墙)
项目权限设计,我们当时也花很多时间去讨论,最终拟定方案,项目不首先对应用户,而是在用户和项目中间建立一个桥梁,我们命名为项目组.
原因:当多个用户同时去拥有一个项目权限的时候,这个时候要全部用户都要增加到这个项目体系中去.
如果这样做的问题是:增加繁琐,当项目删除改用户权限/或者用户不再拥有该项目权限,还要精确的删除,否则删除错了,后果很严重,逻辑同时还要对用户和项目,做双层处理操作.
解决方案:
用户—-项目组——项目
方案优点:
项目组图例:
五、代码发布前台
- 发布页面
- 发布tag种类选择
- 发布环境/机器列表选择
当用户进来某个项目的时候,Rancho 发布系统会同时异步获取该项目所有的环境/主机列表,对用户而言无需任何操作处理.
①. 发布页面
②. 发布tag种类
发布 tag 种类选择如下:
③. tag 版本选择页面
如下:
④. tag 比对图
用户选择的 tag 和主干,和最后一次发布 tag 比对如下:
⑤. 发布环境/机器列表选择:
对于发布环境我们有自己的一套命名扩展规则,有3种类型:
- 类型一:根据项目功能服务来命名
- 类型二:根据发布环境来命名
- 类型三:前2者整合
比如某个项目命名情况:
- 项目功能服务拆分,包含:crontab,sdk,console,front等,
- 项目发布环境拆分,包含:online,beta,gray等
独立情况/整合情况,如下说明:
- beta环境可以独立的命名
- beta环境有sdk服务,命名为:sdk_beta
- beta环境有console,命名为:beta_console
⑥. 前台首页图
用户登陆进来看到的所拥有项目的页面,功能有发布,查看,发布历史,需说明(只有管理员才有展示启用/禁用权限)
启用:代表这个项目是正常运行发布
禁用:可以看作删除,但是我们不作为真正删除,临时迁入回收站,如果哪天这个项目需要启用发布了,我们再打开进行该项目发布.
⑦. 前台发布确认清单
发布前让发布用户再次确认上线的项目,tag,发布环境,是否重启,机器(现有的和临时添加的主机):
⑧. 发布清单提交请求
避免脏数据的方法:
六、代码发布后台
①. 后台操作新项目流程页面
新建字段说明:
名称:代表项目的主名称(唯一,如果重复则提示错误详情),别名:代表项目的描述,可以是中文/英文,名称可以重复.
git clone URL地址:
开发提供,这个地址Rancho在处理的过程中,会对本身项目权限,该项目类型标识进行判断和提取,比如我们有2种功能发布:rigger和ansible,而发布语言有:golang,PHP,nodejs,python,lua,c++等多种混合语言,排名不分先后.项目组权限:
添加该项目允许哪些项目组成员进行发布.备注:可写/可不写
至此,运维管理员需要做的事情已经完成,剩下的点击提交,剩下的事情交给 Rancho 去处理了.
②. 后台新建页面
③. Rancho底层基本处理流程
④. 项目失败手动触发 Rancho 处理恢复流程
七、发布过程/结果
前期的工作:后台新建项目完成,到发布提交申请,最后查看发布过程/结果的验证.
①. 发布过程的处理流程概述和原理图例展示:
描述,发布过程有3种场景负载均衡四/七层策略和无负载均衡策略/项目服务是否重启.针对以上3种场景,分别作了不同的处理规则:
- 负载均衡场景:
有白名单策略代表该项目拥有负载均衡策略(至于挂了多少负载均衡节点在发布的时候,Rancho 发布系统会自动的计算,并且做相对应的平滑策略切换).- 无负载均衡策略:
走正常的发布流程.- 项目服务发布是否重启
(Rancho 支持重启项目服务/支持不重启项目服务)需求描述:
熊猫直播发布项目的时候,有2种情况:发布速度:无负载均衡策略项目相对于比有LB策略的项目快2ms-30ms,根据项目绑定的LB有关联.
②. 项目发布锁图例展现
发布锁作用:防止同项目同发布环境多任务一起发布,会有覆盖,冲突.
③. 项目发布历史统计图例展现
状态:正在发布,触发失败,发布成功
④. 项目发布手工终止图例展现
⑤. 发布结果成功图例展现
⑥. 发布结果失败/终止图例展现
失败单台,未执行的机器程序自动干预停止发布实例子
⑦. 发布过程中,手工可以终止发布功能,说明
⑧. 项目回滚策略
当某个项目发布失败或者异常,想回滚到上个正常版本,可以以对应的 tag 号来进行重新发布.
⑨. 发布结果日志截图展现
八、完善的Wiki文档建立
Rancho 发布系统在熊猫直播循序渐进的优化功能/需求,bug修复等,wiki文档的规范化也要随之建立起来,以下是wiki文档建立的图例:
九、小结
Rancho 发布系统已经在线上运行了将近5个月的时间,目前 Rancho 系统功能包含了:
- 项目建立
- 用户登陆权限严格的隔离
- 项目锁机制
- 项目前台
- 项目后台
- LB 4/7层和 Nginx upstream 白名单策略
- 平滑摘取/绑定主机
- 支持Rigger发布功能和Ansible发布功能
- 多语言混合并行发布(Golang,PHP,Nodejs,C++,Lua,Python,Shell等,语言排名不分先后)
- 异步实时处理发布任务
- 实时可视化展现发布结果
- 多环境发布
- 跨多机房发布
- 手工/自动干预终止发布
- 避免严重的错误影响到正常业务
- 详细的发布操作记录:用户操作,发布tag,发布主机成功次数统计,发布主机失败次数统计,发布主机程序自动干预终止次数统计,发布主机手工干预终止次数统计,发布主机正在发布中次数统计等.
目前熊猫直播 Rancho 发布系统解决的痛点:
- 研发自助运维:熊猫直播产品业务线的发布更新/回滚变更等操作,都由各自的项目线开发人员操作发布/回滚,运维不直接参与整个发布/回滚流程,遇到发布错误/异常,运维才介入和开发一起排查相关问题.
- 发布时间周期长:目前发布系统异步处理整个发布流程,点击发布提交之后,页面关闭都可以,发布人员想看结果的时候,才登陆系统查看即可.
- 平滑切换负载均衡:发布系统增加了白名单策略,发布项目上线前,Rancho发布系统会自动判断白名单策略项目,如果该项目存在白名单策略,Rancho发布系统会自动做整个负载均衡下线—上线—绑定上线流程操作.
- 发布系统详细的审计功能:从用户登陆-创建发布清单-点击发布-发布过程-发布结果都做了详细的记录,记录纬度:登陆时间,发布起始时间,发布完成时间,用户,发布项目(平滑,服务是否重启,主机数量,主机信息清单),发布结果(成功,失败,终止)等.
目前发布次数/项目总数统计: 2017年2月16日上线到目前,累计发布工单12000次,最多单次工单发布主机100台+,成功96%,失败3%,终止1%,接入发布项目将近100+.
Rancho 发布系统未来优化的路还有很多,优化方向分为以下3点:
文章来自微信公众号:高效运维
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。