云原生的崛起与企业软件研发的革新

我很高兴能踏入云原生架构设计的领域,并为自己能一路坚持创作、不断探索的精神感到自豪。至此,在架构设计指导的主题上,我已经与大家分享了架构基础理论、分布式系统架构设计指导以及微服务架构设计指导这三大核心内容。而支撑我走到现在的,正是每一位热心读者的支持与鼓励。是你们的关注与肯定,点燃了我持续创作的激情。

考虑到公众号内容的碎片化和大家阅读体验的连贯性,我计划在春节期间将之前的主题内容整合成独立的 PDF 文档,供大家系统性地阅读和学习。希望这份资料能成为大家学习路上的得力助手。

展望未来,我们将一起迈入云原生的崭新时代。让我们携手前行,在云原生的浪潮中探索更多可能!

一、云原生的发展历程

云原生(Cloud Native)的概念,最早是由 Pivotal 于 2015 年提出,但直到 2019 年 09 月,“云原生”才突然成为行业最热门的词汇,但业界对云原生的定义并没有完全统一,在不断演进中,已经出现了包括 Pivotal、CNCF、十二因子应用等多个版本的定义,更有甚者,有不少人,把云原生和容器以及基于 Kubernetes 的微服务等同。那云原生到底是什么呢?

二、云原生的定义

云原生本质上是一种与云计算相同的计算方式,通过我们说的云原生是指云原生计算。那云原生和云计算到底是有什么样的区别和联系呢?

1、云原生 VS 云计算

云原生和云计算都是现代软件开发和部署的关键技术,但它们之间存在一些明显的区别。

1.1 定义的区别

云计算是分布式计算的一种,通过网络“云”将巨大的数据计算处理程序分解成无数个小程序,然后通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户。云计算主要关注如何通过互联网来提供和管理计算资源。

云原生是一种构建和运行应用程序的方法,是一套技术体系和方法论。云原生应用程序是在微服务体系结构上开发的,利用容器化封装每个微服务,并部署在动态管理、可伸缩的环境中,以最大化敏捷性、可靠性和效率。云原生强调应用程序从设计之初就考虑到云的环境,并且是为云环境而构建的。

1.2 开发基础的区别

云计算应用程序通常是在传统的基础设施上开发的,并在需要时通过虚拟化技术进行扩展。它们可能包括多个相互依赖的组件,这些组件作为一个整体进行部署和升级。

云原生应用程序是在微服务体系结构上开发的,每个微服务都是独立的、松耦合的,并且可以独立部署和升级。这种架构使得云原生应用程序更加灵活、可扩展和可维护。

1.3 运行环境的区别

云计算关注计算资源的提供和管理,它可能包括基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS)等不同的服务模式。云计算环境可以是私有的、公共的或混合的。

云原生是为云环境而设计的,它充分利用了云平台的弹性、分布式和自动化的优势。云原生应用程序通常运行在容器化的环境中,如 Kubernetes,这使得它们可以轻松地跨不同的云环境和平台进行部署和管理。

1.4 特性的区别

云计算提供了按需自助、网络访问、资源池化、快速弹性和服务计量等特性。

云原生强调应用程序的敏捷性、可靠性、可扩展性和效率。云原生应用程序是为云环境而设计的,它们充分利用了云平台的特性,如自动扩展、自我修复和持续集成/持续部署(CI/CD)等。

从以上四个区别的分析来看,云计算关注的是如何通过网络提供和管理计算资源,而云原生则关注如何构建和运行在云环境中的应用程序。云原生是云计算的一个子集,它强调应用程序从设计之初就考虑到云的环境,并且是为云环境而构建的。

2、主流定义

2.1 十二因子应用

为了让应用能够更好地使用云的 Pass 平台能力开发 SaaS,Heroku 在 2011 年提出了十二因子应用的概念,它适用于任何编程语言,通常被认为是最早的云原生应用的技术特征。

  • 基准代码:一份基准代码,多份部署
  • 依赖:显式声明依赖关系
  • 配置:在环境中存储配置
  • 后端服务:把后端服务当做附加资源
  • 构建/发布/运行:严格分离构建和运行
  • 进程:以一个或多个无状态进程运行应用
  • 端口绑定:通过端口绑定提供服务
  • 并发:通过进程模型进行扩展
  • 易处理:快速启动和优雅终止可最大化健壮性
  • 开发环境与线上环境等价:尽可能的保持开发,预发布,线上环境相同
  • 日志:把日志当做事件流
  • 管理进程:后台管理任务当做一次性进程进行

2.2 Pivotal

