前言

想必在IT的工作中云原生(CloudNative)这个词会在工作或学习中出现无数次,其实我也很不理解什么是云原生,和我现在的码字工作沾到了哪些边?很多开源应用都是声称自己是云原生或向云原生靠拢的趋势。还有云计算、云服务器,这些是不是就是云原生?出于焦虑原因,我就不停的去翻找资料查Wiki,试图真正的理解这个概念,至少吹牛的时候自己还能搭上话。

大多资料读完会感觉云绕雾罩,一知半解,让我更焦虑了;为了让我避免陷入自我怀疑的负面情绪,这些文章一概认为作者文字功底不行(如果别人看不懂我写的,那也可以认为我文字功底不行,但请不要怀疑自己)。

历史

v2-f51c7a7bec2978533f5e6aaffe4d2faa_1440w

看一下这个历史发展图,这个概念是2013年提出2015年推广,2013年Docker就出现了。

我之前以为Docker就是云原生,后来发现也不对。

我之前以为上云服务器的应用就是云原生,后来发现也不对。

我之前意思得是云计算的应用才是云原生,后来发现也不对。

定义

2018年,Pivotal给出了云原生的最新定义:云原生是一种方法,用于构建和运行充分利用云计算模型优势的应用。云原生包含了一组应用的模式,用于帮助企业快速、持续、可靠、规模化地交付业务软件。云原生由微服务架构、DevOps和以容器为代表的敏捷基础架构组成。

此后,CNCF给了另一版定义:云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。

看起来似懂非懂,反正先过一遍,思考一遍,至少想过这些词在现在的开发环境中都是用过,出现过的,如果还没用过什么如:微服务、DevOps、容器等(服务网格这个应该很多公司都没有或在筹划入局中【忽略】)那你该换工作了或别做IT了建议改行。

在看这个云原生问题之前你应该了解什么Docker(容器)什么是Kubernetes(容器编排)。云原生是一组思想集合和最佳实践,包括敏捷基础设施(agile infrastructure)、微服务(microservice)、DevOps、持续交付(continuous delivery)等。

这些概念、这些平台工具都是云原生的技术实现,我认为这些东西都是云原生的架构元素,就像“人”是一个概念,它有手脚、头脑等零部件(这些都是我个人去理解云原生的支撑依据)。

我认为的「云原生」

云原生的终极目的是为了提高开发效率,提升业务敏捷度、扩容性、可用性、资源利用率,降低成本。谈云总会说到用哪家云平台,始终绕不过的问题,并非我这个应用部署在云服务器上就是云原生了,也不是用了哪个称为云某技术就是云原生。我们的应用应该是具备很强的灵活性,可以部署在任何云上,能与各种云技术对接,任何云都可以成为你的载体。

云原生的关键是如何构建应用,而不是部署在哪里。

基于我了解整个云原生的产品:Docker、K8S、微服务、DevOps等产品的概念与工作职责后,我能大概知道云原生是个什么概念了,是的,它只是一个概念。我们使用这些产品、这些平台、这些管理工具将我们的需求用代码描述,最终变成一个可执行文件,在服务器中跑起来,这就是云原生的一整套流程。

最终我认为:只要你的技术产品、你的技术工具、你的技术管理能帮助企业快速、持续、可靠、规模化地交付业务软件就属于云原生。

我们为什么需要云原生?

它可以给企业省钱:容器的技术就是能充分利用机器的性能去部署更多的应用。

它可以省时间:各种云技术都是开箱即用,都是尽力做到无状态化部署,使用这些技术在接入成本低、学习成本低。

它可以省心:使用这些技术的目标可以让我们的运用运维成本低,如果运维成本很高,那这个技术肯定会被企业开发者抵触。

最后

对于这个关键词我认为到这里就差不多了,真要论述起来,涉及的细枝末节太多,能大概知道个囫囵就够了,写多了连我自己也不想看。