互联网十万个为什么之什么是云原生?

2024-09-06 19:34:44 浏览数 (4)

云原生是一种现代化的软件开发和部署方法,旨在充分利用云计算的优势,提高应用程序的可伸缩性、弹性和可靠性。

云原生的详细定义包括云原生计算基金会(Cloud Native Computing Foundation,CNCF)的官方定义和延伸含义。

  • 官方定义:云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统做出频繁和可预测的重大变更。
  • 延伸定义:云原生包括云原生产品、云原生技术、云原生架构,以及构建现代化应用的开发理念,如 DevOps,具体说明如下。
    • “云原生产品”和“云原生技术”需要基于云基础设施(IaaS)。云原生产品是指运行在云计算环境中的应用程序和服务,它们通常采用容器化技术,微服务架构和持续交付流程来构建和部署。而云原生技术则是指用于创建和维护这些云原生产品的工具和技术,包括容器编排工具(如Kubernetes),持续集成/持续部署(CI/CD)工具,服务网格等。
    • “云原生架构”和“云原生开发理念”是基于云原生技术和产品构建或实现的。注意,对于不是基于云原生 技术或者产品的架构和理念,如基于传统物理服务器发布构建的 DevOps,是不会被划分到云原生范畴的。

“云原生应用”是基于云原生的架构和开发理念构建或实现的。只有结合云原生技术所提供的云服务,改造应用的架构,才能够更好地使用云原生技术,以及更好地构建弹性、稳定、松耦合的分布式应用,解决分布式复杂性问题。此外,对架构的改造还意味着相关的开发模式、交付方式、运维方式等都要随之改变,比如,采用微服务架构重写应用、用声明式 API和自动化工具升级运维方式等。简单来说,云原生使得整个软件的生产流水线都发生了巨大的变化,而具体的变化程度又取决于企业对云原生的使用程度。

为什么需要云原生?

  • 从技术发展趋势看,更多的企业将会广泛应用云原生技术。在国家政策和企业需求的双重驱动下,更多企业上云,以及中国云计算的强势增长都是必然趋势,这也注定了更多企业将会关注、应用、采纳能够充分利用云计算能力的云原生技术和产品。
  • 从软件开发角度看,云原生技术为企业带来了更快进行业务创新的价值。越来越多的企业逐渐意识到了云服务的专业性和高 SLA,这些企业在数字化转型的过程中将 IaaS 和 PaaS 的通用技术复杂性委托给了云平台,从而能够更好地专注于自身业务逻辑的创新;利用云原生技术重塑企业的软件生产流水线,可以加大业务组件的复用程度,将软件交付周期从周、天降低到小时甚至分钟级别,从而提升业务的市场嗅觉灵敏度,增强市场反应能力。
  • 从应用技术栈角度看,越来越多的企业发现传统的应用已经无法满足数字化业务的需要,所以会对应用进行彻底升级,会更多地采用云原生技术和云原生架构作为构建现代化应用的核心框架,从而帮助企业自身打造具备弹性、韧性、可观测性、API 驱动、多语言支持、高度自动化、可持续部署等特性的现代化应用软件。

云原生架构和微服务架构的区别是什么?

微服务架构和云原生架构是现代软件开发中两个紧密相关且经常一起使用的概念,但它们关注的侧重点和应用的范围等有所不同。

  • 云原生架构是一种基于云环境设计和构建应用程序的方法,它天然利用了云计算的优势,如弹性、可扩展性、自动化和敏捷性。Matt Stine 于2013年首次提出云原生(CloudNative)的概念,随着技术的不断演进,其定义也在不断地迭代和更新,云原生可以概括为四个要素:微服务、容器、DevOps 和持续交付。 云原生架构的主要目的是如何最大化地利用云平台的特性来实现高效的资源利用、快速迭代和自动化运维。
  • 微服务架构的目的则是为了提高应用程序的模块化,使得开发、部署和扩展可以更加独立和灵活。

