在新技术的推动下,软件,数据存储和基础设施向云大幅迈进,使工作负载在云环境中易于开发和执行。
译者 | 卢鑫旺
审校 | 孙淑娟、梁策
1200亿美元。根据Forrester的一份报告,这就是全球云计算市场的规模。
在新技术的推动下,软件,数据存储和基础设施向云大幅迈进,使工作负载在云环境中易于开发和执行。
根据云原生计算基金会(CNCF)的说法:
“云原生技术能让企业在如公有云、私有云和混合云的现代动态环境中构建和运行可扩展的应用程序。容器,服务网格,微服务,不可变基础设施和声明式API都是这个领域的应用典范。
如果这些对你来说有点陌生,不要担心,我们下一节中还会谈到。
各种形式的云计算是商业技术的新面孔,如今则是企业的一个成熟的功能。可以说,许多大公司都是靠他们运行的云应用来做生意的。这不仅包括Uber和DoorDash等“初创公司”,也包括为经纪人提供股票交易应用的金融公司。
来自CNCF的数据显示,目前有超过600多万开发者正在为各种业务功能构建云原生应用程序。这些应用程序基于DevOps等最佳实践,因此可扩展到底层基础设施的极限。
接下来让我们来探索一下什么是云原生应用程序开发,以及它如何给你的业务带来更多价值。
什么是云原生应用开发?
云原生应用开发是在云中,并为云开发应用程序的过程。
听起来是不是太简单了?
实际过程可能看起来很复杂,不过其核心思想并不难理解。进一步分解这个过程,云原生应用程序就是一组容器化微服务的集合,它们通过一个可以持续交付的自适应基础设施进行管理。
在一些传统的项目中,基础设施分配系统管理员负责管理。然而在云原生应用的开发生命周期中,编排引擎会控制这个过程。这意味着,开发人员或管理人员不必再花时间去处理资源分配这些问题。相反,每个资源分配决策都是基于系统中预先配置的规则。
应用程序依赖的开发环境或者技术设施,对开发者来说是“抽象的”或不可见的。他们可以使用自己选择的技术来开发微服务,增强应用程序的可移植性,并允许对代码进行快速更改。这是敏捷开发的核心原则之一,即快速开发、快速发布,并满足业务用户的实时需求。
从过程的角度来看,下面列出了如何进行云原生应用程序开发:
将开发、IT管理和领导团队的DevOps实践内部化。
选择如Kubernetes这样的容器管理平台,它构成运行和开发微服务的基础。
确保开发人员熟悉使用容器化技术,并确保通过编排引擎管理资源分配。DevOps团队可以通过项目的生命周期来监控项目。
项目交付必须是自动、可持续化的,具有沙箱和内置的可观察性。
云原生应用的商业价值
云原生应用为你的业务提供了几种效率高,性能好的典范,以下是几个明显的好处:
1.项目生命周期更具成本效益
对于应用程序开发项目来说,资源管理是最不容忽视的挑战之一。有经验的团队往往会为了安全而过度分配资源。虽然这确保了项目生命周期的顺利进行,但最终却增加了应用开发的成本,并降低了项目可能的回报。
云原生的一个重要方面是,它不需要负载平衡、配置,甚至不需要手动分配。云资源是自主管理的,允许它们根据测试和部署的需要扩展和收缩。节约的成本会在整个项目生命周期不断累积,使云原生应用程序开发过程更具成本效益。
2. 弹性架构
因为正常运行时间与数据中心或公共或私有云中的VDI环境中的虚拟机(VM)的正常运行时间直接相关,一些开发人员发现使用云部署具有挑战性。云原生应用程序是可移植的,并且独立于虚拟机运行。换句话说,除非某个特定的微服务需要一个专用的GPU,否则该架构可以无缝运行,几乎不需要任何依赖。
依赖越少,工作负载就越有弹性,故障排除也变得更简单和更快。由于云基础设施依赖关系不再是问题,项目管理者们可以将他们的精力集中在隔离其他潜在的威胁上。
3. 产品更快推向市场
持续集成和持续交付(CI/CD)是云原生应用开发成功的关键。到目前为止,软件交付过程受制于各个阶段——在发布alpha、beta和生产版本之前需要进行全面的测试。
如今,该过程可以完全自动化,在云环境中进行按需智能测试和持续部署。与DevOps同步使用,可以让项目团队在更大范围内进行协作,降低产品发布的风险,大大缩短从开发到第一个版本发布的时间。
4. 不依赖供应商
供应商锁定是几乎所有应用程序的一个主要问题,包括那些部署在主要云提供商(如谷歌、亚马逊或微软)上的应用程序。除非你自己也是一个科技巨头,否则工作负载的平稳运行取决于云存储供应商的可用性和效率。
由于云原生应用程序是可移植的,它们消除了对单一平台或云基础设施的依赖问题。无论底层架构如何,开发人员都可以继续更新和升级应用程序,并充分利用新的PaaS和IaaS服务。
云原生应用的关键特性
云原生应用的定义特征如下:
基于容器的基础设施
微服务的架构体系
使用持续集成和持续交付(CI/CD)
DevOps敏捷开发
总之,这些都可以转化为应用开发过程的许多好处:
1. 模块化管理
单体式应用的最大挑战之一是可扩展性问题。在开始时,它会随着开发团队的规模和专业知识而成比例地扩展。然而,随着每一个功能和特性增加,单体架构变得更加复杂。
这样,在产品生命周期中就会出现这样的情况:产品所有者无法理解整个应用程序,开发团队不知道他们的模块如何与其他模块集成,QA团队无法测试修改一个特征对整个应用程序的影响。
应用程序中缺乏可见性会带来更多的问题,因为开发人员无法处理额外的功能。应用程序的体系结构变得混乱,一个小的变化可能会引发大故障。
这些结构性问题可以通过使用微服务来解决,微服务是单独构建的模块,每个模块只负责一个特定特征。因此,可以测试和更新应用程序的部分内容,而不需要更改整个应用程序的代码或运行。
2. 自主资源分配
使用云原生应用,开发人员不需要直接与云基础设施提供商的应用程序编程接口(API)交互。相反,DevOps团队可以为每个容器(在其中开发应用程序)分配计算、内存和存储资源设置一个集中的策略。
资源自动分配直接影响到项目的投资回报率(ROI)。因此,分配的资金多一个或少一个小数点就会改变申请成功的可能。通过将应用程序的需求与可用资源精确匹配,资源自主分配可降低这些风险。
3. 异步开发
云原生应用程序本质上是聚合和容器化的微服务。对于用户来说,这意味着当一个微服务功能失常时,它不会影响其他微服务的性能。每个微服务都是封装的,并且有自己的依赖,所以一个微服务不会让整个应用程序受到威胁。
同样的逻辑也适用于开发过程。除非容器化的微服务具有共同的依赖项(在这种情况下,这些依赖项可以被复制或分离),否则它们可以被异步开发、测试并添加到生产应用程序中。因此,你可以并行开发多个特征或应用程序模块,而不用担心集成问题。
4. 快速扩展
虽然云服务和微服务都在为未来铺平道路,但企业仍有遗留的基础设施投资尚未充分利用。由于云原生应用是打包成容器的自主服务的集合,它们可以动态地向外和向内扩展(或多或少地使用计算或存储资源),这与传统基础设施中的虚拟机不同。
云原生应用程序允许基于API与遗留系统和数据进行集成。这使得即使是小型企业也能在从传统基础设施向云计算过渡的过程中加速数字化转型过程。
5. 综合性应用职能
微服务非常适合独立的审查、分析和评估。因此,开发人员可以在独立的基础上以及在整个项目的上下文中评估每个微服务的性能。由于采用了模块化和弹性架构,全堆栈的可观察性和特定的监控机制使得对应用程序进行调整变得更加容易。
结语
云原生应用是为软件开发和云技术的下一个时代而设计的。凭借其多功能性和敏捷性,云原生技术可以让企业将其技术投入与业务目标相匹配。无论你是中小企业还是大型企业,现在都可以智慧地使用云原生来帮助解决业务问题并提高运营效率。
译者介绍
卢鑫旺,51CTO社区编辑,半路出家的九零后程序员。做过前端页面,写过业务接口,搞过爬虫,研究过JS,有幸接触Golang,参与微服务架构转型。目前主写Java,负责公司可定制化低代码平台的数据引擎层设计开发工作。
原文标题:How To Get Started With Cloud Native Application Development,作者:Dipti Parmar