点这里👇星标关注,获取最新资讯!
郑喜东,现就职于东方电气(成都)氢能科技有限公司,研发效能(DevOps)工程师(中级)认证学员
研发效能的概念源自精益思想,强调以客户为中心、跨团队高效协作,通过流程优化、工具改进、组织文化变革,提升软件开发与交付的价值、效率和经济性。在数字化转型浪潮中,软件开发和运维正遭遇效能低下的挑战,传统的研发模式已不足以应对现代软件开发的复杂需求。因此,提升研发效能成为当务之急。容器技术是一种轻量级虚拟化技术,贯穿了研发效能的全生命周期。本文旨在通过回答“什么是研发效能”、“什么是容器技术”、“容器技术为什么可以提升研发效能”、“如何通过容器技术提升研发效能”几个问题探讨容器技术如何为研发效能带来革命性变革。
IDCF
一、什么是研发效能
研发效能的概念起源于精益思想,是一种强调以客户为中心、跨团队高效协作,通过优化流程、改进工具、变革组织及文化来提高软件开发和交付的价值、效率和经济性的文化、运动或实践。研发效能的本质是解决复杂度管理问题,目标是多(价值高)、快(速度快)、好(质量好)、省(成本低)且持续的实现工作价值最大化。
研发效能贯穿业务分析、需求分析、系统设计、系统开发、系统集成、测试验证、版本发布、系统运维、系统下架等产品全生命周期过程,核心实践包括持续探索、持续集成、持续部署、持续发布、持续反馈与优化,提升研发效能应聚焦于优化研发效能的五大核心实践过程。
持续探索的核心在于通过创新驱动、快速验证、学习成长、适应性变化、风险管理等方式不断寻找和尝试新的方法、技术和工具来提升产品开发的速度和质量,具体做法有技术雷达、黑客马拉松、跨部门协作、最小可行产品(MVP)等。
持续集成的核心在于通过频繁提交代码、自动化构建、自动化测试、快速反馈和代码库同步等方式提高代码质量并加快开发速度,通常用到的工具有版本控制工具如Git,服务器构建工具如Jenkins、Travis CI和GitLab CI,框架测试工具如Junit和pytest等。
持续部署的核心在于通过自动化部署、频繁部署等方式确保软件能够自动且可靠地从开发阶段过渡到生产阶段,通常用到的工具有配置管理工具如Ansible、Chef和Puppet,容器工具如Docker、Kubernetes。
持续发布的核心是通过零停机发布、频繁发布、用户价值驱动、自动化回滚等方式确保将软件产品的更新和发布转变为一种常规和持续的活动,而不是偶尔的、大规模的事件,用以提高用户满意度并降低发布风险,常见的持续发布策略有蓝绿部署、金丝雀发布、滚动更新、分期发布、A/B测试、功能切换等。
持续反馈与优化的核心是通过反馈循环、用户反馈、性能监控、数据分析、团队反馈、持续改进等方式在软件开发过程中不断收集反馈并根据这些反馈进行产品和流程的改进,用以提高产品质量并增强用户体验,通常用到的工具有敏捷开发工具如Kanban、Scrum,反馈收集工具如用户调查工具、用户行为分析工具,监控和日志工具如New Relic、Datadog、ELK Stack等。
IDCF
二、什么是容器技术
容器技术是一种沙盒技术,主要目的是为了将应用运行在其中,与外界隔离,并方便这个沙盒可以被转移到其它宿主机器。本质上,容器是一个特殊的进程,通过名称空间(Namespace)、控制组(Control groups)、切根(chroot)技术把资源、文件、设备、状态和配置划分到一个独立的空间。通俗点的理解容器就是一个装应用软件的箱子,箱子里面有软件运行所需的依赖库和配置,开发人员可以把这个箱子搬到任何机器上,且不影响里面软件的运行。
为了实现容器进程对外界的隔离,容器底层主要使用名称空间(Namespaces)来实现隔离控制,使用控制组(Control groups)来实现资源控制,使用切根(chroot)来实现根目录控制。
容器本质上是一个进程,而容器之间的隔离是通过Linux平台的名称空间技术实现的。当创建一个容器时,实际上是使用Linux的clone方法来创建一个新进程,并通过指定额外的名称空间参数,使得这个新进程属于一个独立的空间。这样,容器内的进程只能看到自己的资源,仿佛处在一个独立的盒子内,但实际上这些进程在宿主机上是真实存在的,并且受宿主机的管理和控制。
为了控制容器进程使用的资源(如CPU、内存、存储和网络等),引入了控制组的概念。控制组可以限制一个进程能够使用的资源上限。在Linux系统中,控制组的操作接口以文件系统的形式暴露给用户,位于/sys/fs/cgroup路径下。
切根可以改变一个程序运行时参考的根目录位置,引入切根的概念是为了让不同容器在不同的虚拟根目录下工作,相互不直接影响。
容器的特性包括隔离性、轻量性、快速性、可移植性、可复用性、安全性、环境一致性、版本控制性、资源高效性和集群性:
容器的隔离性体现在操作系统层面的资源隔离,如CPU、内存、存储和网络,但共享相同的内核;
容器的轻量性体现在比虚拟机(VMs)更轻量级,因为它不需要为每个应用都运行一个完整的操作系统,而是共享宿主机的操作系统内核;
容器的快速性体现在它可以在几毫秒到几秒内启动,远比虚拟机快,因为它不需要启动整个操作系统;
容器的可移植性体现在容器化应用可以在任何支持容器技术的操作系统和云平台上运行,使得应用迁移变得简单;
容器的可复用性体现在容器镜像可以复用,相同的镜像可以在不同的环境中多次部署,而不需要重新构建;
容器的安全性体现在它的隔离提供了额外的安全层,尽管容器间共享宿主机的内核,但容器间的交互可以通过策略和控制进行限制;
容器的环境一致性体现在它提供了一致的运行环境,无论是在开发、测试还是生产环境中,都可以保证应用的行为一致性,减少了因环境差异导致的问题;
容器的版本控制性体现在容器镜像支持版本控制,可以轻松回滚到之前的版本,这对于快速迭代和持续部署非常有用;
容器的资源高效性体现在它比虚拟机更高效地利用系统资源,因为它们不需要为每个应用分配单独的操作系统资源;
容器的集群性体现在它可以轻松地与自动化工具和编排工具(如Kubernetes)集成,实现大规模容器集群的管理和自动化。
IDCF
三、容器技术为什么可以提升研发效能
提升研发效能的本质是解决复杂度管理问题,软件研发是一个复杂过程,不能试图用复杂方法处理复杂过程,而应尝试将复杂过程简化成简单过程,再用简单方法处理简单过程,因此研发效能提升的核心是降低管理单元的粒度和解除工程对象之间的耦合,而具备隔离性、轻量性、快速性、可移植性、可复用性、安全性、环境一致性、版本控制性、资源高效性和集群性等特性的容器是降低管理单元粒度和解除工程对象之间耦合的强有力工具。
微服务化、容器化与动态管理是使用容器技术降低管理单元粒度的三个关键能力。微服务化是指通过容器技术可以将庞大的单体应用分解为多个微服务,每个微服务负责应用的一部分功能,可以独立部署、扩展和更新。容器化是指通过容器技术可以将每个微服务及其依赖打包为轻量级、可移植的容器镜像,通过容器的轻量性和快速性等特性实现对微服务的精细化管理。动态管理是指通过容器技术可以动态管理容器全生命周期,根据负载情况自动扩展或缩小微服务实例数量。微服务化、容器化与动态管理三者相辅相成,共同构成了管理单元粒度降低的关键能力。
服务解耦、数据解耦、配置解耦、部署解耦、网络解耦是使用容器技术解除工程对象之间耦合的五个主要方面。服务解耦是指通过容器技术可以将应用分解为微服务,实现服务之间的独立性和互操作性,降低组件间的直接依赖。数据解耦是指通过容器技术可以实现独立的数据存储方案,确保各服务数据自治,减少数据层面的耦合,提升数据的灵活性和安全性。配置解耦是指通过容器技术可以实现外部化配置管理,使得服务的配置信息与代码分离,便于不同环境下的配置调整和部署。部署解耦是指通过容器技术可以使每个服务独立部署、独立升级,减少部署过程中的相互影响,提高系统的稳定性和可维护性。网络解耦是指通过容器技术可以实现服务之间的动态网络连接,提升网络通信的灵活性和可管理性,减少网络层面的耦合。服务解耦、数据解耦、配置解耦、部署解耦、网络解耦在解除工程对象之间的耦合方面发挥了至关重要的作用,是使用容器技术解除工程对象之间耦合的五个主要方面。
因此,使用容器技术能够降低管理单元的粒度、解除工程对象间的耦合,将复杂过程简化成简单过程,然后使用简单方法处理简单过程,解决复杂度管理问题,提升研发效能。
IDCF
四、如何通过容器技术提升研发效能
容器技术赋能研发效能的过程可以拆解为“分析设计”、“提交代码”、“构建镜像”、“自动测试”、“镜像上传”、“部署回滚”、“监控日志”、“持续优化”8个实施步骤。
1、分析设计:
研发设计人员分析现有系统,确定合适的微服务划分策略,设计服务之间的交互方式和数据流,编写代码。
2、提交代码:
开发人员完成代码编写后,将代码提交到版本控制系统(如Git)来管理代码,并设置Webhooks或触发器,以便每次代码推送到仓库时自动触发构建流程。
3、构建镜像:
自动化提交完成后,使用Dockerfile自动从版本控制系统获取最新的代码,添加必要的依赖和配置,构建完整的应用程序容器镜像。
4、自动测试:
自动化构建完成后,使用CI工具(如Jenkins、Travis CI等)编写的代码编译、静态代码分析、单元测试等任务将在Docker容器中自动化运行,以确保环境一致性。
5、镜像上传:
如果通过所有测试,构建好的容器镜像将被上传到容器镜像仓库(如Docker Hub、Harbor等)进行存储和分发管理,方便后续的部署和维护。
6、部署回滚:
使用Kubernetes 、Docker Swarm等容器编排工具来定义容器的部署策略和应用程序状态。通过CI工具将新构建的镜像部署到测试环境或生产环境,并在必要时快速回滚到之前的版本。
7、监控日志:
在Kubernetes中集成监控和日志收集工具(如Prometheus和ELK Stack),以实时监控应用程序和基础设施的状态,并收集分析日志数据,帮助快速定位问题,确保系统的稳定性和可靠性。
8、持续优化:
根据监控和日志分析的结果,不断优化流程,提升研发效能。
在整个过程中,容器扮演着至关重要的角色。使用容器技术,可以轻松构建高效、可靠且易于管理的自动化体系,提升研发效能。
IDCF
五、总结
研发效能的本质是解决复杂度管理问题,目标是多、快、好、省且持续的实现工作价值最大化。而容器技术能够降低管理单元的粒度、解除工程对象间的耦合,将复杂过程简化成简单过程,然后使用简单方法处理简单过程,解决了复杂度管理问题。容器技术贯穿研发效能的全生命周期,为研发效能带来了革命性的变革。
总的来说,容器技术以其独特的优势,为软件开发和运维团队提供了一种新的思路和方法,以应对现代软件开发和运维的挑战,提升了研发效能。
参考书籍
《研发效能管理工程师认证培训课程学习手册》,IDCF,英捷创软科技(北京)有限公司
《DevOps IT 效能新基建》,顾黄亮,人民邮电出版社
《Google软件测试之道》,James Whittaker、Jason Arbon、Jeff Caro, 人民邮电出版社
《敏捷无敌》,王立杰、许舟平,电子工业出版社
IDCF