Pivotal(Spring 开源产品的母公司)的技术产品经理 MattStine 在 2015 年发表的电子书《Migrating to Cloud Native Application Architectures》明确提出了云原生的概念,它定义云原生是一种可以充分利用云计算优势构建和运行应用的方式。电子书主要内容包括:

  • 十二因子应用程序:云原生应用程序架构模式的集合
  • 微服务:独立部署的服务,每个服务只做一件事
  • 敏捷基础设施:快速、可重复和一致地提供应用环节和后台服务的平台
  • 基于应用程序接口的协作:发布和版本化的 API,允许在云原生应用程序架构中的服务之间进行交互
  • 抗压性:系统具备良好的健壮性,能够抵抗外界非预期的流量冲击

2.3 CNCF

CNCF 对 Pivotal 的定义修改之后的版本:云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网络、微服务、不可变基础设施和声明式 API。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统做出频繁和可预测的重大变更。

2.4 定义总结

以上三个主流的定义,分别从顶层架构原则、计算模型和代表技术的角度,对云原生进行了定义,它们都将云原生看作一种新的计算方式,让应用能够充分使用云的计算优势。

结合这些定义,我们基本上可以达成一个共识:只有结合云原生所提供的云服务,改造应用的架构,才能更好地使用云原生技术,更好地构建弹性、稳定、松耦合的分布式应用,并解决分布式复杂性问题。对架构改造的同时,还要伴随着企业内开发模式、交付模式、运维模式等都要随之改变。云原生使整个软件的生产流水线都发生了巨大的变化,而变化程度取决于企业对云原生的使用情况。

3、 云原生相关概念

4、未来趋势分析

云计算已经成为企业数字化转型的新的基础设施,同时也是国家新基建的核心环节,是物联网和人工智能的赋能平台。

从技术发展趋势看,更多企业广泛应用云原生技术,在国家政策和企业需求的双重驱动下,更多企业选择上云,中国云计算的强势增长是必然趋势,更多企业会关注、应用、采纳能够充分利用云计算能力的云原生技术和产品。

从软件开发角度看,云原生技术为企业带来了更快进行业务创新的价值,越来越多的企业逐渐意识到云服务的专业性和高 SLA,在企业数字化转型的过程中将 IaaS 和 PaaS 的通用技术复杂性委托给云平台,从而能更好地专注于自身业务逻辑的创新。

从应用技术栈角度看,越来越多的企业发现创通的应用已经无法满足数字化业务的需要,所以会对应用进行彻底升级,更多的采用云原生技术和云原生架构作为构建现代应用的核心框架,帮助企业打造具备韧性、弹性、可观测性、API 驱动、多语言支持、高度自动化、可持续交付等特性的现代化应用软件。

三、云原生对企业软件研发的颠覆

云原生不仅是对使用云的应用架构的再升级,也是对云平台的技术和云服务的再升级。从构建现代应用的角度,可以发现,云原生对应用的重构体现应用开发的整个生命周期中。

1、重塑研发流水线

在云原生架构设计中,对软件研发生命周期的颠覆体现得尤为明显,特别是在研发流水线上。传统软件发布流程往往面临着诸多挑战,如配置基线的管理、版本控制的复杂性以及自动化程度的不足等。特别是在多元化的硬件环境、操作系统以及复杂的第三方软件或库依赖场景下,如何确保每次变更都不会破坏现有的稳定组合,成为了一个亟待解决的问题。

云原生架构通过引入容器化技术,为这些问题提供了优雅的解决方案。容器能够有效地对应用制品进行打包和分发,结合 GitOps 和不可变基础设施的原则,实现了软件运行环境的整体化部署。在这种模式下,任何对运行环境的变更都必须通过 Git 进行提交和版本管理,随后通过持续集成流程形成新版本的制品并部署到相应环境中。

这种方法的优势在于它为软件运行环境的所有变更提供了完整的审计记录。开发团队可以随时检出任何特定版本的运行环境,并使用相应的脚本构建出一致的制品。如果代码和构建脚本本身没有问题,那么整个构建和部署过程将是可靠且可重复的。此外,一旦某次变更导致软件运行异常,团队可以迅速利用Git的记录回滚到上一个稳定版本,从而最小化故障对生产环境的影响。

通过这种方式,云原生架构不仅实现了研发流程的高度自动化,还引入了强大的版本跟踪和回溯机制。这不仅解决了持续发布过程中的挑战,还显著降低了 CI/CD 流程中的错误率,从而提升了软件交付的整体质量和效率。虽然这样的研发流水线可能不一定支持全天候无间断的发布,但它允许在软件功能更新后基于稳定的基线进行快速、连续的自动化发布或回滚,从而大大加速了软件的上市时间并提高了用户满意度。

