【云原生】什么是云原生?如何学习云原生?一篇文章带你了解云原生
云原生,相信这个名词大家并不陌生;云原生在近期可谓是爆火,伴随云计算的滚滚浪潮,云原生(CloudNative)的概念应运而生,云原生很火,火得一塌糊涂。可是现在很多人还是不知道什么是云原生,所以今天我们就来聊一聊近期很火的这个名词:云原生吧 。
大家平时经常提到云原生,却鲜少有人告诉你到底什么是云原生,若是找资料来看,读完大多会感觉云绕雾罩,一知半解,总之虚得很;甚至会让你一度怀疑自己的智商,不过我对于读不懂的文章,一律归因于写文章的人太蠢,当然这不一定是事实,但这样的思考方式能让我避免陷入自我怀疑的负面情绪。
其实,云原生之所以解释不清楚,是因为云原生没有确切的定义,云原生一直在发展变化之中,解释权不归某个人或组织所有。作为云计算领域的一个新兴概念,云原生现在频繁出现在我们的视野中。很多互联网大咖把它奉为至宝,走到哪说到哪,所以我们就先来看一下云原生的起源吧。
云原生的起源
云原生的概念最早开始于2010年,在当时 Paul Fremantle 的一篇博客中被提及,他主要将其描述为一种和云一样的系统行为的应用的编写,比如分布式的、松散的、自服务的、持续部署与测试的。当时提出云原生是为了能构建一种符合云计算特性的标准来指导云计算应用的编写。
后来到2013年 Matt Stine在推特上迅速推广云原生概念,并在2015年《迁移到云原生架构》一书中定义了符合云原生架构的特征:12因素、微服务、自服务、基于API协作、扛脆弱性。而由于这本书的推广畅销,这也成了很多人对云原生的早期印象,同时这时云原生也被12要素变成了一个抽象的概念。
那么接下来我们就来介绍一下CNCF。
CNCF,全称为Cloud Native Computing Foundation,中文译为“云原生计算基金会”。
这个基金会成立于2015年12月11日,属于Linux基金会旗下。
CNCF致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。
所以说,CNCF是云原生领域影响力最大最有话语权的组织。
说起CNCF的故事,还要从Cgroups(control groups,控制组群)开始说起。
十六年前,也就是2004年,谷歌开始使用容器技术。到了2006年,谷歌发布了Cgroups,最初叫Process Container(进程容器)。
Process Container的目的非常直白,它希望能够像虚拟化技术那样,给进程提供操作系统级别的资源限制、优先级控制、资源审计能力和进程控制能力。
带着这样的设计思路,Process Container发布后第二年就进入了Linux内核主干。
因为在Linux内核中,容器(container)这个名词有许多不同的意义,为避免混乱,就更名为Control Groups,也就是Cgroups。
2013年,Docker项目正式发布,2014年,K8s项目也正式发布。
K8s项目的初衷,就是提供一种方式去帮助大家方便、快速、优雅地管理容器。(K8s是云原生的基石,后面会细讲。)
在Google和Redhat发布了K8s之后,这个项目的发展速度非常之快。
2015年,由Google、Redhat以及微软等大型云计算厂商以及一些开源公司共同牵头成立了CNCF云原生基金会。
CNCF成立之初,就有22个创始会员,而且K8s也成为了CNCF托管的第一个开源项目。
CNCF基金最初对云原生定义是也是深窄的,当时把云原生定位为容器化封装+自动化管理+面向微服务:
- 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 定义云原生的时候有时感觉就是再说容器生态。
2017年,Matt Stine 在接受 InfoQ 采访时,对云 Cloud Native Architecture 的定义做了小幅调整,具体有以下六个特质:
- 模块化(Modularity)
- 可观测性(Observability)
- 可部署性(Deployability)
- 可测试性(Testability)
- 可处理性(Disposability)
- 可替代性(Replaceability)
【云原生】什么是云原生?如何学习云原生?一篇文章带你了解云原生【云原生】什么是云原生?如何学习云原生?一篇文章带你了解云原生【云原生】什么是云原生?如何学习云原生?一篇文章带你了解云原生【云原生】什么是云原生?如何学习云原生?一篇文章带你了解云原生