云原生架构是一种基于云环境设计和构建应用程序的方法,它天然利用了云计算的优势,如弹性、可扩展性、自动化和敏捷性。Matt Stine 于2013年首次提出云原生(CloudNative)的概念,随着技术的不断演进,其定义也在不断地迭代和更新,云原生可以概括为四个要素:微服务、容器、DevOps 和持续交付。

云原生有哪些实际应用?

云原生应用的实际应用场景有很多,以下是一些常见的例子:

  • 微服务架构:云原生应用通常采用微服务架构,将应用程序划分为一组独立的服务,每个服务可以独立部署和扩展。这种架构使得应用程序更加灵活和可靠。
  • 容器化:云原生应用通常使用容器技术进行部署,这使得应用程序可以轻松地在不同的环境中运行,无论是本地还是云环境。
  • 持续集成和持续部署(CI/CD):云原生应用通常采用CI/CD流程,可以实现自动化的代码构建、测试和部署,从而加快软件交付速度。
  • DevOps文化:云原生应用鼓励开发和运维团队密切合作,共同参与整个应用程序的生命周期。
  • 自动化和可伸缩性:云原生应用通常具有高度的自动化和可伸缩性,可以根据需求自动扩展或缩减资源。
  • 容错和高可用性:云原生应用通常设计为具有容错能力和高可用性,即使某个组件发生故障,整个应用程序也能继续运行。
  • 云服务集成:云原生应用可以轻松地与云提供商提供的各种服务集成,例如数据库、消息队列、存储等。

云原生的关键技术

容器技术

容器作为标准化软件单元,可用于将应用及其所有依赖项整体打包,使应用不再受到环境的限制,从而可以在不同计算环境之间快速、可靠地运行。

  • 虽然早在 2008 年,Linux就提供了Cgroups资源管理机制以及Linux Namespace隔离方案,借助它们,应用可以在沙箱环境中独立运行,从而避免相互之间产生冲突与影响;但直到Docker容器引擎开源,才从真正意义上降低容器技术使用的复杂性,加速容器技术的普及。Docker容器基于操作系统虚拟化技术,具有共享操作系统内核、轻量、无资源损耗、秒级启动等优势,极大地提升了系统的应用部署密度和弹性。更重要的是,Docker 提出了创新的应用打包规范,即Docker镜像,它解耦了应用与运行环境,使应用可以在不同计算环境间一致、可靠地运行。
  • 随后,Kubernetes也开源了,其凭借优秀的开放性、可扩展性,以及活跃的开发者社区,在容器编排之战中脱颖而出,成为分布式资源调度和自动化运维的事实标准。Kubernetes屏蔽了底层架构的差异,以优良的可移植性,帮助应用在包括数据中心、云端、边缘计算等不同环境中运行时也能保证一致性。企业可以结合自身的业务特征,通过Kubernetes设计自身的云架构,更好地支持多云或混合云,从而免去了被云平台锁定的顾虑。容器技术的逐步标准化,进一步催生了容器技术生态的细分和协同。基于Kubernetes,生态社区开始构建上层的业务抽象,比如,服务网格Istio、机器学习平台Kubeflow、无服务器应用框架Knative等。

过去几年,容器技术在获得越来越广泛应用的同时,其所展现的三个核心价值最受用户关注,具体说明如下。

敏捷

容器技术在提升企业IT架构敏捷性的同时,也使业务迭代变得更加迅捷,并为创新探索提供了坚实的技术保障。比如,在2020年新冠肺炎疫情期间,在线教育、远程办公、公共健康等在线化需求大幅增长,面对流量的爆发性增长,企业通过容器技术紧紧抓住了这次突如其来的业务快速增长机遇。据统计,容器技术,可使企业的产品交付效率提升3~10倍,这意味着企业不仅可以更快速地迭代产品,而且可以降低业务的试错成本。

弹性

在互联网时代,企业IT系统经常需要面对促销活动、突发事件等各种预期之外的爆发性流量增长。通过容器技术,企业可以充分发挥云计算的弹性优势,降低运维成本。据统计,借助容器技术,部署密度提升和弹性优势,企业可以降低50%的计算成本。以在线教育行业为例,面对呈指数级增长的流量,教育信息化应用工具提供商——希沃Seewo利用阿里云容器服务ACK和弹性容器实例ECI满足了快速扩容的迫切需求,为数十万名老师提供了良好的在线授课环境,帮助数以百万计的学生完成在线学习。

