本文来自微信公众号“twt企业IT社区”,作者/汪照辉。
最近平台工程的概念很热,很多人鼓吹DevOps已死,平台工程才是未来。这本身就是个伪命题,过于武断。本来也不想多说,但想想还是要澄清一下,免得人云亦云的人多了,总是误导很多人。
DevOps是什么
DevOps是什么?DevOps的目的是让开发作运维吗?是有很多人鼓吹“谁开发谁运维”,但是否深入理解了“谁开发谁运维”的核心内涵?是否想过“谁开发谁运维”要解决什么问题?
如果仅仅是遵循别人鼓吹的方法,而不去考虑为什么,那一定会是教条主义的,一定会和实际有冲突的。不同的环境照搬别人的方法,可能平滑运行吗?所以,在采取某种方法的时候一定要根据自身实际来考虑、来剪裁、来调整以使其适应自身的环境和实际。DevOps本质是一种方法论。
SRE让运维人员参与开发并通过错误预算来协调研发和运维之间的关系,以确保软件系统的可靠性满足某项指标要求。这或许给DevOps方法论带来了启示,也因此可以说DevOps方法论的核心是协调和平衡研发和运维的利益诉求,而不是去实现一个DevOps平台或CICD工具链。所以DevOps尝试解决的是生产关系问题,而不是生产工具和生产力问题。
SRE可以看作是DevOps的一种实践,但SRE是偏运维的,关注的是软件的可靠性问题。为了让运维人员熟悉软件的处理逻辑和异常处理,以便更快的实现故障定位和故障恢复,SRE被要求其开发工作量不低于50%。这是一种很好的尝试,尝试让运维人员熟悉研发,对软件架构和设计、软件代码和逻辑等有深入的认识和理解,这样遇到软件异常和故障时就能快速判断根因所在,快速的解决问题。
运维人员可以做开发,开发者为什么就不能做运维?开发者就高人一等吗?你不懂运维你如何能设计开发出满足可靠性要求的软件?不懂网络、不懂存储、不懂部署架构、不懂操作系统等基本内容,如何让你开发的软件匹配实际环境要求?不了解、不理解基础设施,就难以设计开发出高可靠性的软件。就像你不懂数据库,如何能写出高优化的SQL语句?
DevOps方法论的目的并不是非要让开发人员去做运维,特别是运维不熟悉的基础设施。但开发人员需要对基础设施有基本认识,需要具备相应的知识和认知,在软件研发时避免引入低级的错误和不必要的麻烦,以提升系统可靠性,减少运行故障。软件工程中,人是最大的不可控因素。软件人员的效率和其认知及情绪密切相关。也因此协调和平衡好软件工程中相关人员的利益诉求,使其没有后顾之忧,是DevOps方法论重要的使命之一。
平台工程是什么
平台工程又是一个新概念,但其本质并没有质变。为什么现在很多人提平台工程而去贬低DevOps?这本身就是因为两个概念前后错位的问题。
平台工程追求的是自服务敏捷基础设施能力,这在多年前云原生中就已经提出来了,只是大家都习惯于单体系统的建设,对底层基础设施能力没有统一的要求,但云计算使底层基础设施成为一个统一的平台。云原生应用的研发和部署运维对统一的平台支撑能力有了明确的要求,平台工程才被重视。
由于前期对DevOps的错误认知和不重视自服务敏捷基础设施的建设,把DevOps方法论等同于去构建基础的研发运维支撑平台,让研发人员去做运维但却没有基础设施的支撑和赋能,所以导致开发人员的心里落差,对DevOps没有好感。笔者几年前就强调过:运维的敏捷才能真正带来研发的敏捷。没有自服务敏捷基础设施的支撑,让研发人员去做运维会使生产力达不到生产关系的要求。
DevOps是方法论,协调的是生产关系;平台工程追求的是工具赋能,是生产工具;生产工具体现着生产力。也因此说科技是第一生产力,科技进步会带来生产工具变革,从而使生产力变变革,推动生产关系变革。正是因为平台工程的能力没有实现就去做DevOps,明显是生产关系超前了,生产力跟不上,就像曾经的空想社会主义一样,结果是失败的。
所以平台工程是基础,构建新的生产工具,代表新的生产力,理论上应该先推行,以促进生产力的变革,从而促进生产关系的变革。否则,只会使先进的生产关系是无法适应的,使先进的生产关系水土不服。这也是目前在推不动DevOps的时候开始关注平台工程。并不是DevOps不好,而是关系错位了。
DevOps的推行需要良好的自服务敏捷基础设施的建设,也就是平台工程所追求和需要实现的。平台工程的价值在于提供统一的标准的基础设施,赋能研发、运维等相关人员,从而减少这些人员的重复建设工作量,提升效率和敏捷性,做到运维的敏捷。所以说运维的敏捷是基础,以更好的支撑研发的敏捷。
平台工程关注的能力是层次架构分层中的中下层基础设施能力,DevOps关注的是应用生命周期中的利益平衡和协调问题。DevOps落地需要平台工程的支撑,或者说,平台工程是DevOps方法论中的一部分。两者并不矛盾,不是非此即彼的问题,而是相辅相成的。
再看SRE的价值是什么
SRE其实比较好的解决了平台工程的问题。笔者一直也强调运维基础设施和运维平台的重要性。在建设容器云平台的时候就规划了以轻量化容器PaaS平台为支撑,以“应用管理”为核心的架构,以PaaS平台赋能应用的部署、运行、运维管理,提供自动化、自服务化的基础设施工具,这其实就是平台工程所追求的能力。SRE关注运维,关注用软件工程的方法来运维、实现自动化、自服务化、平台化等,从而提升可靠性。SRE也通过“数字”来和研发进行协调,是数字化的很好尝试。但由于其早期探索性,还在不断的发展中,也有一定的局限性。
将SRE、DevOps和平台工程等结合来看,可以更好的认识和理解系统的建设思路和发展趋势。我们不能简单的把这些概念割裂开来去看待,否则就容易得出非此即彼的错误认知。