摘要:文章内容主要来源于光环国际2022年第三届中国科创者大会徐磊老师的分享,原分享名称为"企业开发者平台建设思路,云原生技术如何赋能开发者"。简述当前软件工程中Devops平台还缺少一个软件调试环境环节,这个环境其实尤为重要,它使得落地性更好。
1、目前Devops平台存在一个问题,就是软件状态右移,更多的偏向管理者仪表盘,对开发者引用来说不够理想。
2、IDE 作为一个入口,云化后可以更好数据落地和对质量、安全有保障。
徐磊老师在过去20年只做了一件事情,就是软件工程方面咨询及工具落地。软件工程和软件开发还是有很大的区别。简单来说软件开发服务的对象是大众消费者、各行业应用场景,软件工程主要服务对象是各位开发者。
第一性原理这个词最近被说的比较多,它是来自马斯克的说法,因此这个词也火了,在这里也借用这个词来说明对于软件工程到底在解决什么的问题。
先给出答案,软件工程只解决一个问题:解决终态问题,即软件最终状态问题。这里将软件工程放在时间维度上去观看,去看这些年里软件工程的发展,如何去解决终态问题。
终态问题主要包含:底层硬件、虚拟化平台、操作系统、系统组件、应用服务器、其他中间件、应用代码配置项构成了这个软件环境堆栈管理。下图右侧也可以看见一些devops比较熟悉的说法,基础设施、即代码、云平台、Paas、k8s、容器化技术,可以看出每一个技术点在这个环境堆栈中解决的领域是有区别的。
具体的软件系统中,需要横向铺展,从左侧创立,然后有需求、开发、流水线、测试环境、服务用户的生产环境。在下图有几个黄色填充色的标签框,这里代表从不同的阶段进行状态转移的对象,从开发环境到测试环境再到生产环境。 比如开发人员打包好应用放到测试环境,由测试来验证其正确性,验证后再由运维人员将同样的版本放到生产环境。如果这一切都是依靠人来操作,可以认为目前你的软件工程还处于石器时代,非常原始的时代。在这种状态下,软件的状态能最终被确认吗?只有进入到最终的生产环境才会被确认下来,比如我们的终态确认是在最右侧。
我们怎么把终态向左移动,因为终态不被确认,在整个软件工程实践过程中质量、使用场景都是没有目标,不能知晓软件做成什么样子,如何去保证质量,这就变成一个悖论。至少在进入生产环境之前,明确告诉用户软件会为你形成什么样的特性,用户才会有一个预期,愿不愿意为这个软件特性买单,所以这个终态至少要前移到部署之前。最开始这个状态确认可以通过人工去确认,把它变成自动化以后,就可以终态向左移动,因为有人的参与就会出现各种各样的问题,因为人是会出现错误的。所以我们要用自动化系统去替代人的重复性操作,比如修改配置项、软件运行应用放到特点目录、配置目录权限等这些非常多细节操作,这些通过自动化方式解决掉。
对生产环境做自动化以后,对测试环境也因该被自动化,测试人员在确认一个版本是否满足应用需求时也需要一个目标来确认这件事情。意味着在进入测试环境之前,测试人员需要一个固定目标来确认测试用例是否编写正确,如果目标发生了变化,测试用例肯定是存在问题。终态可以左移到测试环境阶段,这里测试环境是一个泛指,你可以有多个测试环境、测试阶段,这些都是不影响。
从源码到测试环境中间还会有一个过程,开发人员交付的是源代码,大部分并不能直接运行,需要将配置文件和代码进行打包形成一个可交付制品。这个过程需要通过SRM(配置管理)从代码库中拿出某一个特定版本,进行编译打包形成制品,然后通过自动化部署到测试环境中及之后的生产环境。
这里我们可能会产生疑问,都做到了CI/CD为什么还是蒸汽时代,再往后还可以做些什么?
用一个简单概念来定义云计算,云计算主要做了三件事情,把计算、存储、网络标准化,把计算、存储、网络软件化、可编排化。将以前只能靠硬件来实现的内容变成软件化以后,意味对这部分内容可以配置,所以出现了一个概念基础设施即代码(Infrastructure-as-Code,IaC)意味着使用代码来定义和管理基础设施。通过一个配置文件来定义需要多少台虚拟机,每台虚拟需要多少CPU、内存、存储、网络带宽、网卡等等内容,业界有很多此类软件的解决方案。
可以看见还有系统组件、应用服务器、应用运行时三项还是没有纳入到配置环境,那怎么解决它们的问题,这里就是容器所要解决的问题。比如 Docker 解决了操作系统之上到软件应用之下这层内容,应用本身也被纳入容器管理范围。在原有的配置本身也是可以覆盖,比如更换容器后就换了一种管理方式。但是无论如何有了云和容器以后,整个环境堆栈被配置管理起来。
那么基于以上终态问题是否已解决,可以看见离终态确认中间还有一个,就是流水线。在流水线的环境里,它存在一个问题。比如流水线需要去编译代码、去测试代码、运行单元测试、静态代码检查等,所有工具的运行也需要自己的环境,流水线本身也需要环境堆栈管理。
可以看见目前就只剩下一个环节,开发环境没有纳入到终态管理,有没有必要将开发环境乃入到终态管理,可以参考举例:在 Devops做的比较好的企业,做了完整的 IaC 体验,各个环节都可以通过配置文件动态生成出来。这个时候如果开发人员在自己源代码里面引入了新的开源组件,组件在原有的体系中是没有,这个改动会造成从流水线到环境全部需要重新编排,产生连锁效应。
越早确认终态,就能协助整个链条各个角色确更早发现问题,提高效率和持续改进。这是一个根本性问题,如果没有办法解决这个根本问题,在软件工程中做的很多努力都是枉费。
云原生开发时代,对于开发者来说开发是不是变得简单了?
在实际工作中,我们一定遇到过下面漫画的情况。
软件环境安装是一个简单工作,但是又不得不去做,那么这个问题我们如何去解决?
回到 Devops 系统上,Devops 系统究竟做了什么?所有的Devops系统主要解决了以下四个问题:支持、流动、聚合、决策,在任何一个企业中,落地一个Devops平台系统,第一件事情就是要使用工具、方法、流程让整个交互链条、角色能够被支撑起来。比如需求人员需要有方法把需求录入,有工具帮他拆分,在拆分以后还能跟踪到所有拆分的细化需求和原始业务需求的关联关系。进入到开发环节后,开发能够领取任务,知道每天需要做什么,需要通过怎样的设计在代码里面落地,代码通过代码工具进行提交,通过流水线进行编译打包部署到测试环境等等。所有的工具都需要流程、方法支撑,使其运转起来,运转起来后,我们需要保证流动,流动的是最终交付用户的价值。比如用户提了一个需要,在订单中可以商品数量设置,需要先去拆分需求、开发人员编写、提交代码、编译部署到测试环境、测试通过部署到生产环境,流动就是用户想要的场景。所有底层的支撑都是为了上面的流动走的更快、更顺畅,流动的过程中不要出现返工的情况。
下图是基于Devops平台特性做的个人分析,从开发者使用的IDE角度来观看,从中可以看出在向一个方向努力,为了开发者能更准确、更方便去完成开发,并不犯错误。
现在软件在一个笔记本或者台式机上已经很难完成,比如做几十个微服务系统里面的某一个微服务开发,如果没有另外的微服务配合或者供应链的配合,这个应用跑不起来。如果需要开发在本地把环境搭建起来这也是很困难。所有开发者变成了就算在本地运行代码,也需要远端环境的基础中间件,形成配合才能完成开发工作。所以容器基础设置在企业里面落地后切实为开发者解决了很多问题、帮企业解决了很多问题,也带来了很大的开发调试体验。
通过上面的分析,我们知道向哪里走,接下来了解怎么走的问题。
下图涵盖了整个开发过程的逻辑结构,从左侧的需求到右侧的交付过程,图上的点和线在成套的Devops平台上都有对应的解决方案。但是,只有中间版本管理部分,就是从一个想法让开发人员编写的这个开发调试环境唯一没有纳入管理体系中的一个过程。
纵向看,从企业级研发管理平台工具链体系架构来说,基本分为三层:第一层为企业级的管理架构,企业要立多少项,每一个项目上投入多少资源,最后需要多少产出,项目执行多久,整个过程需要那些团队实施,也称之为PM层。第二层为研发管理平台(Devops平台),也称之为SE层,这里面主要管理需求列表、Scrum、看板,配置管理、测试过程、流水线、环境创建等,在这层支撑不同角色,开发、测试、运维、质量QA等。第三层就是涉及到非常多的工具,从开发过程、代码管理、质量控制扫描工具,再到自动化工具,再到环境配置管理工具,这些工具都需某种方式互动。
这里演示一个视频,是徐磊老师过去3年在做的一个产品 SmartIDE,视频暂不支持,感兴趣的可以通过下方链接体验:
对于安全,目前正在尝试 “星型流水线” ,比如以前流水线是串行的,现在直接将流水线围绕 IDE 环境进行星型配置,也就是说在编写代码的时候,就已经对代码进行检查,保证提交代码时候就已经达到高质量标准。
另外在企业中也需要定制化场景,比如自动化测试流程、架构设计流程。
在容器里面模拟一个虚拟机,容器本身是运维优化,但是开发者要在容器中开发需要做一些其他的配置。
最后就是也可以使用熟悉的编译器,非必需使用浏览器。使用常用的 Visual Studio Code 连接到云端工作区,就可以即享受云端工作区体验又可以不改变自己开发习惯。
最后总结一下,希望通过云端 IDE 模式,帮助开发者能够实现对软件工程终态左移的最后一个状态,开发调试环境支撑在云端完整运作,赋予开发者云原生的超能力。
1、企业开发者平台基于企业中台化架构,要如何做好长远规划和设计?
答:中台化是前段时间一个热词,可以把它理解为企业里面已经把一些业务场景进行了封装,希望开发者能够简化它的开发过程。刚才也提到了一个定制化的 IDE 支撑,开发者需要更加容易去消费到中台提供到的能力,所以在企业建立中台及开发者平台结合的时候,一定要重视从开发者角度它怎么更容易引用到中台能力,并且在这个过程中去验证中台提供能力,最终输出的业务价值。
2、云原生和Devops是什么关系,研发人员也需要了解Devops吗?
答:徐磊老师的观点希望开发人员不需要知道云原生,也不需要知道Devops,开发人员主要精力应该放在业务场景是怎样的,工具的问题应该是平台方去解决,最终的状态应该是无感。从现在情况来说和开发者自身职业发展诉求角度来说,有必要去了解一下。云原生和 Devops 有很深的关系,使用了云原生开发场景,所面对就不是一台或者两台服务器,可能是一个非常复杂的集群环境。这种环境管理,很难靠人工完成,所以Devops里面很多强调自动化、配置标准化,其实就是应对云原生带来的挑战。Devops 可以帮助更容易使用云原生系统,反之现在Devops里面也在运用云原生技术,是个相互融合状态。
下一篇:老王linux面试题汇总