查看原文
其他

哪吒:猪八戒十年DevOps演进之路

The following article is from 八戒技术团队 Author 哪吒


前言

时间先回退到2011年,那时候我刚加入猪八戒,加入公司之前我还不知道svn、git是什么东西,连发布代码也是用的最传统的FTP上传方式。而早在2009年,来自Flickr员工在一场会议中所揭露了如何改善Dev和Ops的合作,达到了单日10次发布的高速度,催生了后来的DevOps运动。(题外话FTP的方式几秒就能发一次代码)所以DevOps到底解决了什么问题呢?接下来结合猪八戒的不同阶段给大家介绍一下我们的DevOps演进之路。


猪八戒devops演进之路

1、初创期

虽然2009年就提出了DevOps,但国内很少人听说过这个名称,但是这并不代表我们没有去解决dev和ops的协作问题。

那一年猪八戒网仅有4台物理机,托管在某IDC机房,总的工程数20左右,均为PHP工程,技术人员20左右,由于迭代的频率很高,每天发布30+次,公司仅有2个运维人员,所以如果没有自动化的方式是很难完成这么高频率的发布的,所以有了公司第一版的“DevOps”。

如下图:

上图的流程特别简单,使用svn管理代码,有两个固定的分支,一个用于发布到测试环境,一个用于发布到线上环境。研发提交代码后,通过svn自带的hooks功能配合rsync将代码分发到对应的服务器,由于当时所有应用都是部署在一台物理机,所以只需要全量pull即可完成发布。通过这套简单的流程即可实现研发合并并提交代码即可发布上线。解决了快速发布的问题。

 

2、业务增长期

时间到了2013年,业务也快速增长服务器、应用、研发人员都出现了很大规模的增长,伴随着很多问题也出现了,随意的发布让线上环境变得很不稳定,配置文件变更不当导致全站500频频出现。虚拟机的引入也让之前的发布方式变得难以支持。所以此时急需对之前的发布方式进行升级,来满足现阶段的需求。

如下图:

这个阶段最大的变化是大量使用虚拟化,并对应用进行了独立部署,同时为了控制发布取消了svn hooks引入了SYN系统(我们内部取名)。

SYN主要解决以下几个问题

1、权限控制(可以控制到工程、环境、发布时间)

2、引入exclude_list来解决配置文件变更的问题

3、工程代码映射关系(CMDB1.0维护工程和机器的关系)

4、代码分发

通过SYN系统的引入,线上的稳定性开始变好,配置文件研发提交申请由运维人员统一进行维护,出现配置异常的情况也大幅下降,然而发布的效率也相对之前减少了很多。


3、多语言

时间到了2015年,业务规模和人员规模再次出现了大幅增长,开发语言也由以前的纯PHP到大量引入JAVA语言,显然之前的SYN系统已经不能满足需求。这时我们开始引入Jenkins来解决CI的事情。其他结构基本没有多大的变化。

如下图:

我们继续沿用了之前的SYN系统来控制权限,但是CI部分全部交给了Jenkins,这个阶段我们的CMDB也完成了代码、工程、资源的100%关联。所以CD部分也变得非常方便,有一个短暂的阶段为了解决多部门联调的问题,出现了10套测试环境,得益于CMDB信息完善以及一些自动化的能力,所以在资源足够的情况下可以很快速的完成一套环境的搭建。


4、微服务、容器

时间到了2016年,这个时候公司也引入了很多大厂的大牛,微服务、容器、DevOps也进入了我们世界,于是就有了长达2年的DevOps研发之路。

先看一个图:

这种架构我相信了解过DevOps的都不会陌生,这里我重点介绍3个不一样的地方。

(1)基于JIRA的研发流程管控。通过JIRA管理研发流程,发布的时候严格校验状态,确保所有发布均符合研发规范。

(2)SDL和流水线结合(DevSecOps),从创建工程的安全评审,到每次提交代码的自动扫描,再到发布的安全测试,确保每一次发布的代码都是安全的。

(3)猪八戒容器云,完美实现了流水线和多个K8S集群的封装,解决了跨机房部署等问题,目前猪八戒网90%的工程均运行在容器中,较之前使用虚拟机部署减少资源60%以上,大幅减少了IT成本,同时服务发现、滚动发布、动态扩容等也让业务更加稳定。