2、重新定义软件交付模式

在传统的软件交付模式中,交付人员常常需要跨越硬件、网络、操作系统以及第三方软件等多重差异的鸿沟,这些差异不仅增加了交付的复杂性,也大大提升了出错的风险。传统的交付模式依赖于大量的手动配置和集成工作,而这些工作往往又因为环境的细微差别而变得异常复杂。

然而,随着云原生技术的兴起,特别是容器和 Kubernetes 的广泛应用,软件交付模式正在经历一场深刻的变革。云原生交付平台能够屏蔽底层环境的差异,为应用提供一个统一、隔离的运行环境。在这个环境中,无论是 CPU、内存、网络还是第三方软件依赖,都是独享且一致的,从而消除了传统交付模式中的环境差异问题。

云原生软件交付模式的核心理念是标准化、自动化和声明式。通过容器化技术,应用及其所有依赖项可以被打包成一个标准的单元,实现整体交付。这种方式不仅减少了安装配置的错误风险,还提高了交付的效率。此外,利用 Git 作为唯一真实版本仓库,所有软件的变更、配置参数以及脚本等信息都得到了完整的记录和管理,为回滚和版本控制提供了强大的支持。

声明式 API 是云原生交付模式中的另一个重要特点。它允许开发人员定义期望的目标状态,而不是详细说明如何达到这个目标状态。这种方式简化了交付过程,使得系统能够自动地根据目标状态进行必要的调整和部署。

最后,云原生交付模式强调系统间的集成应采用标准化的 OpenAPI。OpenAPI 提供了明确的接口描述和规格,以及各种开放工具,使得系统间的集成变得更加简单和高效。这种集成方式不仅提升了集成的速度,还降低了出错的风险。

总的来说,云原生软件交付模式通过标准化、自动化和声明式的方式,极大地提升了软件交付的效率和质量。它不仅减少了人工错误的风险,还加快了软件的上市时间,为企业带来了显著的竞争优势。根据统计数据显示,在实施了云原生持续交付后,企业的部署频率、变更错误率和应用恢复速度等关键指标都得到了显著的提升。

3、升级运维模式

在传统的运维模式中,配置变更是一项高频且复杂的操作。它通常涉及直接在现有环境下更改配置,这不仅增加了出错的风险,而且使得变更难以追踪和管理。然而,随着云原生技术的兴起,运维模式正在经历一场深刻的变革,向着更加高效、可靠和自动化的方向发展。

云原生运维的核心思想之一是采用不可变的基础设施。这意味着任何配置变更都是通过重新生成容器镜像来进行部署的,而不是在原有环境下直接修改配置。这种方法的优势在于,所有变更都是可版本化的,从而更容易维持变更的质量,并避免未记录的变更给系统带来未知的影响。此外,通过将大环境拆分成多个小环境,可以进一步降低变更的复杂性和相互影响,使得每个小环境的变化不再需要重新构建和部署整个大环境。

除了采用不可变的基础设施外,云原生运维还强调面向观测数据的自动化运维。这与传统的面向操作的运维模式存在显著的差异。面向操作的运维通常是基于预先定义的规则来执行的,这些规则需要运维人员根据手册进行枚举和执行。然而,这种方法的问题在于存在遗漏和操作错误的风险,而且难以形成完整的闭环和持续优化。

相比之下,云原生运维通过完整的可观测性实现了系统中各类异常的实时可见。这意味着运维人员可以及时了解系统的状态和行为,从而更快地发现问题并进行处理。此外,结合声明式 API,云原生运维可以实现自动化运维,即系统可以根据预定义的目标状态自动进行调整和部署,而无需人工干预。这不仅提高了运维的效率,还降低了出错的风险。

以 Redis 升级为例,传统的面向操作的运维可能需要编写自动化脚本来完成升级过程,但容易遗漏对升级后可能出现的各种异常情况进行完整检测。而云原生运维则可以通过将 Redis 及其依赖项打包到容器中,确保环境的一致性,并通过 Operator 和 Prometheus 等工具实现自动化的安装部署和状态监测。这样,一旦发现异常的 Redis 服务器,系统可以自动进行下线、替换或升级操作,从而确保系统的稳定性和可用性。

综上所述,云原生运维模式通过采用不可变的基础设施和面向观测数据的自动化运维,实现了从传统运维模式向更高效、可靠和自动化方向的转变。这不仅提高了运维的质量和效率,还为企业带来了更大的竞争优势。

4、升级应用架构

