云原生是什么?你真的能说清楚吗?

Posted 平仄子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云原生是什么?你真的能说清楚吗?相关的知识,希望对你有一定的参考价值。

都 2021 年了,火了这么多年的云原生,你真的清楚云原生是什么吗?云原生的概念是什么?云原生的边界在哪里?




大家言必称云原生,却鲜少有人告诉你到底什么是云原生,若是找资料来看,读完大多会感觉云绕雾罩,一知半解,总之虚得很。

近日有幸参加了一场由各位业界专家参加的研讨会,讨论相关标准,然而意外的是,大家似乎并没有在云原生的概念与边界达成一致,导致大家在相关标准条目的讨论中争执不休。

由此可见,纵然是行业专家,关于云原生都没有一个定论,对于新学者来说,恐怕还是隐隐约约,模模糊糊,难以厘清。



云原生(Cloud Native)是一种构建和运行应用程序的方法,是一套 技术体系方法论。云原生从字面意思上来看可以分为 原生两个部分:
  • 是和本地相对的,传统的应用必须跑在本地服务器上,现在流行的应用都跑在云端,云包含了IaaS、PaaS和SaaS等。
  • 原生就是土生土长的意思,我们在开始设计应用的时候就考虑到应用将来是运行云环境里面的,要充分利用云资源的优点,比如️云服务的弹性和分布式优势。
那么云原生究竟是什么?包含哪些属性、方法与技术呢?每个人对云原生的理解不尽相同,下面我们看看比较著名的三位技术领导者关于 Cloud Native 的描述。


一、Paul Fremantle,WSO2 的 CTO 和联合创始人,于 2010 年提出的 Cloud Native

云原生是什么?你真的能说清楚吗?


从上图的描述可以看出,最早期关于云原生的定义已经比较准确了,也基本涵盖了云原生的两个关键词:云(在云环境中运行、多租户等)和原生(分布式、弹性)。
然而在 2010 年,微服务的概念都还没被提出来,更别提容器和 K8S 生态了。可以说上面这个定义虽然准确,但是已经不符合高速发展的技术时代的需求了。


二、Adrian Cockcroft, 时任 Netflix 云架构师、2016 年 AWS 的 VP,于 2013年提出的 Cloud Native

云原生是什么?你真的能说清楚吗?

届时,Netflix 在 AWS 上面运行着上万个实例,每天都有数以千计的实例被创建或删除。Netflix 在云环境上的成功实践,吸引着大批人员和公司争相模仿。Adrain 在介绍 Netflix 的成功经验时,主要是从目标、原则和措施等方面进行了描述。
在 Adrain 对 Cloud Native 的目标描述中,可扩展性、高可用、敏捷、效率这四个词极为关键,这也是为什么如今大量的企业在进行云原生转型的主要原因,可以说云原生成为了企业架构转型的必经之路。
为了实现这个目标,Adrain 提出了五大原则,而这五大原则如果你去细细琢磨,你会发现它们都是为上面四个目标服务的。 这个时候,微服务、DevOps 的概念相继兴起,成为了的云原生的一部分或者说云原生的手段,此外,敏捷开发被开始被大家提倡,用来助力互联网公司加快研发速度、提升用户体验。


三、Matt Stine,Pivotal 公司技术领导者,在2015年发布的电子书《MIgrating to Cloud Native Application Archtecture》一书中对如何将应用迁移到 Cloud Native 做了详细的介绍

云原生是什么?你真的能说清楚吗?

Matt 认为在单体架构向 Cloud Native 迁移的过程中,需要文化、组织、技术共同变革。Matt 首次强调了文化与组织的变革对云原生的重要性,我觉得这个观点时至今日依旧至关重要。从组织文化的角度来讲,一切以人为主,需要建立自由开放的环境,高度信任,自我驱动,充分发挥每一个人的力量,而不是让工程师成为螺丝钉。应当避免大事小事都拿到会议室讨论,造成决策瓶颈。
另外,Matt 在延续前人思想总结的前提上,首次将“十二因子”与云原生关联起来。十二因子的概念简介见下图:

云原生是什么?你真的能说清楚吗?


云原生学说发展到这,已经趋于成熟了,但是以上几乎都是个人的定义和看法。业务场景是千变万化的,一方面每个人站的角度不一样,心中的架构也会不同;另一方面,架构是在持续演进的,随着新技术层出不穷,云原生定义也会继续不断演进。
2015年由 Linux 基金会发起了一个 The Cloud Native Computing Foundation(CNCF) 基金组织,CNCF 基金会的成立标志着云原生正式进入高速发展轨道,google、Cisco、Docker 各大厂纷纷加入,并逐步构建出围绕 Cloud Native 的具体工具,而云原生这个的概念也逐渐变得更具体化。这也是非常具有历史意义的,CNCF 对于 云原生的推动起到了巨大的作用。


