什么是云原生

       最近一段时间经常接触“云原生(Cloud Native)”,到底什么是云原生,这是个什么技术,都是一头雾水,就花点时间调研了一番。

 

       技术的变革,一定是思想先行,云原生是一种构建和运行应用程序的方法,是一套技术体系和方法论。云原生(CloudNative)是一个组合词,Cloud+Native。Cloud表示应用程序位于云中,而不是传统的数据中心;Native表示应用程序从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳姿势运行,充分利用和发挥云平台的弹性+分布式优势。

1.云原生的诞生

       提到云原生,不能不提“Pivotal”和“Matt Stine”,都与云原生的起源有关。

       Pivotal公司的Matt Stine于2013年首次提出云原生(CloudNative)的概念;

       2015年,云原生刚推广时,Matt Stine在《迁移到云原生架构》一书中定义了符合云原生架构的几个特征:12因素、微服务、自敏捷架构、基于API协作、扛脆弱性;

       2017年,Matt Stine在接受InfoQ采访时又改了口风,将云原生架构归纳为模块化、可观察、可部署、可测试、可替换、可处理6特质;

       Pivotal最新官网对云原生概括为4个要点:DevOps+持续交付+微服务+容器。

 

微服务

       微服务解决的是我们软件开发中一直追求的低耦合+高内聚,记得有一次我们系统的接口出了问题,结果影响了用户的前台操作,于是黎叔拍案而起,灵魂发问:“为啥这两个会互相影响?!”

       微服务可以解决这个问题,微服务的本质是把一块大饼分成若干块低耦合的小饼,比如一块小饼专门负责接收外部的数据,一块小饼专门负责响应前台的操作,小饼可以进一步拆分,比如负责接收外部数据的小饼可以继续分成多块负责接收不同类型数据的小饼,这样每个小饼出问题了,其它小饼还能正常对外提供服务。

DevOps

       DevOps的意思就是开发和运维不再是分开的两个团队,而是你中有我,我中有你的一个团队。我们现在开发和运维已经是一个团队了,但是运维方面的知识和经验还需要持续提高。

持续交付

       持续交付的意思就是在不影响用户使用服务的前提下频繁把新功能发布给用户使用,要做到这点非常非常难。我们现在两周一个版本,每次上线之后都会给不同的用户造成不同程度的影响。

容器化

       容器化的好处在于运维的时候不需要再关心每个服务所使用的技术栈了,每个服务都被无差别地封装在容器里,可以被无差别地管理和维护,现在比较流行的工具是docker和k8s。

2. 云原生基金会

       云原生计算基金会(Cloud Native ComputingFoundation, CNCF)成立与2015年12月11日,由谷歌与Linux基金会联合创办,成立这个非盈利组织的初衷为推广孵化和标准化云原生相关的技术:

  1. 推动云原生计算可持续发展;
  2. 帮助云原生技术开发人员快速地构建出色的产品。

       CNCF成立最初只有十多家创始成员,包含谷歌、IBM、Red Hat、VMware……经过几年的发展,目前CNCF已经有超过300个会员,涵盖国内外的知名IT厂商,包括微软、亚马逊、苹果、阿里巴巴、华为等,发展地十分迅速。

       起初 CNCF 对云原生(Cloud Native)的定义包含以下三个方面:

  1. 应用容器化
  2. 面向微服务架构
  3. 应用支持容器的编排调度

       到了 2018 年,随着近几年来云原生生态的不断壮大,所有主流云计算供应商都加入了该基金会,且从 Cloud Native Landscape 中可以看出云原生有意蚕食原先非云原生应用的部分。CNCF 基金会中的会员以及容纳的项目越来越多,该定义已经限制了云原生生态的发展,CNCF 为云原生进行了重新定位。

       云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API。

       这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。

3. 主要区别:云原生与传统企业应用

云原生应用

传统的企业应用

可预测。云原生应用符合旨在通过可预测行为最大限度提高弹性的框架或“合同”。云平台中使用的高度自动化的容器驱动的基础架构推动着软件编写方式的发展。第一次作为 12 因素应用记录的 12 个原则就是阐释此类“合同”的良好示例。

不可预测。传统应用的架构或开发方式使其无法实现在云原生平台上运行的所有优势。此类应用通常构建时间更长,大批量发布,只能逐渐扩展,并且会发生更多的单点故障。

操作系统抽象化。云原生应用架构要求开发人员使用平台作为一种方法,从底层基础架构依赖关系中抽象出来,从而实现应用的简单迁移和扩展。实现云原生应用架构最有效的抽象方法是提供一个形式化的平台。Tanzu 非常适用于在谷歌云端平台 、微软 Azure 或亚马逊云服务等基于云的基础架构上运行。

依赖操作系统。传统的应用架构允许开发人员在应用和底层操作系统、硬件、存储和支持服务之间建立紧密的依赖关系。这些依赖关系使应用在新基础架构间的迁移和扩展变得复杂且充满风险,与云模型相背而驰。

合适的容量。云原生应用平台可自动进行基础架构调配和配置,根据应用的日常需求在部署时动态分配和重新分配资源。基于云原生运行时的构建方式可优化应用生命周期管理,包括扩展以满足需求、资源利用率、可用资源编排,以及从故障中恢复,最大程度减少停机时间。