在云原生技术的浪潮下,企业应用架构的升级成为了一个重要的议题。传统应用如何向云原生应用转变,以更好地适应现代化需求,是众多企业和开发者关注的焦点。在这一过程中,主要有两种升级方式:re-platform 和 re-build。

re-platform 是一种在不重构或重写代码的前提下,尽量采用云原生技术的升级方式。这种方式的核心思想是将传统应用“提升”到云原生环境中,通过利用容器、云服务等技术,提高应用的部署效率、可伸缩性和可维护性。例如,将应用打包成容器进行部署,将 Kafka 等中间件替换为云服务,将 MySQL 等数据库替换为 RDS 等。这些改变能够在不改变应用核心架构的情况下,带来显著的性能和运维优势。

然而,re-platform 方式虽然能够快速提升应用的云原生特性,但由于没有触及应用的核心架构,因此在构建更好的现代化应用方面存在一定的局限性。为了更好地满足现代化应用的需求,如微服务、无状态应用、API 优先等,有时需要进行更为彻底的改造,即 re-build 方式。

re-build 是一种需要重构甚至完全重写应用的升级方式。这种方式旨在将传统应用转变为基于云原生架构的现代化应用。在 re-build 过程中,可能需要将单体架构拆分为微服务架构,实施存储状态分离,采用Serverless 技术编写业务逻辑,以及采用事件驱动架构等。这些改变能够带来更高的灵活性、可扩展性和可维护性,使应用更好地适应云原生环境。

需要注意的是,re-host 方式在此并未被视为一种有效的云原生升级方式。因为 re-host 仅仅是将应用从物理机或虚拟机迁移到云平台上,而没有对应用的架构、运维模式或软件打包方式进行任何实质性的改变。这种方式虽然能够带来一定的成本节约和运维便利性,但无法充分利用云原生的优势和特性。

在选择升级方式时,企业需要根据自身的实际情况和需求进行权衡。如果应用的核心业务逻辑较为稳定,且对云原生的需求不是特别迫切,那么 re-platform 可能是一个较为合适的选择。而如果企业希望构建更加现代化、灵活和可扩展的应用,那么 re-build 可能是一个更好的选择。

无论选择哪种方式,升级为云原生架构都是为了让应用成为更好的现代化应用。在未来的云原生架构下,应用将能够更好地利用云计算的弹性、可观测性、高可用性和自动化等特性,为企业带来更大的竞争优势。

5、升级组织架构

随着企业向云原生技术的迁移,不仅仅是技术层面的升级,更深层次的变革在于IT文化和组织结构的重塑。云原生不仅是一种计算模式,它更代表了一种全新的工作方式、知识体系和协作流程。因此,企业在迈向云原生的过程中,必须同步考虑文化和组织的升级。

首先,云原生带来的工具集更新、知识体系扩充和工作流程改变,会对企业的IT文化产生深远影响。这种影响可能会导致内部出现不同程度的抵触情绪,因为人们往往习惯于既有的工作方式和流程。为了克服这种惯性,企业需要积极引导员工拥抱变化,提供必要的培训和资源支持,帮助他们顺利过渡到新的工作模式中。

同时,组织结构的调整也是云原生升级过程中不可或缺的一部分。传统的IT岗位可能会因为技术的演进而面临淘汰,而新的岗位(如 SRE )则应运而生。这就要求企业在组织结构上做出相应的调整,以适应新的技术环境和业务需求。这种调整可能包括重新设置岗位职责、优化团队结构、引入新的协作方式等。

在进行云原生升级时,企业 IT 决策者需要全面考虑多个方面的因素。他们必须评估现有技术债务的偿还情况、人员知识结构的升级需求、新生产流水线的设计与实施、持续交付和持续部署的可行性等。此外,他们还需要关注团队沟通结构的变化、时间和资金的预算分配等问题。只有充分考虑这些因素,才能确保云原生升级过程的顺利进行。

以 re-platform 为例,当企业将测试和运行环境中的物理机替换为云计算的虚拟机时,不仅需要更新工具链和部署脚本,还需要提升人员的技能以适应新的虚机环境。此外,企业还需要重新审视测试环境的使用方式,以降低测试机器的空转时间,从而控制整体机器成本。这些变化都要求企业在组织架构上进行相应的调整和优化。

为了帮助企业更好地应对云原生升级过程中的组织风险,本书将提供一套衡量云原生架构成熟度的方法。通过这种方法,企业可以循序渐进地进行云原生升级,逐步提升自身的技术能力和组织成熟度。这样不仅可以有效控制风险,还可以确保企业在云原生转型过程中保持稳健的发展态势。

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灸哥漫谈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值