四、CNCF 于 2015 年定义的 Cloud Native


The CNCF defines “cloud-native” a little more narrowly, to mean using open source software stack to be containerized, where each part of the app is packaged in its own container, dynamically orchestrated so each part is actively scheduled and managed to optimize resource utilization, and microservices-oriented to increase the overall agility and maintainability of applications.

上面的定义简而言之,就是把云原生定位为:容器化封装+自动化编排管理+面向微服务。这主要因为 CNCF 基金会在当时的核心拳头软件就是 K8S,因此在概念定义上主要是围绕着容器编排建立起来的生态。其实这也是为什么我们可以看到 CNCF 定义云原生的时候有时感觉就是再说容器生态。


五、Pivotal 官网定义的 Cloud Native (2017年)


Reduced IT spend means a lower barrier to entry with competitive advantage becoming a function of the speed teams can bring new ideas to market, which is why software is eating the world and startups are using cloud-native approaches to disrupt traditional industries.

Yet organizations require a platform for building and operating cloud-native applications and services that automates and integrates the concepts of DevOps, continuous delivery, microservices, and containers:


到了 2017 年, 云原生应用的提出者之一的 Pivotal 在其官网上将云原生的定义概况为DevOps、持续交付、微服务、容器这四大特征,这也成了很多人对 Cloud Native 的基础印象。也有人在此基础上简化为云原生三架马车:微服务、容器、DevOps。至此,云原生的概念具体落实到微服务、容器、DevOps 这类具体的技术上面了,而不是停留在概念上。
到了2018年,随着 Service Mesh 的加入,CNCF 对云原生的定义发生了改变,而这也逐渐作为被大家认可的官方定义。


六、CNCF 重新定义的 Cloud Native (2018)

  • 基于容器、 服务网格、微服务、不可变基础设施和 声明式API构建的可弹性扩展的应用;
  • 基于自动化技术构建具备高容错性、易管理和便于观察的松耦合系统;
  • 构建一个统一的 开源云技术生态,能和云厂商提供的服务解耦。

可以看出这一阶段 CNCF 对云原生的定义加上服务网格和声明式 API,同时为这一概念阐述更深一层的意义,也就是建立一个统一中立的开源云生态(至于是否中立嘛这里就不谈了)。这对云原生的生态定位会是很重要的一点,也算 CNCF 最初成立的宗旨之一吧,打破云巨头的垄断。

云原生是什么?你真的能说清楚吗?

CNCF : Cloud Native Landscape (2021.2)


云原生极速发展到今天,已经涌现了批量的新型技术和开源项目,一些传统的开源项目也在向云原生转型,以支持云原生生态为荣并且作为口号大肆宣传。上图云原生生态图景中展现出来的开源项目和技术密密麻麻,数不胜数,而且几乎每月都会有新的项目加入,每年也都有新的项目加入 CNCF 基金会进行孵化,同时也有已经加入的项目成功毕业。


七、总结

讲到这里,相信的大家对于云原生也有了自己的体会和认知。总而言之,个人的定义难免偏颇或者有缺失,组织的定义也同样如此,都是在构建一个自己的理想生态。但是了解云原生的概念起源和发展,有助于我们理解云原生的含义以及其未来发展的趋势,这一点至关重要。
总结来说,云原生是一套适用于云计算时代的IT架构与方法论,而这一套方法论需要从架构、研发流程、文化三个角度去实现,相互配合,缺一不可。

如果硬是要给云原生的做一个总结,我们可以参考如下观点:
云原生的组成
  • 架构:以云和微服务架构为基础构建系统
    • 云包含了敏捷基础设施及公共基础服务
    • 考量架构的质量:一致性、性能、可扩展性、可用性等
  • 研发流程:自动化的研发环境是 Cloud Native 的基础
    • 独自、快速完成交付,研发效率极大提升
  • 组织文化:以人为主、自由开放、自我驱动、高度信任
    • 充分发挥个人力量,避免大事小事会议讨论,造成决策瓶颈



云原生是什么,你能回答了吗?:)







以上是关于云原生是什么?你真的能说清楚吗?的主要内容,如果未能解决你的问题,请参考以下文章

云原生,你真的懂了么?

云原生时代,你真的懂Docker和LXC的区别吗?

可以用于云原生中Skywalking框架原理你真的懂吗

你懂得吗?云原生应用的15个特征

Kubernetes云原生实战00 何为云原生?

Kubernetes云原生实战00 何为云原生?