消灭低效的幕后黑手——Qunar devops实践分享

消灭低效的幕后黑手——Qunar devops实践分享

本文内容节选自第六届全球软件案例研究峰会,时任去哪儿工程效率部总监王晓翔分享的《消灭低效的幕后黑手——Qunardevops实践分享》实录,重点分享:提高工程效率存在的问题、取得的成果、要做的事情。(PPT+文稿)。
王晓翔一直致力于软件配置管理、软件质量管理和软件过程管理方面的工作和研究,拥有10多年的软件配置管理领域的从业经验。先后在中国海关数据中心、索尼移动通信、中国体彩科技有限公司、去哪儿网等公司工作。
编者按:2017年11月9-12日,第六届全球软件案例研究峰会在北京国家会议中心盛大开幕,现场解读2017年「壹佰案例榜单」。时任去哪儿工程效率部总监王晓翔带来《消灭低效的幕后黑手——Qunardevops实践分享》的案例分享。
【内容简介】devops是文化、流程与工具的有机结合。Qunar具有先天的devops文化,在研发过程中有很多自动化工具的支持。在传统的“我能做什么”的思维模式驱动下,每个工具就是一个信息孤岛,工程师使用这些工具存在着多种浪费。借助devops思想,拆掉原先“各自为政”的自动化工具的墙,建立以应用为中心的全生命周期管理平台。
1、存在的问题
去哪儿目前有1200+工程师、500个项目经理、6500个线上应用、每天有200个需求发布、3000+的beta环境更新、500个应用版本被部署到线上环境。下图是IC系统统计出的9月20日全天数据,beta部署3338次,线上更新图529次。
早在三年前,Qunar的发布系统就已经可以做到多个应用按照预定义的顺序一键发布了。但是,多个单点上高效的工具组成的过程,就一定是高效的吗?听听业务线的反馈,答案就不难得出。下图,是在没有做devops之前,线上应用扩容一台机器的过程。步骤繁琐,效率低下。
问题及根源分析
从上面这个简单的场景暴露出我们目前面临的问题:工具太多、工程师学习成本高;维度不同、同类数据在不同工具中不一致;权限管理混乱。
究其原因分为两点:
1.各个工具由不同部分负责开发,而这个部分由于按照工作职责划分,所以出发点不同。这就是经常说的“部门壁垒”。
2.不同工具的管理对象和目标不一致,导致信息集成困难,流程自动化就很难推进。
Qunar的devops方针:一个中心,两条主线
所谓“一个中心”,就是以提高工程效率为中心。实施devops不是目的,提高效率才是目的,所以我们内部都很少去讲devops这个词。而是不断去收集和发现业务线的需求,通过现场观察发现影响效率的环节,通过值班热线来收集高频问题,这些不仅是我们改进的原动力,也可以直接验证我们的改进效果。所谓“两条主线”,第一条是“应用线”。一个应用被注册后,从开发到上线到运维,是一个不断迭代的过程;第二条是“需求线”。持续交付关注的是一个需求从提出到交付的时间,这个时间越短说明一家企业越高效。而随着微服务架构的盛行,很多时候为了一个业务需求需要改动几个,甚至十几个应用。如何管理这个过程让其高效,也是非常重要。明确了“一个中心,两条主线”的方针后,我们解决问题的思路也非常清晰了。下图是落实这一方针后,我们工具平台的宏观表现。
2、取得的成果
一、应用的生命周期管理
解决思路
为了解决过去的部门壁垒和信息孤岛问题,我们在建立应用的全生命周期管理时,第一件事情就是为每个应用创建一个全局唯一的ID:APP_CODE。一个拥有了APP_CODE的应用,就好比一个被分配了身份证号的合法公民,享有很多合法权益。以前分散在各个阶段各个系统的信息,都将与这个APP_CODE建立联系,或作为应用的基本属性,或作为应用的孤岛资产(典型资产:机器,IP)。当然应用也要“遵纪守法”,这里特别强调做devops的一大原则——规范先行。所谓没有规矩不成方圆,而没有规范的devops就是无稽之谈。
关于应用的属性:
在对应用的属性数据进行梳理后,我们把它分为三类:基本属性、部署属性、服务属性(偏运行时)。其中,基本属性数据包括:服务类型,服务归属(业务线或BU),Owner,member等;服务属性包括:对机器资源的要求,对操作系统/基础软件的要求,服务启/停配置等;部署属性包括:源码地址,打包命令,部署时个性开关等。
关于应用的资源:
我们把应用所需的机器、域名等都做为资源来管理,尤其是机器资源,能够精确到具体应用,不仅给OPS运维提供更大的便利,一旦机器出现问题可以快速定位APP_CODE的owner,而且在做成本核算时也更清晰准确。为了方便对不同用途的机器进行管理,我们又引入了一层逻辑概念,即环境。一个应用可以被部署在多个环境,一个环境可以包含多台机器。典型场景就是一个应用,先被部署在一个dev环境(1台机器),然后部署在一个beta环境(2台机器),最后部署在prod环境(4台机器)。
为了实现信息的自动整合、工程师操作的流畅,我们对原有工具进行了系统点整合。是的,是整合,而不是推翻重建,我希望你们也是这样去做。
整合后的平台(我们后面都叫它Portal)的系统结构如图所示:
当我们把原有散落在各个工具平台中的信息,按照以上维度重新定义后,应用的生命周期脉络变得非常清晰。下面,我们再看看一个工程师的日常工作模式吧。如下图:
工程师进入Portal平台后,选择要处理的一个应用便进入该应用的详情页。这个详情的版面被分为4块:(1)左上角展示应用的基本属性;(2)左下角展示服务属性;(3)右上角是线上服务的变更事件:如定时任务执行情况;服务重启;服务发布等;(4)右下角是应用的环境/机器信息,以及运行在机器上的服务版本信息。原来需要在多个系统间切换才能收集到的信息,在这样一个详情页直观的展示出来,而且高频动作也都有相应的快捷按钮,非常方便。
与此同时,我们还做了一些过程可视化的改进。比如,原来的发布系统都是把过程日志输出给用户看,很多时候出现问题,工程师看不懂日志,也不好定位在哪个环节出了错,我们的服务热线每天疲于应付这些咨询问题。现在,我们把文字转换成了流程图的形式展现给工程师,当一次发布失败后,工程师可以一目了然的定位到出现的环节,然后再点击查看日志确定错误原因。工程师自助排查问题的能力明显提高。
如图:
二、项目的生命周期
解题思路
与应用生命周期保持一致。在项目管理中,有两个明显的问题:(1)项目进入开发阶段的过程对于项目经理来讲就是黑盒,想要了解细节沟通成本很高。(2)项目的实际数据靠手动填写,既不及时,也不准确。为此,我们通过规范源码的分支命名规范,将工程信息与项目信息建立了联系,通过工程中的不同事件映射到项目的不同阶段,从而自动填写项目管理中的“实际时间”自动。
先以一个实际的项目为例,看看整合了工程信息后的项目管理平台都有哪些变化吧。
除了原有项目管理平台维护的需求详情,计划安排,人员信息外,我们通过嵌入页面的方式,将所有与这个项目相关的工程信息进行了集中展示。在这个工程信息窗口中,除了应用名称,源码地址,分支名称外,还将CI结果进行了汇总展示。不仅可以清晰看到进度,还可以看到质量。
能够做到项目信息与工程信息的集成,关键一点就是通过分支命名规范建立关系,即:在分支名称中包含PMOID的,之后项目管理平台通过消费各种工程类消息,进行信息整合。稍后我也会再单独介绍为我们的devops平台立下汗马功劳的消息系统IC。用下图更能直观看到消息的生产者和消费者的关系:
说到这里,不得不介绍一下为我们的devops平台立下汗马功劳的消息系统IC。IC的诞生背景就是为了降低系统集成的复杂度,消息生产者只负责发送消息,任何对该消息感兴趣的一方都可以来消费它。比如PMO中展示的工程信息,就是由项目管理平台消费了这样几类消息:
1.branch-created:生产者——git
2.sonarResult:生产者——Sonar
3.codediff:生产者——codereview
4.beta-released:生产者——发布系统
5.prod-released:生产者——发布系统
IC中已经定义的消息类型已经有40多种,在我们内部工具集成中发挥着越来越重要的作用。
三、其他基础服务
测试环境管理平台Noah
当我们的服务拆分到一定程度后,马上会面临的一个新问题就是——要验证一个业务场景,需要部署N多个服务。如何提高这个过程的效率,在Qunar也有一个强大的平台支持,那就是Noah。在Noah平台,用户可以通过选择应用的各种组合快速构建满足业务测试的环境,或基于一个已有环境快速copy出一个全新环境。目前使用Noah的典型场景有两类:一类按照项目创建环境,满足开发工程师和测试工程师的验证需要;一类是满足接口自动化测试。关于Noah是值得专门写一篇文章来介绍的,这里只贴几个截图让大家有个直观了解吧。
在Noah平台新建环境,选择一种新建类型。如果是复杂的应用组合,我们建议用户以环境模版的形式保存下来,方便其他用户复用。
如果是自定义方式新建环境,用户可以按需添加应用信息,数据库,以及配置网络以及环境变量。
环境的创建过程我们也做了可视化展示,方便用户了解进度或定位问题。
环境的每一次变更我们也会如实记录下来:
一个被成功创建的环境,我们还提供对其服务的监控:
四、实践总结
提高效率、以始为终
我们实践devops的目的是要提高效率,那么第一步是要能够准确发现那些地方效率低下。精益生产中定义了七大浪费,而这些问题在软件开发过程中同样适用。发现这些浪费最直接的办法就是走进现场。去哪儿王老师的经验是:没有比现场观察更能发现问题的根源所在。
一旦找到低效的根源,接下来我们还需要用系统的思路去解决它。而不要简单的头痛医头,脚痛医脚。最终改进方案上线后,我们还要去验证那个被我们识别为低效的问题,是不是真的被消灭了。
Qunardevops工程实践总结
1.每个应用有自己的唯一标识,贯穿应用整个生命周期
2.每个项目有自己的唯一标识,贯穿项目管理生命周期
3.通过分支命名规范建立起项目与工程信息打通的基石
4.每个工具是一个独立服务,通过消息中心实现系统集成
5.做自己工具的第一个用户
工具一览
3、还要做的事情
没有最好,只有更好,注定了提高工程效率是一条没有终点的路。接下来去哪儿在工程效率提升上,将要完成信息可追溯到可预测,过程自动化到智能化的迈进。
Q&A
Q:配置中心可以解决配置带来的效率问题,想知道去哪儿的配置中心如何实现?能不能讲一下基于开源框架和自主研发。
A:这个平台是我们自研的,它的初衷是为了做到应用和配置的剥离,在代码中不要有配置的东西。
Q:应用之间的依赖是自动分析出来的吗?应用服务的注册是基于某种自动发现机制吗?
A:依赖关系目前来说不是自动发现,我们内部有rust数据,所以那个数据我们分析的不全。目前还是靠人工配置这个数据,但是我觉得不远的将来我们可以解析依赖数据。关于先注册还是基于发现做这个问题,首先一定先有这个标识才能去发现,如果连这个ID都没有其实无从谈起,注册一定是手工先做的事情。
Q:jira的项目质量表格是怎么实现的?自己开发插件还是jira的某个可定制页面?
A:表格是自研的,大家如果有jira的二次开发经验并不难。插件也是自己开发的。
以上内容来自王晓翔老师的分享。

