云原生是一种现代化的软件开发和部署方法,旨在充分利用云计算的优势,提高应用程序的可伸缩性、弹性和可靠性。
云原生的详细定义包括云原生计算基金会(Cloud Native Computing Foundation,CNCF)的官方定义和延伸含义。
“云原生应用”是基于云原生的架构和开发理念构建或实现的。只有结合云原生技术所提供的云服务,改造应用的架构,才能够更好地使用云原生技术,以及更好地构建弹性、稳定、松耦合的分布式应用,解决分布式复杂性问题。此外,对架构的改造还意味着相关的开发模式、交付方式、运维方式等都要随之改变,比如,采用微服务架构重写应用、用声明式 API和自动化工具升级运维方式等。简单来说,云原生使得整个软件的生产流水线都发生了巨大的变化,而具体的变化程度又取决于企业对云原生的使用程度。
微服务架构和云原生架构是现代软件开发中两个紧密相关且经常一起使用的概念,但它们关注的侧重点和应用的范围等有所不同。
云原生架构是一种基于云环境设计和构建应用程序的方法,它天然利用了云计算的优势,如弹性、可扩展性、自动化和敏捷性。Matt Stine 于2013年首次提出云原生(CloudNative)的概念,随着技术的不断演进,其定义也在不断地迭代和更新,云原生可以概括为四个要素:微服务、容器、DevOps 和持续交付。
云原生应用的实际应用场景有很多,以下是一些常见的例子:
容器作为标准化软件单元,可用于将应用及其所有依赖项整体打包,使应用不再受到环境的限制,从而可以在不同计算环境之间快速、可靠地运行。
过去几年,容器技术在获得越来越广泛应用的同时,其所展现的三个核心价值最受用户关注,具体说明如下。
容器技术在提升企业IT架构敏捷性的同时,也使业务迭代变得更加迅捷,并为创新探索提供了坚实的技术保障。比如,在2020年新冠肺炎疫情期间,在线教育、远程办公、公共健康等在线化需求大幅增长,面对流量的爆发性增长,企业通过容器技术紧紧抓住了这次突如其来的业务快速增长机遇。据统计,容器技术,可使企业的产品交付效率提升3~10倍,这意味着企业不仅可以更快速地迭代产品,而且可以降低业务的试错成本。
在互联网时代,企业IT系统经常需要面对促销活动、突发事件等各种预期之外的爆发性流量增长。通过容器技术,企业可以充分发挥云计算的弹性优势,降低运维成本。据统计,借助容器技术,部署密度提升和弹性优势,企业可以降低50%的计算成本。以在线教育行业为例,面对呈指数级增长的流量,教育信息化应用工具提供商——希沃Seewo利用阿里云容器服务ACK和弹性容器实例ECI满足了快速扩容的迫切需求,为数十万名老师提供了良好的在线授课环境,帮助数以百万计的学生完成在线学习。
容器已成为应用分发和交付的标准技术,可实现应用与底层运行环境的解耦;Kubernetes可以屏蔽 IaaS 层架构的差异性,帮助应用平滑地运行在不同的基础设施上。CNCF推出了Kubernetes一致性认证,以进一步保障不同Kubernetes实现的兼容性,使企业更愿意采用容器技术来构建云时代应用的基础设施。
DevOps(Development + Operations)作为一组过程、方法与系统的统称,是云原生概念的重要组成部分,旨在促进开发(应用程序或软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。DevOps非常重视“软件开发人员”(Dev)和“IT运维技术人员”(Ops)之间沟通合作的文化、习惯和方式。自动化“软件交付”和“架构变更”的流程,可以使软件的构建、测试和发布变得更加快捷、频繁和可靠。DevOps还会引导更多技术人员意识到,为了按时交付软件产品和服务,开发人员与运维人员必须紧密合作。
在过去很长一段时间内,传统软件大多是各种独立系统的堆砌,这些系统的问题总结来说就是扩展性差、可靠性不高、维护成本高。随着软件开发技术的发展,以及面向服务的体系架构(Service-Oriented Architecture,SOA)的引入,上述问题在一定程度上得到了缓解。但由于SOA 早期使用的是总线模式,这种总线模式与某种技术栈具有强绑定关系,导致很多企业的遗留系统很难对接,且切换时间太长,成本太高,新系统稳定性的收敛也需要一段时间。
为了摆脱这一困境,微服务应运而生。作为SOA的变体,微服务将应用程序构造为一组松散耦合的服务。在微服务体系架构中,服务是细粒度的,协议是轻量级的。在云原生时代,云原生微服务体系将充分利用云资源的高可用和安全体系,以保障应用的弹性、可用性和安全性。应用构建在云平台所提供的基础设施与基础服务之上,充分利用云服务所带来的便捷性和稳定性,可以降低应用架构的复杂度。云原生的微服务体系也将帮助应用架构全面升级,让应用具备更好的可观测性、可控制性、容错性等。
云计算的出现,也催生出很多改变传统IT架构和运维方式的新技术,比如,虚拟机、容器、微服务。无论这些技术应用在哪些场景,降低成本、提升效率都是亘古不变的主题。随着云计算的不断发展,越来越多的企业把应用和环境中很多通用的部分变成服务。Serverless的出现,更是带来了跨越式的变革。Serverless把主机管理、操作系统管理、资源分配、扩容,甚至是应用逻辑的全部组件都外包了出去,把它们看作某种形式的服务。
构建Serverless应用程序意味着开发人员可以将精力专注于核心业务代码上,而无须管理和操作云端或本地的服务器或运行时。Serverless真正做到了在部署应用时无须涉及基础设施的建设,自动构建、部署和启动服务。Serverless计算包含如下特征。
FaaS(Function as a Service,功能即服务)是Serverless 中最具代表性的服务形态。它通过把应用逻辑拆分为多个函数,并通过事件驱动的方式触发执行每个函数,例如,当对象存储服务(Object Storage Service,OSS)中产生的上传/ 删除对象等事件,能够自动、可靠地触发FaaS处理,且每个环节都具有弹性和高可用性时,业务就能够快速实现大规模数据的实时并行处理。同样,通过消息中间件和函数计算的集成,业务可以快速实现大规模消息的实时处理。