一、概念
DevOps不是自动化运维、自动化部署的代名词,是从组织文化、自动化工具链方面重塑软件研发、测试、运维、安全合规的流程、生产工艺、管理方式。
二、产生背景
DevOps的产生和兴起存在历史的必然性,原因如下:
1、在全球化经济蓬勃、互联网移动互联网等新技术催生出新的商业形态,而新的商业形态反过来又强化和促进了企业数字化转型的迫切性和IT在转型过程中扮演角色的重要性。
2、新技术和新的研发工程实践的成熟度提供了基础。例如以云计算(软件定义计算、存储、网络)为代表的灵活、弹性的基础设施供给能力;以微服务架构为代表的架构实践,为软件的持续交付降低了风险,提升了灵活性和交付效率;以Docker为代表的新的软件交付模式,简化了交付难度,且非常适合承载微服务架构下的软件交付;以敏捷开发为代表的研发工程实践已经达到了一定的成熟度,小批量、限制在制品等实践方式,使得流式持续交付成为可能。
3、传统的研发模式和运维管理体系不适应新的商业形态下的新变化、新要求(快速响应、快速实现、高质量交付)。
4、随着中国劳动力成本的持续攀升,以往依靠大量人员投入的人员密集型开发和维护体系已经不堪重负;同时多年积累下的技术债务已经难以适应和满足企业数字化转型升级的要求。
DevOps产生的逻辑
DevOps的产生是历史发展的客观规律-合久必分、分久必合。
1.市场需求与生产制造维度
自第二次世界大战结束后,全球进入了难得的经济建设周期,在经济修复阶段,是通过规模化生产大量种类单一的商品,来满足市场基本的消费需求,随着消费者消费能力的不断提升,开始追求质量和品牌;进入后工业化时代后,消费者的需求变得多元化、个性化,以往标准化、大规模的生产模式不再适应,上世纪90年代末提出的柔性生产(flexible production)成为制造业的转型方向。IT行业也存在类似的发展路径。
2.管理科学维度
为了应对成本可控要求下的大规模生产要求,工业领域做了大量的实践,最终泰勒管理学一统天下,通过将过程、岗位工艺标准化,降低了对人员技能的要求同时提升了产品的质量,另外也为工业化时代批量化培养工人提供了落地实践方案,也进一步加剧了社会化分工的进程。泰勒管理学的优势是可以满足大规模生产质量相同、标准化的产品的要求,同时简化了人员培养、减少了人员替换的成本。随着市场需求向多元化、个性化的转变,要求生产更多创新产品,泰勒管理学指导下的制造业管理模式已经难以适应,深层次的矛盾就是面向大规模制造方式和面向创意制造的矛盾。以丰田制造为代表的新的管理方式和管理哲学应运而生。
3.组织职能
从面向生产的职能型组织导向,向面向市场型组织转变。
4.IT建设模式
大型机(集中式)-->C/S集中模式(分散式)---->云(集中式)
5.人员技能
专业化分工解决大规模建设的市场需求,标准化岗位技能要求有利于社会分工及人员培养,在这样的组织架构、分工和培养模式下,各类角色视角越来越局限,缺乏全局视角,进而带来沟通和协调的低效和高的成本支出。
三、DevOps带来的变化和发展趋势
从组织流程维度讲:是IT组织研发、测试、运维、安全合规等生产过程的转型升级。伴随的是流程优化和再造。
从工具建设维度讲:是工具能力的升级,建设目标转变为由点到线。
从应用架构维度讲:从庞大的单体架构向微服务化、API化演化。
从基础设施维度讲:是从僵化、固定的基础设施模式向灵活、弹性随需、随时的供给能力演化。
从人员技能维度讲:是从专业化技能向通才型、E型人才提升。
从协同工作的关系维度讲:是从以往依靠流程驱动各专业角色的工作,向建立全新的合作、信任、共享为关系的持续学习组织。
四、一些感悟
组织规模与所处的市场发展阶段的矛盾:大规模流程严密的组织适应规划和产出及风险管控的要求,但不适应剧烈变化、创新要求高的市场发展阶段,什么样的组织能长久的生存和发展下去,我认为是需要从组织的适应力和主动调整的执行力两个方面去判断。
业内成功的案例,Google、腾讯从发展规律维度讲,组织的发展必将产生庞大、臃肿的组织形态,而人性中追求安全、追求稳定、追求可预期、惰性等因素会让大部分人喜欢岗位要求明确、稳定的工作,厌恶不确定、恐惧和抵触新的变化。
最后,想说几句话:
对组织的领导者:
请不要低估DevOps作为行业发展趋势的确定性;
请不要高估了DevOps落地的困难,别畏难、坚定干;
请不要怀疑DevOps是否存在商业企图,因为其来源于底层草根,没有商业机构主导走向;
请不要惯性思维,守旧守利,你不变,对手会逼你变,不进则退,与其逐渐陷入困境,不如主动求变,DevOps已经给出了变革的方向。
对IT从业人员:
请走出舒适区,学习提升技能和方法,留给你的时间不多了。
请延展自己的技术和知识面,成为通才,这是市场发展的必要要求。
对架构师:
夯实架构设计能力,在架构设计时,需要考虑可测试性、可维护性、可部署性、可发布性、可自动化运维的能力。
对研发人员:
研究业务和需求;
需要实践内建质量的软件工程;
注重质量保证工具的使用;
在设计和研发时,需要考虑了可持续集成性、可测试性、可部署性、可发布性。
对测试人员:
至少学习一门脚本语言,推荐python;不断提升自动化测试的开发能力;
能够向架构设计和研发提出自动化测试方面的要求和建议;
可以把测试架构师作为未来职业发展的方向之一。
对运维人员:
至少学习一门脚本语言,推荐python;不断提升自动化运维的开发能力;
能够向架构设计和研发提出不间断发布的能力、架构、部署要求。