主题测试文章,只做测试使用。发布者:最新稳定辅助网,转转请注明出处:https://www.744broad.com/15735.html

(0)
上一篇 2023年3月8日 上午4:40
下一篇 2023年3月8日 上午4:44

相关推荐

  • 面向云原生,拥抱开源,QingStor 带给我们哪些惊喜?

    面向云原生,拥抱开源,QingStor 带给我们哪些惊喜? 随着数据作为生产资料的价值不断凸显,企业业务系统对便捷性、容错性、安全性的要求越来越高,软件定义存储市场在近两三年里迎来高速发展,并且在未来几年内也存在明显的增长趋势。这是由于基于分布式架构的软件定义存储,能有效满足企业业务与IT的发展。企业级存储,也从单纯地符合合规要求,发展为以低成本更充分发挥数…

  • Grin创始团队做客火星财经首度回应:价格的决定权并不在我们手里

    Grin创始团队做客火星财经首度回应:价格的决定权并不在我们手里 免责声明:本文不构成任何投资建议。小编:记得关注哦!“我并不喜欢匿名币的概念,我们日常使用的货币本身就有匿名性。”火星财经(微信:hxcj24h)一线报道,1月25日晚,「火星总编时刻」番外篇001期,火星财经联合BHEX对话Grin核心开发团队。这是Grin爆红以来,其核心团队首次公开分享。…

    RUST资讯 2023年2月18日
    60
  • 继弯曲门后又陷“虫痕”门 这样的iPhone不苹果

    继弯曲门后又陷“虫痕”门 这样的iPhone不苹果 iPhone可以说是引领智能手机变革的产品,然而乔布斯离世后iPhone的创新止步不前,并且系统硬件也问题频频,早前的iOSBUG门在到如今的iPhone6弯曲门,可以说现在苹果公司的问题非常大,然而最近又有网友爆出了iPhone6s在正常使用的情况下出现了“虫痕”。为什么iPhone6s会出现“虫痕”呢?…

    RUST资讯 2023年2月27日
    40
  • 淄博某螺栓公司防锈使用水性防锈剂VCI-1377

    淄博某螺栓公司防锈使用水性防锈剂VCI-1377 淄博某客户主生产螺栓、螺母,要求螺栓防锈并不影响后期涂抹螺栓胶。【经过详细沟通,我司给出以下解决方案】螺栓生产后,螺栓整体浸泡1377(浸泡时间2-3分钟),进入烘干设备(温度65-70℃,时间120秒)客户后期需在螺纹处涂抹螺纹胶。1377可增大螺纹胶的附着力,更好的与螺纹结合。VCI1377水基性气相防锈…

    RUST资讯 2023年3月11日
    30
  • Rust 大会、a-shell 后续-Wasm 周报1204

    Rust 大会、a-shell 后续-Wasm 周报1204 RustChinaConf2020将于12月底在深圳召开,请到了Rust核心团队的Steve,详情见下文。上周,我们提到苹果公司要求a-shelliOS本机应用删除其嵌入式WebAssembly虚拟机。这个故事似乎有了一个圆满的结局。a-shell辩称,苹果自己在Safari浏览器中的WkWebV…

    RUST资讯 2023年2月20日
    110
  • 原生家庭能对一个人产生多大影响? 20个孩子眼中的暴戾与温柔

    原生家庭能对一个人产生多大影响?| 20个孩子眼中的暴戾与温柔 人好像就这么奇怪,小时候盼望着迅速长大奔向自由,而成年后却往往想回到过去。就像今天的儿童节,我朋友圈的大儿童们比真正的小孩子仪式感更重,要穿回校服,吃童年小零食。我们总是在羡慕着与自己距离甚远的事,比如遥不可及的人,或是遥远的一段时光。不仅因为记忆在遗忘的过程中不断修复美化,也因为童年每一段过往…

    RUST资讯 2023年3月10日
    20
  • 内参:Facebook开发与Libra共用的数字钱包,英国正式脱欧

    内参:Facebook开发与Libra共用的数字钱包,英国正式脱欧 1.在本周的财报电话会议上,Facebook首席执行官扎克伯格表示,Libra计划的工作正在由Libra基金会处理,并强调了基金会与社交网络之间的分离。此外他表示,该公司正在开发一种与Libra一起使用的数字钱包,“以便使世界各地的支付基础设施,尤其是跨境转账,更加高效”。2.英国当地时间1…

  • GDC2016:《驾驶俱乐部》VR版将在今年E3展上亮相

    GDC2016:《驾驶俱乐部》VR版将在今年E3展上亮相 在旧金山举办的GDC大会上,VR版《驾驶俱乐部(DriveClub)》正式展出,今天游戏总监PaulRustchynsky在推特上发表了更多关于该作的信息。推文大意是:我们还没公布我们的计划,更多详细内容E3见;这款游戏优化到以60帧每秒运行,多亏了PSVR的机能,项目测试可以达到120FPS;开发中…

    RUST资讯 2023年2月17日
    70
  • imageoptim for mac(无损图片压缩)

    imageoptim for mac(无损图片压缩) ImageOptimMac版是一款简单的图片压缩软件。ImageOptimMac版如何压缩图片?只需要把图片拖动到软件就可以实现图片优化,本软件操作简单,快速,对于开发人员和设计人员来说,在不影响图片质量的前提下,还可以减小占用磁盘空间。ImageOptimmac是mac电脑上一款简单好用的图片优化软件,…

    RUST资讯 2023年2月18日
    60
  • 来谈一谈——Python 4.0 预计推出的新功能

    来谈一谈——Python 4.0 预计推出的新功能 Python4.0预计推出的新功能原文作者:CharlesLeiferPython3.8发布在即,核心开发者团队让我总结一下最近讨论的Python4.0预计推出的新功能,代码名为“Ouroboros:自噬蛇”。Python4.0是大家翘首以盼的新版本,也将成为Python历史上的重大里程碑,在此感谢为之努力…

关注微信