写点什么

严选 DevOps 工具链的建设

  • 2020-12-26
  • 本文字数:3589 字

    阅读完需:约 12 分钟

严选DevOps工具链的建设

严选经过数年的发展,服务数已经过千,研发人员从数十人到数百人,项目交付的效率要求越来越高,这也意味着对产品研发效能提出了更大的挑战。而研发效能的提升就很难绕开 DevOps 这个老生常谈的名词。


背景


严选经过数年的发展,服务数已经过千,研发人员从数十人到数百人,项目交付的效率要求越来越高,这也意味着对产品研发效能提出了更大的挑战。而研发效能的提升就很难绕开 DevOps 这个老生常谈的名词。


DevOps = Culture + Tools


DevOps 是一个循环递进的过程。通过文化的指引,打造符合当前组织和文化的相关工具链,固化协作的规范、流程;然后随着工具落地、实践推广,促使组织更快地发展和改进产品,从而进一步加强协作文化和方式。所有未通过工具/平台固化下来的流程规范,如果仅仅依靠文档和意识,当团队快速扩大时,其腐化速度是超过想象的。


简而言之,严选从 2019 年开始重整 DevOps 工具链的原因有三:


  • 需求变化快,研发效能挑战变大

  • 历史规范和流程腐化,协同成本变高

  • 整体架构开始转向基于容器的微服务体系,工具链需要适应容器,适应云


从哪里做起


DevOps核心环节


DevOps 中的每个环节都不是孤立的,工具链的建设需要着眼于“链”这个关键字,在规划期就得考虑到各个环节的互通和协同。在严选,这些环节对应的核心职能分别是:


  • Plan :主要对应的是项目管理职能

  • Build(Code):对应的是开发职能

  • Test :主要对应的是质量保障职能

  • Release(Deploy):主要对应在质量保障和运维职能

  • Monitor :开发、质量保障和运维都会涉及


以严选现有的研发团队人员构成,往小了说:建设 DevOps 工具链,就是将 PM、QA、SA 等不同岗位的职能,通过工具/平台的方式赋能给开发团队,进而让整个项目团队变“轻”,变敏捷,在保持质量的前提下提升交付/迭代效率。


我们把核心环节中涉及到的事物抽象成以下 5 大关键对象,工具链的打造完全围绕着这些关键对象的管理和对象之间关联/转换流程的管控来补缺及优化。优先确保各对象本身管理能力的补足,然后优化关联/转换的管控,例如:


  • 产品的监控管理能力覆盖面不足,这是需要补缺的。

  • 项目自身管理的工具现有 Jira,符合需求;但缺失项目到工程关联管理,也是要补缺的。

  • 工程到产品的转换流程,工具已经不满足需求,需要迭代更新。



整个工具链建设的核心原则


  • 贴合组织架构,底层能力系统避免重复造轮子,上层流程系统根据业务和团队现状量身打造。

  • 能自动化的一定要自动化;一步做不到自动化的,要想着分几步去达到,适量过度设计。


切入的重点


CMDB


严选 CMDB 本质上是为了管理产品,资源,人员这三者之间的关联关系,不仅为相关工具提供统一的模型概念,避免不同工具内对相同关联模型的重复维护(不同于项目和工程,前者只在 jira 上管理,后者几乎都在 gitlab;产品,资源涉及到的工具众多,并且随着架构演进,工具也更容易发生迭代);同时用于对齐开发、QA、SRE 之间的名词/术语,降低沟通成本。


严选 CMDB 中关键配置项的关系拓扑如下。最核心的配置项是:“服务”,通过服务串联其他的配置项,也是为了指引各团队都能站在服务的角度去看待问题。



监控体系


监控体系需要的是全面性,才能在问题产生时第一时间被发现,并且避免遗漏。根据现有的技术积累,我们把监控分成 3 个板块进行建设:


  • 资源监控:用于监控服务运行时所需资源。这一部分依赖开源的 open-falcon,基本功能完备,基本上开箱可用,有足够好的扩展性。UI 交互比较反人类,上手门槛比较高。但这块需要直接操作的人员有限,我们把最常用的资源可视化展示单独基于 grafana 做成展示视图。

  • 应用监控:用于监控应用的可用性和性能指标,包含了 app、web 前端、后端服务的全链路调用痕迹。底层依托严选的 caesar 系统(基于 pinpoint 的二次开发定制版),前端、客户端部分由严选自研完成。架构大图:



  • 业务监控:用于监控应用的业务逻辑是否正确,基于数据湖的理念,提供海量数据秒级响应的实时监控能力。用户能通过平台快速完成数据源接入、数据模型构建、监控大盘定制和报警配置:


  • 各种数据源(日志/binlog)快速接入大盘和报警功能

  • 大促期间的数据实时监控。支撑若干日志文件数万至数十万 rps(每秒记录数) 的秒级计算

  • 高并发。针对多个大盘,每个大盘多个图表的情况,能够支撑大促实际使用