过多容量。传统 IT 会为应用设计专用的自定义基础架构解决方案,这延迟了应用的部署。由于基于最坏情况估算容量,解决方案通常容量过大,同时几乎没有能力继续扩展以满足需求。

协作。云原生可协助 DevOps,从而在开发和运营职能部门之间建立密切协作,将完成的应用代码快速顺畅地转入生产。

孤立。传统 IT 将完成的应用代码从开发人员“隔墙”交接到运营,然后由运营人员在生产中运行此代码。企业的内部问题之严重以至于无暇顾及客户,导致内部冲突产生,交付缓慢折中,员工士气低落。

持续交付。IT 团队可以在单个软件更新准备就绪后立即将其发布出去。快速发布软件的企业可获得更紧密的反馈循环,并能更有效地响应客户需求。持续交付最适用于其他相关方法,包括测试驱动型开发和持续集成。

瀑布式开发。IT 团队定期发布软件,通常间隔几周或几个月,事实上,当代码构建至发布版本时,该版本的许多组件已提前准备就绪,并且除了人工发布工具之外没有依赖关系。如果客户需要的功能被延迟发布,那企业将会错失赢得客户和增加收入的机会。

独立。微服务架构将应用分解成小型松散耦合的独立运行的服务。这些服务映射到更小的独立开发团队,可以频繁进行独立的更新、扩展和故障转移/重新启动操作,而不影响其他服务。

依赖。一体化架构将许多分散的服务捆绑在一个部署包中,使服务之间出现不必要的依赖关系,导致开发和部署过程丧失敏捷性。

自动化可扩展性。大规模基础架构自动化可消除因人为错误造成的停机。计算机自动化无需面对此类挑战,可以在任何规模的部署中始终如一地应用同一组规则。云原生还超越了基于以虚拟化为导向的传统编排而构建的专用自动化。全面的云原生架构包括适用于团队的自动化和编排,而不要求他们将自动化作为自定义方法来编写。换句话说,自动化可轻松构建和运行易于管理的应用。

手动扩展。手动基础架构包括人工运营人员,他们负责手动构建和管理服务器、网络及存储配置。由于复杂程度较高,运营人员无法快速地大规模正确诊断问题,并且很容易执行错误实施。手动构建的自动化方法可能会将人为错误的硬编码到基础架构中。

快速恢复。容器运行时和编排程序可在虚拟机上提供动态的高密度虚拟化覆盖,与托管微服务非常匹配。编排可动态管理容器在虚拟机群集间的放置,以便在发生故障时提供弹性扩展和恢复/重新启动功能。

恢复缓慢。基于虚拟机的基础架构对于基于微服务的应用来说是一个缓慢而低效的基础,因为单个虚拟机启动或关闭的速度很慢,甚至在向其部署应用代码之前就存在很大的开销。

4.云原生相关文章的评论

 

5.参考文献

[01] https://blog.csdn.net/weixin_44296862/article/details/108675404

[02] http://t.zoukankan.com/huaweiyun-p-13181034.html

[03] https://www.jianshu.com/p/a37baa7c3eff

云原生是一种软件开发和部署的方法论和架构思想,旨在充分利用云计算环境的弹性、可扩展性和灵活性来构建和运行应用程序。其原理和架构包括以下几个关键方面: 1. 微服务架构:云原生推崇将应用程序拆分为一组小型、独立的微服务。每个微服务专注于特定的业务功能,并通过轻量级通信机制(如RESTful API)进行交互。这种架构使得应用程序更易于扩展和维护,同时也提高了开发效率和灵活性。 2. 容器化:云原生应用程序通常会使用容器技术进行打包和部署。容器提供了一种轻量级、隔离的运行环境,使应用程序可以在不同的平台和操作系统上运行。常见的容器技术包括Docker和Kubernetes。 3. 自动化管理:云原生应用程序倡导自动化管理和运维。通过自动化部署、弹性伸缩、监控和故障恢复等机制,实现应用程序的高可用性和灵活性。自动化管理可以减少人工操作的错误和工作负担,提高系统的可靠性和效率。 4. 声明式配置:云原生应用程序的管理和配置通常采用声明式的方式。开发人员使用配置文件或者代码来描述应用程序的目标状态,而不是编写一系列操作步骤。通过比较目标状态和当前状态的差异,系统可以自动进行调整和修复。 5. 弹性和可扩展性:云原生应用程序设计考虑到了弹性和可扩展性。通过动态分配资源、自动扩展和负载均衡等机制,应用程序可以根据需求实时调整资源的使用和分配,以满足不同的工作负载和流量需求。 6. 云原生基础设施:云原生应用程序需要依赖云计算提供的基础设施服务,如弹性计算、存储、数据库和消息队列等。这些服务提供了高度可用、可靠和弹性的基础设施支持,使云原生应用程序能够更好地运行和扩展。 总的来说,云原生通过微服务架构、容器化、自动化管理、声明式配置以及弹性和可扩展性等原理和架构,使得应用程序能够在云计算环境中高效、灵活地运行,并充分发挥云计算带来的优势。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

YoungerChina

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

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

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

打赏作者

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

抵扣说明:

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

余额充值