当前课程知识点:软件工程与软件自动化 > 第六章 CI/CD与DevOps > 专家访谈 > 卓睿科技总架构师带来的精彩访谈
各位同学大家好
我是来自北京卓睿科技公司的刘伟
今天在这里,主要想和大家一起探讨一下软件自
动化这个话题
软件自动化这个概念,其实本身并不复杂
它就是说将原来一个手工要做的事情
通过程序代码将它自动化后,能够可以自动运行
这么一个过程
自动化的内容有很多,比如说
我们经常会提到的办公自动化、审批自动化等等
以及我们今天在这里和大家一起探讨的
软件开发自动化这样一个话题
其实自动化本身
这个技术本身没有太多可以去探讨的
我们更多地去探讨被自动化的这样一些东西
这些东西一般就是管理的思想,以及一些流程
这些流程被固化在里面形成一个自动化的过程
自动化的概念其实在我们业界提的并不多
我们现在提的更多的是持续集成和持续部署
也就是说一个持续化的过程
那持续化其实也是一种自动化
它里面就是说将敏捷的思想带到了
固化在流程里面
大家知道敏捷,讲究的就是快速的开发
快速的部署、快速的迭代
现在我们分别讲一下CI和CD
CI就是对项目进行持续的自动编译,自动测试
保证代码质量的一个手段
其实CI技术,目前为止已经非常的成熟
而且也非常流行
很多公司都在用像Jenkins,Travis这样的一些CI 工具
以我们公司为例
我们公司的业务是做订阅式服务的计费
大家知道,计费是一个非常复杂的业务逻辑
有很多的计费规则和条件
都会影响最终的计费结果
那我们怎么去保证复杂的业务逻辑都是正确的
不会被某个程序员的重构
或者他的一些新的功能的开发
去break以前的一些逻辑呢
那我们就是通过写很多的自动化测试用例
来保证这些规则的正确性
到目前为止呢
我们的自动化测试用例已经达到了30多万个
这些测试用例每天都在自动被运行
我们可以想象一下,这30多万个测试用例跑起来会比较慢
那我们的做法是
把一些重要的测试用例单独抽离出来
变成一个小的集合
然后每一个程序员的代码的提交
都会被CI系统自动触发一个小集合的测试用例
那这个测试用例我们叫做Smoke Test
在这个Smoke Test里我们会编译所有的程序
然后运行小集合的测试用例
如果发现有任何一个测试用例失败的话
这个CI系统会自动通知我们的QA
通知我们的程序员
最后提交这个代码的程序员
让他们尽快去fix这样的一个failure
因为break一个Smoke Test会block
我们所有其他Developer代码的提交
再回过来说我们那个full regression
就是所有30多万个测试用例
我们的做法是把那30多万的测试用例并行运行
所以我们有一个测试服务器机群
我们要保证这30多万个测试用例能够在3 个小时之内能够跑完
这样的话可以保证如果我有一个紧急的fix
要提交到production的时候呢
我们能够很快的去验证我们这个fix是安全的
可以说CI是保证我们的代码总分支一直保持健康的技术
那我们再接下来说一下CD
CD持续化部署其实是CI的一个自然的延续
因为我们前面说了CI这个工具就可以把代码自动去打包
去编译、打包、测试
那很自然地我们就可以把测试完的代码进行封装
比如说,我们它把变成一些可发布的容器的image
这样的话image就可以部署到生产环境
那这个过程其实就是一个持续部署的过程
持续化部署这项技术其实是最近两年才开始流行
而且是随着这个微服务架构的流行变得越来越重要
为什么与微服务架构有关呢
这就得提到微服务架构它本身的特性
微服务是相对于单应用而言的
单应用的概念就是说一个应用程序是一个比较大的大包
它逻辑上有很多业务模块,这些模块都在一个大的应用程序里面
部署的时候相同的应用部署在很多服务器上面
它的特点就是运维比较简单
因为它是同样的大包放在不同的服务器上面
但是它的问题在于拓展相对不灵活
比如说某一个模块现在达到瓶颈了
我需要进行扩展
扩展的时候呢,因为这个模块不能单独运行
我只能把所有的其他模块打包到一个大的服务器里
同时扩展好多份,那这一方面会降低服务器的利用效率
另外一方面,有些条件下单个模块的扩展变得非常困难
这个单运用的问题,其实是微服务架构能很好解决的点
微服务相对来说,把原来的一些逻辑模块剥离成
一个可以独立运行和独立部署的这样一个服务
一个大的系统里面,一般来说,会包括几十、甚至上百个微服务
这些微服务之间还会有一些相互的逻辑的依赖关系
比如说,服务A需要调服务B的API
来完成服务A对外提供的功能
那这样一个逻辑结构呢
使得这个系统变得
从拓扑结构上来说,会变得非常的复杂
那这样对运维人员变成非常大的挑战
大家可以想象一下,原来只部署一个应用
现在变成几十个上百个应用
而且应用之间它们的一些运行环境
也可能是不同的,它部署的步骤可能也是不同的
那如果我们手工的去部署这些东西的时候
就会变得异常的繁琐,很容易出错而且效率不高
那持续化部署正是解决这样一个难题而出现的
持续化部署就是将微服务的部署
变成一个自动化的过程
同时再结合前面CI所提到的一些技术
将很多的应用也能纳入到CI测试的范畴
服务与服务之间的测试来保证
我的某一个服务在发布的时候
它是可以和别的服务所兼容的
那这就是一个持续化部署所解决的一些问题
那这就是一个持续化部署所解决的一些问题
总结一下,持续化部署更像一个pipeline
这个pipeline里面从头开始是代码的提交
然后开始自动编译、自动打包
自动测试,最后容器化,发布容器的 image
然后部署到生产环境
这是一个完整的流程
在这个流程过程中
其实有很多的check points
通过满足这些check points之后才可以发布到生产环境
关于自动化的话题其实还有很多
比如说,我们会有自动化的监测报警
当某一个 阀值出现的时候
会自动地通知运维人员到production环境去看问题的原因
我们甚至还有一些Root Cause这种分析的程序
自动化这个话题其实是一个非常大的话题
这个话题里面可以做的事情有很多
我们现在应该也是在一个逐渐的
持续的完善和持续的改进的过程中
总结一下,软件自动化其实更多的是管理的思想
怎样把这个思想能够通过自动化这个技术固化下来
能够让你有很多程序员共同开发的时候
让所有程序员能够follow这样一个流程
能够遵循我们制定好的一些规范,能够保证我们
软件开发的质量达到要求
这个才是软件开发自动化的一个最终的目的
好,我们今天的话题就谈到这里,谢谢大家
-1.1 软件工程的前生今世
--开篇阅读
--授课视频
-第一章 软件工程基础--1.1 软件工程的前生今世
-1.2 万变不离其宗
--授课视频1/3
--授课视频2/3
--授课视频3/3
-第一章 软件工程基础--1.2 万变不离其宗
-1.3 唯一不变的是变化
--授课视频1/3
--授课视频2/3
--授课视频3/3
--外部链接
-第一章 软件工程基础--1.3 唯一不变的是变化
-1.4 亡羊补牢为时不晚
--授课视频1/2
--授课视频2/2
-第一章 软件工程基础--1.4 亡羊补牢为时不晚
-扩展阅读与话题讨论
--扩展阅读
--话题讨论
-2.1 方法论来源于恐惧
--授课视频
-第二章 敏捷开发--2.1 方法论来源于恐惧
-2.2 敏捷是什么
--授课视频
-第二章 敏捷开发--2.2 敏捷是什么
-2.3 典型敏捷开发方法
--XP敏捷开发方法
-第二章 敏捷开发--2.3 典型敏捷开发方法
-2.4 敏捷不是万能药
--授课视频
-第二章 敏捷开发--2.4 敏捷不是万能药
-专家谈敏捷
-扩展阅读与话题讨论
--外部链接
--话题讨论
-3.1 面向对象核心概念和基本特性
-第三章 OO与UML--3.1 面向对象核心概念和基本特性
-3.2 面向对象设计基本原则
-第三章 OO与UML--3.2 面向对象设计基本原则
-3.3 通用职责分配模式(GRASP)
--通用职责分配模式
-3.3 通用职责分配模式(GRASP)--作业
-3.4 从重构到模式
--模式和设计模式
-第三章 OO与UML--3.4 从重构到模式
-3.5 使用UML设计面向对象系统
--UML综述
-第三章 OO与UML--3.5 使用UML设计面向对象系统
-3.6 主要UML模型图绘制技巧
--UML用例图
--UML类图
-第三章 OO与UML--3.6 主要UML模型图绘制技巧
-扩展阅读与话题讨论
--设计模式有毒么?
--话题讨论
-4.1 案例简介
--书籍参考
--案例说明
-4.2 对象模型之一
--授课视频1/2
--授课视频2/2
-第四章 对象模型分析--4.2 对象模型之一
-4.3 对象模型之二
--授课视频1/2
--授课视频2/2
-第四章 对象模型分析--4.3 对象模型之二
-4.4 对象模型之交互
--授课视频
-第四章 对象模型分析--4.4 对象模型之交互
-扩展阅读与话题讨论
--图书推荐
--话题讨论
-5.1 软件自动化概述
--软件自动化概述
-第五章 软件自动化技术--5.1 软件自动化概述
-5.2 典型自动化方法和工具
-第五章 软件自动化技术--5.2 典型自动化方法和工具
-5.3 文档自动化
--文档自动化视频
-第五章 软件自动化技术--5.3 文档自动化
-5.4 测试自动化
--测试自动化视频
-第五章 软件自动化技术--5.4 测试自动化
-专家访谈
-扩展阅读与话题讨论
--话题讨论
-6.1 持续集成
-第六章 CI/CD与DevOps--6.1 持续集成
-6.2 持续交付和部署
-第六章 CI/CD与DevOps--6.2 持续交付和部署
-6.3 DevOps
-第六章 CI/CD与DevOps--6.3 DevOps
-专家访谈
-扩展阅读与话题讨论
--DevOps专题
--话题讨论
-7.1 质量和质量保证
--授课视频
-第七章 软件质量保证--7.1 质量和质量保证
-7.2 软件质量模型
--授课视频
-第七章 软件质量保证--7.2 软件质量模型
-7.3 SQA组织与职责
--授课视频
-第七章 软件质量保证--7.3 SQA组织与职责
-7.4 全面软件质量管理
--授课视频
-第七章 软件质量保证--7.4 全面软件质量管理
-专家访谈
--专家访谈
-扩展阅读与话题讨论
--外部链接
--话题讨论
-8.1 软件过程综述
--授课视频
-第八章 软件过程改进--8.1 软件过程综述
-8.2 软件过程改进
--授课视频
-第八章 软件过程改进--8.2 软件过程改进
-8.3 能力成熟度模型
--授课视频
-第八章 软件过程改进--8.3 能力成熟度模型
-8.4 过程改进标准框架
--授课视频
-第八章 软件过程改进--8.4 过程改进标准框架
-扩展阅读与话题讨论
--话题讨论
-9.1软件复用综述
--授课视频
-第九章 软件复用--9.1软件复用综述
-9.2 软件构件技术
--授课视频
-第九章 软件复用--9.2 软件构件技术
-9.3 软件复用实施
--授课视频
-第九章 软件复用--9.3 软件复用实施
-9.4 微服务架构
--授课视频
-第九章 软件复用--9.4 微服务架构
-扩展阅读与话题讨论
--微服务扩展
--话题讨论
-文档提交处--文档提交