业务实时监控(GoldenEye)底层强依赖严选自研的日志平台,支持容器化应用的日志收集,放个架构图:



CI/CD


CI/CD 可以说是 DevOps 中的核心流程,严选在这块碰到的问题有以下几个:


  • 分支管理策略的不一致:大部分是主干发布方式,但也存在分支发布方式,即使都属于主干发布策略,分支命名方式也存在差异。分支合并的策略也有差异。

  • CI/CD 工具的统一性:有些团队用的是 gitlab-ci;有些用的是 jenkins。用 gitlab-ci 的和代码工程结合自然,可以省略 jenkins 上配置,易用性好;用 jenkins 的,可以更好地管控必需的 CI 任务,并且可以利用 jenkins 各种丰富插件,但需要每个项目团队都有对 jenkins 比较了解的成员。相应的发布工具也有不止一套系统。

  • 自动化测试覆盖率不足:能够真正达到比较高自动化程度的模块较少,很多情况下是需要人工触发,或者是人工执行并校验的。CI/CD 整个流程中,不同职能角色之间需要频繁地交叉沟通。


解决这些问题的抓手是统一“制品”概念,以制品为中心来编排和解耦整个 CICD 流程。



原本无论是单元测试阶段,还是联调阶段,验证的应用都是直接从代码分支中编译打包的;只有当 QA 验证完毕后,才会打出制品进行线上部署(也会有合并到主干,并打出 tag,部署时基于指定 tag 完成编译、打包、发布上线流程)。这种方式下,很容易出现测试环境进行验证的制品和实际上线的制品并不是同一个的情况(即使代码相同,不同编译打包流程下,比如打包的配置文件不一样,就会导致应用包实际执行逻辑有差异),存在质量风险的。


我们的期望:开发交付给 QA 和最终线上部署的时候,制品是一致的,所有因环境不同导致的差异性配置信息应该基于配置中心动态获取(也有做法是把不同环境的配置文件全部打包在制品内,然后通过环境变量动态挑选,而不是通过配置中心。但这种做法存在一定安全风险,比如在测试环境内会看到线上的一些连接地址、密钥等)。


因此,为了能够落地此规范,严选把“制品“的产出时机做了变化:从持续交付(Continuous Delivery) 提前到持续集成(Continuous Integration)  阶段,确保 QA 的验证流程是始于制品,而不是始于代码库。此外,把制品的产出规范落地到 CI 阶段也更匹配应用容器化的建设。


最终,CI/CD 这块的解决方案为:


  • 从代码到制品的 CI 过程,全部依赖 gitlab-ci 完成。梳理分支管理策略,触发不同的集成流程,统一由开发完成。工程编译,打包,代码规范,基本测试的跟进修订,这些本身就是开发更为熟悉,采用 gitlab-ci 的方式,和工程结合更紧密,当工程变更的时候调整相应的 ci 任务也会更自然。同时,贯彻 Pipeline as Code 的方式,有助于后继向 Auto-DevOps 演进。

  • 候选制品通过 QA 测试,并最终确定为可部署的验证流程在自动化测试体系内完成,目前通过严选自研的质量管理平台管控必需的验证任务,确保制品质量准出规范落实。这个环节可以全部由 QA 完成,不再需要强耦合开发。后继通过自动化测试体系的不断建设完善,执行效率会越来越高。

  • 制品管理、发布计划、不同资源上的部署实现由严选自研的 Opera 发布平台完成。


研发效能平台


整个 DevOps 体系高效运转的前提是需要有一个统一的流水线,把各个环节进行有机地联动,打通各个垂直领域内的能力。在严选,目前选择集团的 Overmind 作为这一板块的解决方案,关键特性有以下三点:


  • 一站式


  • 建立端到端持续交付流水线,让研发团队的注意力放在价值流动上,而不是放在各阶段的待办任务上,降低不同平台的使用成本。


  • 可视化


  • 整个流程的可视化,易于管控流程中的卡点,确保全链路的规范和过程质量。


  • 全流程的度量分析


  • "If You Can't Measure It, You Can't Improve It", 通过效能平台能够串联不同领域的效能数据,发现数据和数据之间的关联关系,从而在更全局的角度去审视可改进,可优化的瓶颈,避免长期处于头痛医头,脚痛医脚的救火状态。