附容器云项目核心组件(如果大家对容器云感兴趣可以在评论区留言):

目前我们的流水线每天支持业务发布150+次,发布成功率99.8%+,完成一次从测试环境到线上发布平均耗时595s。

 

5、一站式研发平台

DevOps只是研发过程中的一部分,所以我们需要有一套新的平台来解决工程的全生命周期管理。去年10月份我们开始以需求为出发点,围绕工程全生命周期管理的平台打造。底层架构和上面的没有什么区别,只是对产品做了大量减法,让产品的用户体验更好,下面从功能角度简单介绍一下我们的一站式研发平台。

(1)重新定义工程类型,对历史所有工程进行盘点最终梳理出6大类型便于研发准确的创建工程。根据类型不同最小化的让用户输入信息。

(2)本着谁定义,谁负责的DevOps理念,一站式研发平台把所有权限交给了工程负责人。工程负责人可以完成配置、发布,接收告警等所有工程管理配置功能。

(3)需求发布

前面已经提到,我们对研发流程管控是较为严格的,任何需求的发布都需要经过严格的流程审批,每个流程可以发布的内容也是严格限制的。为此我们引入需求管理,把每次交付串联起来。

(4)技术架构

一站式研发平台围绕项目全生命周期,以场景化的方式把可能用到的研发工具串联起来,各个功能仍然由不同的子系统完成。整体架构如下图。

 

对于云原生的一些看法

我个人是比较拥抱云的,特别是云原生,我们目前业务虽然都在云上,但是全都是使用的云的基础设施,其他服务全都是内部团队在做,从投入的角度来说确实很大,而且期间也不乏走了很多弯路,我也听到很多关于拥抱云原生应用后的一些担忧,确实有利有弊,自建对于技术团队来说更加灵活因为技术相对可控,一旦拥抱云就会有很多限制,毕竟云上都是通用能力,如果有大量定制化的需求很难得到满足。另外如果企业已经投入了大量的成本有一套自有的能力,上云短期也会有很大的适应、改造和资金成本。

引用孙子兵法开篇的第一句话“兵者,国之大事,死生之地,存亡之道,不可不察也”。是否拥抱亦是如此。




本篇文章主要是整体介绍,不涉及过多技术实现细节,如果各位对哪方面感兴趣可以在文末留言,后续我们的技术大牛输出相关技术细节文章。

 

- EOF -


想要加入中生代架构群的小伙伴,请添加群合伙人大白的微信

申请备注(姓名+公司+技术方向)才能通过哦!



技术人成长精彩文章推荐

阿里高级技术专家宋意:平凡人在阿里十年的成长之旅

RocketMQ 大神丁威亲述参与开源社区的方式

多隆:从工程师到阿里巴巴合伙人

为什么说IT科技公司应该留住35岁员工?

工程师的基本功是什么?如何练习?听美团技术大咖怎么说

美团技术专家云鹏:写给工程师的十条精进原则!

找CTO杜仲:再谈中年危机和应对策略

阿里合伙人范禹:常挂在阿里技术人嘴边的四句土话

Erik Dietrich:二十年的编程,教会我的五件事!

支付宝研究员兼OceanBase总架构师杨传辉:我在数据库梦之队的十年成长路

Mobvista首席架构师蔡超:工作感悟之失败与成功,我的8点总结

奈学教育CEO孙玄:成为一个有情怀的工程师,我的12点思考

Netstars CTO陈斌:架构师的成长之路

阿里技术专家麒烨:修炼测试基本功

左耳朵耗子:程序员如何把控自己的职业?

阿里6年,我的技术蜕变之路!

程序员管理思维修炼,只需要反复阅读本篇

“教授”洪强宁和他穿越的技术江湖

大神手把手教你投身技术18年而没有中年危机的秘诀

阿里合伙人程立:阿里15年,我撕掉了身上两个标签

CTO 技术管理的“三板斧”

技术管理者必备管理模板

张一鸣:优秀年轻人的五个特点

技术团队的工程师文化:效率与价值

美团大咖:程序员35岁前应做好的技术积累

史海峰:万字长文剖析技术人如何成长



   END     

#技术人必备#




点个在看,让更多人看见
: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存