Hello folks,我是 Luga,今天我们来聊一下云原生生态本质之一—— 高效交付,即 “基于 Cloud Native 生态理念进行应用程序软件的高效交付” 。
国庆节前,我非常荣幸地获得来自 Jakarta EE 中文社区组织发起者刘志杰老师的邀请,参与了一次 JakartaOne Livestream 活动,并进行了一次简单而充实的技术分享。JakartaOne Livestream 是 Jakarta EE 工作组 面向开发人员及技术负责人的线上会议,主要关注企业级 Java 应用云原生技术,探讨 Jakarta EE 技术发展现状及未来趋势。大家若有兴趣可以了解:https://jakartaone.org/zh/2023/chinese/
与此,基于上次的技术交流以及最近的一些思考,简单的谈谈自己对“Cloud Native”的“一丢”看法。
— 01 —
我们该如何看待 Cloud Native ?
其实,Cloud Native 概念虽然并不新鲜,已经出现有一段历史了,但却在最近的几年来引起了广泛的讨论和关注。
从本质上讲,Cloud Native 是一种构建和运行应用程序的方法论,旨在充分利用云计算的分布式计算优势。通过采用云原生的理念,开发人员可以更好地利用云平台提供的弹性、可扩展性、弹性和灵活性。
根据云原生计算基金会(CNCF)官方的定义,Cloud Native 技术使组织能够在公共云、私有云和混合云环境中构建和运行可扩展的应用程序。现代复杂应用程序的生态系统需要持续创新和前所未有的响应能力,因此,业务系统需要更具战略性和高度灵活性。云原生的方法可以帮助企业变得更加敏捷,并满足不断增长的客户期望。
通常而言,Cloud Native 技术利用容器、服务网格、微服务、不可变基础设施和声明式API等功能。通过使用这些功能,可以构建具有弹性、可管理和可观察性的松散耦合系统。容器化技术提供了轻量级和可移植的环境,使应用程序可以在不同的云环境中部署和迁移。服务网格可以提供强大的服务间通信和治理能力,确保应用程序的可靠性和安全性。微服务架构使应用程序可以根据需求进行模块化和独立部署,从而实现更高的灵活性和可扩展性。不可变基础设施的概念强调使用自动化工具和流程来管理基础设施的状态,确保环境的一致性和可重复性。声明式API使开发人员能够通过声明所需的状态和配置,而不是编写详细的步骤和指令,从而简化了应用程序的部署和管理。
从本质上来讲,Cloud Native 方法使工程师能够以最小的努力频繁地进行高影响力的更改。通过使用 Cloud Native 技术,开发人员可以更快地推出新功能、快速响应反馈和市场变化,并实现持续交付和持续部署的实践。这种敏捷性和灵活性使组织能够更好地适应不断变化的业务需求,并提供更高质量的应用程序和更好的用户体验。
— 02 —
当某一项技术被定义为 Cloud Native 时,即意味着什么?
Cloud Native 应用程序是以独立的服务形式存在的,它们被打包为轻量级、独立的容器。这些应用程序具有便携性,并且能够高度扩展(输入和输出)。通过将应用程序及其依赖项都包含在容器中(例如 Docker),Cloud Native 应用程序实现了与基础设施的隔离。这种隔离的好处在于容器化应用程序可以在任何具备运行时引擎的环境中进行部署。在这里,需要特别注意的是,Kubernetes 作为容器编排工具,负责管理容器的生命周期。
Cloud Native 应用程序的交付过程借助于持续集成和持续交付工具链的 DevOps 管道。这意味着应用程序的开发、测试和部署过程高度自动化,并通过持续集成和持续交付的实践,实现快速、可靠的交付。持续集成确保开发人员的代码变更与主干代码集成,并通过自动化的构建和测试流程进行验证。持续交付则将经过测试的应用程序交付给部署环境,以便进行进一步的集成测试和部署。
通过采用 Cloud Native 应用程序的开发和交付方式,组织能够更好地利用云计算的优势。Cloud Native 应用程序的容器化使得应用程序能够在不同的环境中无缝运行,而不受底层基础设施的限制。这种可移植性和可扩展性使得应用程序的部署和扩容变得更加灵活和高效。同时,通过持续集成和持续交付的实践,开发团队能够更快地推出新功能,快速响应市场需求,并持续提供高质量的应用程序。
— 03 —
CNCF 及其家族成员看 Cloud Native 的发展
From 官网
众所周知,云原生计算基金会(CNCF)是由 Linux 基金会于 2015 年启动的项目,旨在推动容器技术及其应用的发展。它与 Kubernetes 一同创立,Kubernetes 是一个由 Google 贡献给 Linux 基金会的开源容器编排平台。自那时起,CNCF 成为许多最快发展的开源项目(如 Kubernetes、Prometheus 和 Envoy)的供应商中立的托管机构。
Kubernetes 等 CNCF 项目迅速被广泛采用,并得到了广泛的社区支持,使它们成为开源历史上发展最快的项目之一。CNCF 社区汇集了全球最优秀的开发人员、用户和供应商,同时还举办一些规模最大的开源开发者会议。
CNCF 在推动 Cloud Native 技术的发展方面发挥着重要作用。Cloud Native 技术包括容器化、微服务架构、声明式 API 和自动化管理等,它们提供了构建和运行可扩展、弹性和高度可靠的应用程序的方法。作为供应商中立的组织,CNCF 致力于促进云原生技术的标准化和推广,使更多的开发者和组织能够受益于这些先进的技术。
其中,Kubernetes 作为 CNCF 的明星项目,成为了容器编排和集群管理的事实标准。它提供了丰富的功能和可扩展性,使得应用程序的部署、扩展和管理变得更加简单和高效。Kubernetes 的快速发展不仅得益于其强大的功能,还得益于 CNCF 社区的积极贡献和支持。同时,Prometheus 作为一个强大的监控和告警系统,以及 Envoy 作为一个高性能的边缘和服务代理,也是 CNCF 项目中备受关注和广泛应用的技术。
— 04 —
从开发语言看 Cloud Native 的发展
当从开发语言的角度看云原生的发展时,Go、Rust 和 Java 等编程语言都在不同程度上对 Cloud Native 应用程序的构建和交付提供了支持。
当我们打开 CNCF 相关巨幅时,我们可以看到:
围绕 Go、Rust 语言开发的组件套件几乎占了绝大部分。为此,我们可以毫无夸张地说,Go 和 Rust 语言俨然已成为云原生开发的主导语言。
虽然,Java 作为一种传统的编程语言,在 Cloud Native 时代也在不断演变、调整和适应。尽管 Java 的市场份额不如前两者,但是 Java 在 Cloud Native 领域仍然具有很强的竞争力。
根据市场发展趋势,大约 63% 的具有核心竞争力的云原生项目基本上都是使用 Go 语言构建,这足以证明了 Go 在 Cloud Native 领域的地位。不过,Java 也在逐步适应 Cloud Native 时代的需求。例如,在 JDK 8u191 和 JDK 10发布后,JVM 被赋予了增强的容器资源感知能力,这使得 Java 应用程序在容器中的运行更加高效和可靠。 同时,Java 社区也在不断探索Java技术栈的边界。例如,VM OpenJ9 不仅高度兼容现有的 Java应用程序,而且大大加快了启动速度并减少了内存占用。Micronaut 和 Graal VM 则开辟了新的领域,通过改变编程模型和编译过程,在编译时更早地处理应用程序的动态特征,从而显著缩短应用程序的启动时间。这些技术对于 Serverless 架构领域来说非常有前景,其设计理念也值得其他语言的开发者们借鉴。
与此同时,Eclipse 基金会 Jakarta EE 工作组发布了 Jakarta EE 10 标准,标志着 Java 也要分享云原生时代的“羹”。Jakarta EE 10 是一个重要的版本,引入了用于构建现代、简化和轻量级云原生 Java 应用程序的功能,是在现代微服务和容器时代牢牢嵌入Jakarta EE 的“终极里程碑版本”。Jakarta EE 10 的发布反映了全球贡献者社区的工作成果,这将为 Java 在云原生领域的发展带来关键的创新和机遇。Jakarta EE 10 的定位是开放的、社区驱动的创新,将推动云原生 Java 技术的未来发展。
在 Cloud Native 时代,为了提高研发协作效率,我们必须有效地拆分和重组横向应用开发生命周期中的开发、交付和维护流程。此外,还需要在整个垂直软件技术堆栈的编程模型、应用程序运行时和基础架构方面对系统进行优化,以实现根本性简化并提高系统效率。
在 Cloud Native 的生态系统中,以 Go、Rust 以及 Java语言为代表的编程主力军都在积极布局自己的云原生生态,构建了各自的技术堆栈,以满足日益复杂的市场业务需求,并为云原生时代的发展做出了贡献。
— 05 —
Cloud Native 对技术人员的影响
在实际的业务场景中, Cloud Native 对技术人员提出了更高的要求,需要他们具备广泛的技术知识和能力,并具备快速学习和适应变化的能力。具体影响可参考如下所示:
1、思维方式的转变
Cloud Native 对技术人员的思维方式提出了新的挑战。传统的应用开发和部署模式与云原生的理念有所不同。技术人员需要转变为以服务为中心的思维方式,注重弹性、可伸缩性和可观测性。他们需要更加关注应用程序的可管理性和可维护性,将故障处理和容错设计作为开发过程的重要组成部分。
2、架构和设计模式的认知
Cloud Native 要求应用程序以微服务的方式进行组织和设计,将功能模块拆分成独立的、可独立部署和扩展的服务。这需要技术人员具备良好的架构和设计思维,能够设计出高度可伸缩、弹性和可靠的微服务架构。技术人员需要考虑服务之间的通信、服务发现、负载均衡、故障恢复等方面,并设计出适应大规模分布式环境的解决方案。
3、学习意识的培养
Cloud Native 引入了一系列新的技术和工具,如容器化、编排平台、微服务架构、自动化管理等。技术人员需要学习和掌握这些新技术,以适应云原生应用程序的开发和部署需求。他们需要了解容器技术(如 Docker)、容器编排平台(如 Kubernetes)、服务网格(如 Istio)等,以及相关的监控、日志和安全工具。这要求技术人员不断学习和更新自己的技术栈,以适应快速发展的云原生生态系统。
与此同时,Cloud Native 也为技术人员提供了更多的机遇和挑战,他们可以参与到开源社区中,贡献代码、分享经验,并与全球的技术专家和开发者进行交流与合作,共同推动云原生技术的发展和创新。
Adiós !