当前位置:网站首页>互联网研发效能实践之去哪儿网(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以及监控等。
边栏推荐
- Siyuan notes: can you provide shortcut keys for folding all titles on the page?
- Etcd教程 — 第九章 Etcd之实现分布式锁
- Half year inventory of new consumption in 2022: the industry is cold, but these nine tracks still attract gold
- 云技能提升好伙伴,亚马逊云师兄今天正式营业
- I implement "stack" with C I
- Headhunter 50, 000, I'll go to VC
- JS Es5 can also create constants?
- On July 2, I invited you to TD Hero online conference
- Raft介绍
- RTP sending PS stream zero copy scheme
猜你喜欢

RT thread heap size Setting

Bc1.2 PD protocol

Cesium-1.72 learning (add points, lines, cubes, etc.)

RT-Thread 堆區大小設置

异常类_日志框架

观测云与 TDengine 达成深度合作,优化企业上云体验

Observation cloud reached in-depth cooperation with tdengine to optimize enterprise cloud experience

After 15 years of working on 21 types of hardware, where is Google?

OpenCV中LineTypes各枚举值(LINE_4 、LINE_8 、LINE_AA )的含义

Li Zexiang, a legendary Chinese professor, is making unicorns in batches
随机推荐
RT-Thread 堆區大小設置
RTP 发送PS流零拷贝方案
Simpleitk encountered an ITK only supports orthonormal direction cosines error while reading NII
【机器学习】K-means聚类分析
dart:字符串replace相关的方法解决替换字符
Headhunter 50, 000, I'll go to VC
Anaconda下安装Jupyter notebook
Carry two load balancing notes and find them in the future
[wechat applet] basic use of common components (view/scroll-view/wiper, text/rich-text, button/image)
MySQL transaction / lock / log summary
After 15 years of working on 21 types of hardware, where is Google?
搬运两个负载均衡的笔记,日后省的找
Symantec electronic sprint technology innovation board: Tan Jian, the actual controller, is an American who plans to raise 620million yuan
MC Instruction Decoder
Mathematical modeling for war preparation 34-bp neural network prediction 2
Etcd教程 — 第八章 Etcd之Compact、Watch和Lease API
OpenCV中LineTypes各枚举值(LINE_4 、LINE_8 、LINE_AA )的含义
I 用c I 实现“栈”
halcon知识:矩阵专题【02】
Deep learning - (2) several common loss functions