1.1 云原生相关概念
云原生技术让组织能够在动态环境(例如公有云、私有云和混合云)中构建和运行可扩展的应用程序。云原生技术具有很多明显的优势,包括加快代码开发/部署速度、提高服务周转率、采用Serverless[1]计算,以及为DevOps(DevOps是Development和Operations的组合词)流程提供更多动力、可扩展性和弹性能力等。云原生代表着一系列的新技术,比如容器、容器编排工具、微服务架构、不可变基础设施、声明式API、基础设施即代码、持续交付/持续集成(CI/CD,Continuous Integration/Continuous Delivery)、DevOps等,且各类技术间紧密关联。下面,我们先来介绍一下这些新技术。
● 容器:容器是云原生应用程序的命脉。单个容器将应用程序代码和运行该代码所需的所有资源打包在一个独立的软件单元中,形成一个独立的开发环境。容器与底层基础设施分离,运行在主机操作系统之上。容器化让应用程序更易于管理,并允许云原生环境的其他技术在一定程度上参与进来,为应用程序设计、可扩展性、安全性和可靠性等提供新的创新解决方案。与基于VM(虚拟机,Virtual Machine)部署的应用程序相比,容器化应用程序的可移植性更好,可以更有效地使用底层资源,管理和运营成本也更低。容器可以轻松创建、销毁和更新,从而整体加快新应用程序功能的上线速度,让组织能够跟上不断变化的客户需求。
● 微服务:微服务架构将应用程序分解为多个易于管理的微小服务,是一种松散耦合的架构,每个微小服务都执行特定的业务功能。微服务应用程序的松散耦合架构也意味着,微小服务中产生的问题并不会导致整个应用程序中断,这使得开发人员掌控生产问题、快速响应及恢复变得更加容易。微服务是云原生架构的基础,它通常被打包到容器中,因此开发人员可以一次处理一组微服务,而非整个云原生应用程序。
● 持续集成/持续交付(CI/CD):持续集成和持续交付既可以指一组实践,也可以指支持这些实践的工具。CI/CD旨在加快软件开发周期并使整个开发过程更加可靠。CI/CD鼓励通过对应用程序代码进行小幅增量更改,不断集成和测试这些更改,实现使用版本控制。CI/CD实践还可以扩展到交付和部署阶段,以确保新功能在经过自动化集成和测试后即可投入生产。CI/CD管道对于自动构建、测试和部署云原生应用程序很重要。
● 容器编排工具Kubernetes:Kubernetes(简称k8s)是一个开源容器编排平台,可自动执行许多设计部署、管理和扩展容器化应用程序的手动流程,负责处理在主机上部署容器、跨主机负载均衡,以及在后台删除和重新生成容器等大部分功能。Kubernetes是云原生环境运行过程中不可或缺的工具,负责容器的全生命周期管理,提供了具有“零停机”部署、自动回滚、缩放和容器自愈(包括自动部署、自动重启、自动复制和基于CPU使用率的容器缩放)能力的高弹性基础设施。
● DevOps:DevOps创造了一种文化和环境,可促进软件开发人员和IT运维人员之间的协作,让软件构建、测试和发布得以快速、频繁且一致地进行。云原生应用通常通过DevOps管道交付,其中包括持续集成和持续交付(CI/CD)工具链。
● 基础设施即代码(IaC,Infrastructure as Code):IaC是指通过代码而不是手动流程来管理和配置基础设施,让DevOps团队能够在开发周期的早期,在类似生产环境的场景中测试应用程序。实施IaC的团队可以快速、大规模地交付稳定的生产环境。
● 不可变基础设施:这是指在部署后无法被更改,但是可以被重建、替换或销毁的基础设施。使用不可变基础设施可明确定义基础设施,控制其更改,并允许跟踪、快速重用和恢复。
● 声明式API:声明式API允许用户定义系统或查询结果所需的最终状态,在云基础架构和服务的编排中具有重要作用。使用声明式命令可以让开发人员只专注于最终结果,而不用关心实现它的单个步骤。
总体来看,为了真正实现云原生化转型,企业必须综合采用以上几种核心的云原生技术,比如微服务和容器,同时还要进行一项关键的文化变革——在其团队中采用DevOps范式。
要确保应用程序向着模块化、更小且独立的组件转变,团队应该采用微服务架构,其中涉及将应用程序明确划分为模块化组件。这些模块或服务协同工作,每个模块都运行自己的流程并作为较大应用程序的组件来完成各自的小任务。然而,仅仅采用微服务架构并不足以充分利用云原生模型的可扩展性,而且单独使用云基础设施的资源也是不够的。因此,云原生架构还要求团队采用容器服务,用它来运行微服务架构的各个组件。容器使团队能够将应用程序及其整个运行时环境打包到一个独立的包中,从而允许应用程序的各个组件独立地更新、替换或删除。
为了实现应用程序的集成和一致性,容器间必须能够相互通信。为此,应用程序不仅需要通过编排工具Kubernetes进行统一部署、管理等,还需要利用声明式API,让产品、服务和单个容器能够相互通信。
采用DevOps模型是快速开发云原生应用程序的最后一个关键步骤,DevOps模型与微服务、容器和API协同工作,可以更好地实现云原生对于性能和便捷性的追求。DevOps流程模型将企业的开发团队和运维团队很好地融合,从而让团队之间的合作过程自动化。两个团队之间的交互自动化意味着DevOps允许组织并行迭代应用程序,实践持续集成和持续交付。因此,DevOps可以让开发团队和运维团队共同迭代软件,大幅缩短部署时间,减少错误数量,让团队能够更快地交付。
当综合利用云原生的各项技术时,DevOps、API、容器和微服务允许团队以无法想象的速度和灵活性来构建、扩展和快速迭代复杂的应用程序,减少错误,降低延迟成本。
想要落实企业的数字化转型计划,选择和实施正确的云原生技术至关重要。为了做出更明智的决策,企业需要了解每项技术是如何运作的,以及各项技术之间是如何协同工作的。