1.什么是DevOps
答:DevOps(Development和Operations的组合)DevOps是一组过程、方法与系统的统称,
用于促进开发、技术运营和质量保障(QA)部门之间的沟通、协作与整合。(可以简单理解为开发运维一体化)
反正它不是某一个特定软件、工具或平台的名字。
从目标来看,DevOps就是让开发人员和运维人员更好地沟通合作,通过自动化流程来使得软件整体过程更加快捷和可靠。
下面的漫画可以形象地展示概念的提出历程:
当进行大型软件项目开发时,会涉及到多人协同开发问题,人不是越多越好,如果没有对人力资源进行合理的分配,反而会大大降低效率,从而导致项目延期无法完成。那么对于多人协同开发问题,为了更好的分工,大多会将项目进行拆分,每个人专门负责一部分,分而治之。敏捷开发的核心理念就是:既然我们无法充分了解用户的真实需求是怎样的,将一个大的目标不断拆解,把它变成一个个可交付的小目标,然后通过不断迭代,以小步快跑的方式持续开发。另外,一个项目是很大的,为了保证项目质量,测试环节不可减少,为了加快速度增大开发效率,QA(quality assurance质量保证的职位)的工作最好是和开发同步交替进行的,需要将测试环节从后面注入到整个开发环节当中,每次可交付的都是一个可用的功能集合,对开发交付的内容进行持续验证。这样开发产品的可控性也更强,阶段性的让客户检验一下项目成果,防止画鸡成鸭。
(有点类似于瀑布模型和快速原型模型的结合体,因为实际瀑布模型每个阶段后面后加上验证测试,快速原型模型有个很大的特点就是设计人员和用户一起进行原型的设计和开发,用户在试用过程中提出修改意见,开发人员再根据意见进行修改和设计)2.多机器问题:之前机器很少架构,简单的时候,开发就可以干运维的活,就算加了几台服务器,那也是脚本将 JAR 包同时发布到这些机器上,也比较简单,但是会有两个人同时上线部署被覆盖的问题,所以在有人上线的情况下,其他人是不能上线的,可想而知这样效率也很低下。公司业务一大,几千台服务器,就需要专门的运维介入了,一方面是因为开发分工每个人都专注于自己的事情,不会那么用心进行维护,另一方面是运维的学习成本确实变高了,开发人质量参差不齐。但是这个时候也不是 DEVOPS,而是 DEV+OPS,这时 Ops 的主要职责就是:硬件维护、网络设备维护、DBA 、基础服务维护、数据监控等,运维们擅长写各种部署,监控脚本,减少机械的重复工作,开发模式变成了敏捷开发模式。
从性质上来说,开发和运维角色的天生对立问题:加入运维,就要协调人员配合,运维的宿命就是维稳,讨厌变动;开发的天职却是不断地推代码上线,进行代码变动,更替迭代,这两个工种天生就是对立的。所以,拆分解耦是最终的出路,将项目拆成一个个小的服务单独部署,拆分部署催生出DEVOPS