后继


严选 DevOps 工具链将会伴随业务和研发团队的发展所需,以螺旋向上的方式持续建设:一个阶段重点建设各领域内的能力系统,提升具体方向上的功能深度和执行效率;一个阶段重点建设跨领域的能力协作平台,更有效地搭配不同能力,降低使用成本,并检视能力覆盖的缺失点。


目前的建设主要在以下几个方面:


  • 变更过程中的风险管控,整合不同系统的变更事件,统一风险定义并量化,为 CD 提供辅助决策。

  • 服务的环境治理,用于解决 DevOps 流程中的环境冲突问题。

  • 将现有能力接口进行插件的标准化,便于后继的能力迭代与输出。


一张近期全景图作为本文总结:



作者简介


Saga, 网易严选基础技术部技术总监,负责严选技术中后台建设,目前专注在业务中台、DevOps 等效能提升方向的体系搭建和发展。



头图:Unsplash

原文严选DevOps工具链的建设

来源:严选技术产品团队 - 微信公众号 [ID:YanxuanTechProd]

转载:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2020-12-26 19:302877

评论

发布
暂无评论
发现更多内容

一文简述:云原生架构的四个特征六个原则

穿过生命散发芬芳

4月月更

架构实战营:模块七作业

刘璐

为什么客户体验为王

小炮

客户服务

不想被开巨额罚单?银行需筑起数据安全“护城河”

WorkPlus

王者荣耀商城异地多活架构设计

五月雨

架构实战营 「架构实战营」

众安保险 x StarRocks | 全新实时分析能力开启数字化经营新局面

StarRocks

数据库 StarRocks

关于数据仓库架构及各组件方案选型

五分钟学大数据

数据仓库 4月月更

Tapdata PDK 生态共建计划启动!Doris、OceanBase、PolarDB、SequoiaDB 等十余家厂商首批加入

tapdata

数据库 实时数据

现代间谍技术的演变:从“王牌特工”到“行走的50w”

脑极体

面向对象编程,你真正懂吗?

CRMEB

洞见科技深度参编的央行金科联盟「多方安全计算」及「联邦学习」金融应用研究报告正式发布

洞见科技

金融科技 隐私计算 金融创新

Redis+Caffeine两级缓存,让访问速度纵享丝滑

Java工程师

Java 数据库 redis 架构 高性能

恒源云(Gpushare)_如何加速从 GitHub 上克隆代码或下载文件?技巧大放送8!

恒源云

GitHub

数据库原理知识及SQL语言知识拓展

王小王-123

MySQL 数据库 MySQL 数据库 4月月更

恒源云(Gpushare)_如何获取实例SSH端口号?技巧大放送7!

恒源云

服务器 终端登录

模块七作业

blazar

「架构实战营」

区块链溯源!“有机”食品也要“有迹可循”

旺链科技

区块链 产业区块链 食品追溯

架构训练营 模块七

Geek_16d2b8

架构训练营 模块七

王者荣耀商城异地多活架构设计

AragornYang

架构训练营 架构实战营

如何编写一个Linux内核模块,这次手把手教你

简说Linux内核

内存管理 Linux内核 进程管理 嵌入式开发 设备驱动

音视频开发必懂知识—低延迟相关知识整理

Linux服务器开发

WebRTC ffmpeg 音视频开发 低延迟 流媒体服务器开发

云原生小课堂|高性能、高可用、可扩展的MySQL集群如何组建?

York

云原生 MySQL 高可用 MySQL 数据库

浅谈加密算法 aes

奋飞安全

android 安全

SpringBoot接入轻量级分布式日志框架(GrayLog)

Java工程师

Java spring 分布式 springboot 组件

一文让你深度了解Linux内核架构和工作原理

简说Linux内核

内存管理 Linux内核 进程管理 驱动开发 嵌入式开发

每个互联网人才都应该知道的SQL注入!

喀拉峻

网络安全 安全 渗透测试 SQL注入

老项目改造返回值规范化

Rubble

4月日更

皮皮APP联动社会各界,关注孤独症儿童,照亮人生成长的道路

联营汇聚

王者荣耀商城异地多活架构设计

李大虾

#架构实战营 「架构实战营」

声网的混沌工程实践

声网

测试 混沌工程 质量保障 Dev for Dev

那些年我们一起优化的SQL

Java工程师

Java sql 程序员 索引 MySQL 数据库

严选DevOps工具链的建设_文化 & 方法_严选技术产品团队_InfoQ精选文章