当前位置:网站首页>互联网研发效能实践之去哪儿网(Qunar)核心领域DevOps落地实践
互联网研发效能实践之去哪儿网(Qunar)核心领域DevOps落地实践
2022-06-30 15:48:00 【InfoQ】



- 首先是业务,我们做DevOps的时候一定要从业务目标出发,业务人员先去确定业务目标
- 然后进行产品的规划,规划完成之后进行产品的设计。
- 设计拆分成具体的功能,功能对应我们的需求。
- 在需求出来之后,我们进行敏捷开发。
- 开发完成后进行集成测试验证,
- 最终发布运维上线。


- 开发部分包括的内容就是应用注册、代码管理、sonar、Cr等。
- 测试部分包括缺陷管理、case接口、测试性能、接口测试和代码覆盖率。
- 上线包括发布步骤编排、产物管理、回滚管理、负载均衡等。
- 运维包括监控、日志、事件、报警等。


- 对开发来说,频繁的被打扰导致其时间碎片化,在各种任务之间切换导致效率无法保证。
- 对项目经理来说,无法得知项目的实时进度,项目是在开发过程中,还是在测试过程中。因此只能去跟开发进行去人为沟通,这不仅导致了开发被打断,也使项目经理无法掌控整个项目过程。
- 对QA来说, QA最终要为质量负责,但是QA不知道项目的这次需求变更了什么内容,这就会导致变更靠人为的梳理很容易被遗漏,从而导致上线出故障。我们有很多血淋淋的教训,因为没有更新DB,或者是一个配置忘记更新了,上线出现过很多次故障。
- 对PMO来说,PMO要收集整个项目过程的数据,通过数据去确定我们的改进优化分析,分析优化改进。但现在我们项目的所有数据全都依赖人工去填写,很难保证数据的准确性,从而给改进优化带来困难。




- 对开发人员来说,首先测试条件是难保障的。开发人员做测试的时候,其实有环境的依赖,也有数据的依赖,有一些前提条件的准备。但是这些常常会特别耗时间,准备也非常困难,导致测试不足的问题。其次修复成本高,因为开发人员在前期的测试不足,提交给QA人员之后,通过QA人员发现了问题,然后再反馈给开发人员,反馈的周期就拉长了。开发人员这时可能已经进入到其他项目了,从而又有一个切换成本。
- 对QA人员来说,没有办法让开发保证提测的质量,更多的是依赖于自己的测试,对其来说非常不友好。还有上线的质量也难以保证,很多其实我测到了,但是可能依旧带着问题上线了。

- 代码review(code review),即人工的review,现在我们公司已经建立起了较好的code review文化,大家都已经形成了这种习惯。
- 静态代码检查sonar,这个地方sonar不只是sonar,在我们公司的话,主要技术栈是Java,所以我们会在 Sonar里边会做一些java规则的检查,比如说非法的包名、重复类、然后依赖多版本等检查,同时也会把一些原数据的信息记录下来,例如记录变更的内容,变更的依赖等。除此之外也会做sonar本身的一些规则级检查,我们这个规则也会定期做review。
- 接口自动化,接口自动化我们分了两部分,第一部分是我们的线上回归测试,所用回归的工具我们叫灭霸,它会在每次开发提测时自动执行,把线上现在存量的一些接口做回归验证。如果你是新增的业务接口的话,我们也会有一个自动化测试平台叫Qunit,它是基于unit的,去做一个新的业务的验证。
- 代码覆盖率检查,我们sonarqube等各种的自动化工具,都可以看到当前的测试的覆盖度。测试覆盖度这块大家其实一直有一个疑问,那就是我测试的时候就是代码百分百覆盖,也不能保证上线完全没有问题。但是反向也有另外一种说法,起码百分之百覆盖了,还是会增加一定程度信心的,所以覆盖率是非常重要的。

- 在CodeReview方面,我们是基于开源工具phabricator实现的,我们会做到分支创建后自动同步仓库,同时代码push的时候自动去创建更新diff,这样就避免了人工去创建以及后续操作。同时我们支持两次提交diff的变更,这是为了解决发现问题并修改重复提交后的全量diff问题。不需要全量的再次diff,只需要看这两侧的一个变更。当然如果影响范围较大的话,还是建议全量的再diff一次。
- 静态代码检查方面,我们使用业界通用的sonarqube,但我们的特色点是代码push的时候它会自动执行,然后消息反馈。同时我们有增量跟全量的报告。我们有很多历史在的基础上,如果你要求它去全量的解决问题,这在业务非常繁忙的时候是不现实的,所以我们做了增量,只去检查当前这次变更引入的问题,只要解决了这些问题并能够保证不新增,后续再去慢慢地解决全量问题。
- 接口自动化方面,接口自动化这里我讲的是灭霸即接口回归问题,接口自动化大家最头疼的就是要自己去写case,业务变动又比较频繁。我们的时间点是怎么做的?我们会基于检查点的case自动生成补全清理。例如航司,航空公司是有很多公司的,比如说南航、国航、川航等,相当于每一个航空公司对应一个业务,我可能就要对这一个类型去进行验证,所以我们需要用户先定义一个检查点维度,然后业务在线上执行的时候,会去生成日志,我们通过日志去采集这些具体的case,再生成补全。当过了一段时间,如果检查点没有这种业务的case请求了,我们就可以自动清理,这就解决了我们人工维护case的一个痛点。
- 代码覆盖率是基于Jacoco实现的,也是增量跟全量的一个报告,可以看这次变更的一个覆盖率情况。