可移植性

容器已成为应用分发和交付的标准技术,可实现应用与底层运行环境的解耦;Kubernetes可以屏蔽 IaaS 层架构的差异性,帮助应用平滑地运行在不同的基础设施上。CNCF推出了Kubernetes一致性认证,以进一步保障不同Kubernetes实现的兼容性,使企业更愿意采用容器技术来构建云时代应用的基础设施。

DevOps技术

DevOps(Development Operations)作为一组过程、方法与系统的统称,是云原生概念的重要组成部分,旨在促进开发(应用程序或软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。DevOps非常重视“软件开发人员”(Dev)和“IT运维技术人员”(Ops)之间沟通合作的文化、习惯和方式。自动化“软件交付”和“架构变更”的流程,可以使软件的构建、测试和发布变得更加快捷、频繁和可靠。DevOps还会引导更多技术人员意识到,为了按时交付软件产品和服务,开发人员与运维人员必须紧密合作。

微服务

在过去很长一段时间内,传统软件大多是各种独立系统的堆砌,这些系统的问题总结来说就是扩展性差、可靠性不高、维护成本高。随着软件开发技术的发展,以及面向服务的体系架构(Service-Oriented Architecture,SOA)的引入,上述问题在一定程度上得到了缓解。但由于SOA 早期使用的是总线模式,这种总线模式与某种技术栈具有强绑定关系,导致很多企业的遗留系统很难对接,且切换时间太长,成本太高,新系统稳定性的收敛也需要一段时间。

为了摆脱这一困境,微服务应运而生。作为SOA的变体,微服务将应用程序构造为一组松散耦合的服务。在微服务体系架构中,服务是细粒度的,协议是轻量级的。在云原生时代,云原生微服务体系将充分利用云资源的高可用和安全体系,以保障应用的弹性、可用性和安全性。应用构建在云平台所提供的基础设施与基础服务之上,充分利用云服务所带来的便捷性和稳定性,可以降低应用架构的复杂度。云原生的微服务体系也将帮助应用架构全面升级,让应用具备更好的可观测性、可控制性、容错性等。

Serverless

云计算的出现,也催生出很多改变传统IT架构和运维方式的新技术,比如,虚拟机、容器、微服务。无论这些技术应用在哪些场景,降低成本、提升效率都是亘古不变的主题。随着云计算的不断发展,越来越多的企业把应用和环境中很多通用的部分变成服务。Serverless的出现,更是带来了跨越式的变革。Serverless把主机管理、操作系统管理、资源分配、扩容,甚至是应用逻辑的全部组件都外包了出去,把它们看作某种形式的服务。

构建Serverless应用程序意味着开发人员可以将精力专注于核心业务代码上,而无须管理和操作云端或本地的服务器或运行时。Serverless真正做到了在部署应用时无须涉及基础设施的建设,自动构建、部署和启动服务。Serverless计算包含如下特征。

  • 全托管的计算服务:客户只需要编写代码构建应用,而无须关注同质化的、负担繁重的服务器等基础设施开发和运维等工作。
  • 通用性:结合丰富的BaaS 云服务能力,支持云上所有重要类型的应用。
  • 自动的弹性伸缩:大幅降低用户资源容量规划的难度。
  • 按量计费:企业的使用成本得到有效降低,无须为闲置资源付费。

FaaS(Function as a Service,功能即服务)是Serverless 中最具代表性的服务形态。它通过把应用逻辑拆分为多个函数,并通过事件驱动的方式触发执行每个函数,例如,当对象存储服务(Object Storage Service,OSS)中产生的上传/ 删除对象等事件,能够自动、可靠地触发FaaS处理,且每个环节都具有弹性和高可用性时,业务就能够快速实现大规模数据的实时并行处理。同样,通过消息中间件和函数计算的集成,业务可以快速实现大规模消息的实时处理。

0 人点赞