- 首先是环境创建的流程,上图中我们可以看到我们包含了环境,即应用及其依赖,所以我们会先锁定资源,包括Kvm、 DB这些东西,然后再进行采集编排,然后去触发任务执行,调度执行。
- 其次是业务巡检,我们会定期去调用业务线提供的一些全链路测试case,定期去执行,验证这个环境的可靠性。同时我们也会去消费一些变更消息,包括配置变更、代码变更、数据变更,去同步这个环境,这样就保证了我们基础环境的自运维。
- 然后是软路由,我们会有一套基准环境,是全链路的,包含了全部的应用,但是对于项目来说,只需要建环境值,包含自己变更的这些应用以及它的一些DB依赖。在真正业务测试的时候,从网关进来,如果在软路由,即自己这个项目环境里边有,我就会走到自己项目环境,如果没有就会请求到基准环境。从这个层面来看,项目对应的环境它只包含自己本次变革的应用,对资源的节约是非常大的。同时因为应用少了,我们创建的速度也提升了,这样就会保证在我们的测试过程跟开发过程中,环境不会成为瓶颈了。





- 基本属性是身份,Appcode就是它的唯一标识。
- 环境属性,包括应用要运行的软硬件环境配置等。
- 发布参数,包括编译参数、打包参数、发布策略等。
- 依赖信息,包括我有哪些网络依赖,例如我们的域名owner,数据库依赖,以及服务之间的调用关系。






- 使整个流程更加的自动化;
- 使一些上游的数据向下游传递。

- 系统技术先进性,系统当前使用的是不是TC组件,TC组件是不是最新的,TC组件它其实是所有服务的一个基石,后续的Trace链路,各种的治理全都依赖于它。技术先进性可观测之后,尤其是团队维度,在整个公司技术演进的时候,我就可以先着力地去改进它,去发力去做一些感性的应用。
- 健康度,系统健康度是指我当前的系统是不是有报警,它是不是多机房灾备,质量保障手段是不是足够健全等,我可以据此了解应用的健康度。
- 一旦遇到了问题,我们可以快速定位,像上述我们说的日志、Trace以及监控等。
边栏推荐
- Half year inventory of new consumption in 2022: the industry is cold, but these nine tracks still attract gold
- 【机器学习】K-means聚类分析
- GaussDB创新特性解读:Partial Result Cache,通过缓存中间结果对算子进行加速
- Halcon knowledge: matrix topic [02]
- Additional: (not written yet, don't look at ~ ~ ~) webmvcconfigurer interface;
- Halcon knowledge: regional topics [07]
- Etcd tutorial - Chapter 9 etcd implementation of distributed locks
- 招标公告:天津市住房公积金管理中心数据库一体机及数据库软件项目(预算645万)
- 附加:(还没写,别看~~~)CorsFilter过滤器;
- Good partner for cloud skill improvement, senior brother cloud of Amazon officially opened today
猜你喜欢

RT-Thread 堆区大小设置

RT-Thread 堆區大小設置

Go zero micro Service Practice Series (VIII. How to handle tens of thousands of order requests per second)

Etcd教程 — 第九章 Etcd之实现分布式锁

ArcMap operation series: 80 plane to latitude and longitude 84

搬运两个负载均衡的笔记,日后省的找
![删除有序数组中的重复项 II[双指针--多情况统一]](/img/e2/cadfdbe476a86cb2d72c1ae0160a4a.png)
删除有序数组中的重复项 II[双指针--多情况统一]

备战数学建模34-BP神经网络预测2

Installing jupyter notebook under Anaconda

9:第三章:电商工程分析:4:【通用模块】;(待写……)
随机推荐
JS Es5 can also create constants?
In order to make remote work unaffected, I wrote an internal chat room | community essay
There are so many kinds of coupons. First distinguish them clearly and then collect the wool!
Halcon knowledge: regional topics [07]
Yunhe enmo won the bid for Oracle maintenance project of Tianjin Binhai rural commercial bank in 2022-2023
Siyuan notes: can you provide shortcut keys for folding all titles on the page?
牛客网:乘积为正数的最长连续子数组
Simpleitk encountered an ITK only supports orthonormal direction cosines error while reading NII
dart:字符串replace相关的方法解决替换字符
[Verilog quick start of Niuke online question series] ~ bit splitting and operation
抖快B为啥做不好综艺
GaussDB创新特性解读:Partial Result Cache,通过缓存中间结果对算子进行加速
BC1.2 PD协议
CGR 21 (D,E,F)
Etcd教程 — 第九章 Etcd之实现分布式锁
Observation cloud reached in-depth cooperation with tdengine to optimize enterprise cloud experience
猎头5万挖我去VC
[Verilog basics] summary of some concepts about clock signals (clock setup/hold, clock tree, clock skew, clock latency, clock transition..)
[activity registration] it's your turn to explore the yuan universe! I will be waiting for you in Shenzhen on July 2!
删除有序数组中的重复项 II[双指针--多情况统一]