谈谈云原生

云原生一词大概火于2018年,是企业上云浪潮的大背景下,连带着爆火的词汇。当时很多企业追求数字化转型,盲目认为上云是数字化转型的最佳途径,随即大力购买并建设云平台。可惜国内云厂商质量参差不齐,大多产品远不如吹逼的那样完美,所以云原生一词就成了这些云厂商施展嘴上功夫的最后堡垒: “你这个系统在云平台上运行不起来,绝不是云平台的问题,是你的应用不是云原生应用,你要做云原生改造”,而后又可以借势赚上一笔云原生改造的咨询费,不得不说,那个场景相当之魔幻。

那么问题来了,为什么当时这么多企业会相信这些厂商的鬼话?难道钱就这么好赚么?

我认为造成这种现象的一大原因,是云原生定义的很模糊,令人费解,特别是云原生计算基金会(CNCF)的官方解释,也能给云厂商忽悠的活动空间。

CNCF对云原生的定义是这样的:

Cloud native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach.

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

These techniques enable loosely coupled systems that are resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil.

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

The Cloud Native Computing Foundation seeks to drive adoption of this paradigm by fostering and sustaining an ecosystem of open source, vendor-neutral projects. We democratize state-of-the-art patterns to make these innovations accessible for everyone.

云原生计算基金会(CNCF)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。

这段话看起来的意思是只要使用了容器、服务网格、微服务等技术,就算云原生,然后就能享受容错性好、易于管理和便于观察的好处,结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。

但使用了容器、服务网格、微服务等技术,真的能有它定义的那样好么?我在工作实践中,见过的系统大部分都是采取这类型的技术构建的,但也没感觉出这些系统拥有容错性好、易于管理和便于观察的特点,更别说轻松应对频繁的重大变更了。

所以我想试着分析一下,云原生技术,或者是云原生应用,它和以往的技术,以往的应用系统,到底有什么区别。

什么是云计算

云原生一词诞生于云计算领域,我认为要想理解云原生,就需要先明白云计算。在百度百科上,对云计算是这么描述的:

云计算(cloud computing)是分布式计算的一种,指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序,然后,通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户。云计算早期,简单地说,就是简单的分布式计算,解决任务分发,并进行计算结果的合并。因而,云计算又称为网格计算。通过这项技术,可以在很短的时间内(几秒钟)完成对数以万计的数据的处理,从而达到强大的网络服务。

云计算诞生之初,是为了解决很短的时间内(几秒钟)完成对数以万计的数据的处理,但是这种处理能力显然超过了绝大多数计算机的能力,所以需要使用分布式计算,解决任务分发,并进行计算结果的合并的方式来解决。

那么分布式计算,解决任务分发,并进行计算结果的合并这个过程可以被分为3个部分,第一部分是分割任务,第二部分是计算,第三部分是合并。

这种技术的诞生,使得市场上面出现了一种新的,可以被定价的商品——算力。算力是一种十分特殊的商品,它并没有实物,不能被买下放在家里,而是一个纯粹的虚拟的东西。早期的厂商利用自身庞大的机器群,对算力进行定价,出租给有需要的客户使用,这大约是比较古早期的云计算商业模式。

很快,大家开始发现云计算的3个部分——分割、计算、合并,并不只适用于算力,它甚至可以适用于计算机上非常多的模块,如果说算力是出租一个虚拟的cpu,那么磁盘是否也可以采用这种方法出租一个虚拟的磁盘呢?将一个巨大的文件,先分割成若干小文件,再放置于若干个小磁盘里,到用时合并,就可以视为有了一个大小无上限的虚拟磁盘。

同理可以推广到内存,GPU,乃至于操作系统,某些软件或者某些商用工具等。

什么是云资源

云计算的发展带来了一大堆虚拟化的产品开始在市场上售卖,然而通过总结,我们可以发现云计算领域卖的产品,无论是算力、磁盘、内存,还是一台虚拟出来的电脑,他们都有一个共性,那就是合并底层的物理资源,重新定义一个虚拟的资源。

这个过程类似于面向对象编程理论中的抽象。

我们将多份真实的物理资源,抽象成统一的一份虚拟资源,而这个资源也就是云资源

如果从这个角度去理解云计算领域,我们可以发现,现在几乎所有的云计算领域的厂商,卖的都是这种高度抽象之后的云资源

什么是云原生

既然知道了云资源的含义,那么我们再重新审视云原生计算基金会(CNCF)的官方解释第一句:

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

容器技术是一种新的虚拟化技术,最早应该是由docker提出利用“集装箱”(容器)的原理,将系统、开发软件包、依赖环境等统一打包到容器中,将整个容器部署至其他的平台或者服务器上。

业界知名的Kubernetes则是一种容器的调度平台,它将组成应用程序的容器抽象成逻辑单元,以便于实现管理服务发现。由于完全依赖于虚拟的云资源,使得Kubernetes非常方便的实现自动化上线和回滚、水平扩缩、自我修复等能力,真正做到实现容错性好、易于管理和便于观察的松耦合系统

服务网格则是云上网络的抽象,将流量经过的每一个服务都视为一个网络节点,通过在每个节点上分配的网格员(Sidecar)实现云上流量的监测和管理。

通过这些线索,我觉得可以总结出一个更好的云原生技术的描述——云原生技术就是建立在云资源的基础上发展出来的技术。

如果一个应用完全依赖于云资源构建,依赖于云资源运行,那么这个应用可以称之为云原生应用出身于云的应用,不能运行在云以外的世界。

云原生应用和传统应用的区别

现在很多企业哪怕使用了云原生技术,结果发现所带来的价值远不如预期的症结,其实在于整个系统的设计理念就不是一个云原生的理念,强行采用云原生技术,能起到的效果就很有限。

云原生的技术完全建立在云资源的基础上,只有应用依赖了这些虚拟的云资源,运维才能从中偷梁换柱,实现云原生技术那些不可思议的能力。

举个简单的例子,如果系统当中有2个微服务,流量走向是服务A访问服务B:

如果是依赖于真实资源的传统应用写法,服务A的代码当中需要指定服务B的真实IP地址和端口,这样流量才能如愿达到服务B。如果此时服务B所处的机器出现故障,由于IP已经固定,那么在不改代码不重启的前提下服务A的访问必然失败。

如果是依赖于虚拟的云资源的写法,服务A的代码当中需要指定一个虚拟的域名,然后由云平台桥接这个虚拟的域名到达服务B。如果此时服务B所处的机器出现故障,只需在另一台机器上重新创建实例,由云平台桥接到新的地址即可,服务A并不需要改变任何代码,也不需要重启。

上述例子可以发现,如果我们的代码通过云资源这层中间介质来实现业务,无论是上游服务需要动态扩容,更换地址,变化端口等等动作,我们都可以使用运维手段对这2个微服务进行连接,这就是云原生应用对比传统应用的最大区别。也是为什么很多企业哪怕使用了云原生技术,强行将业务搬到云环境中,任然无法享受到云原生技术带来的价值。

容错性好、易于管理和便于观察,结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更确实是云原生技术的特质,但这只是表现,根本原因是应用依赖云资源,运维人员就可以在平台层面管理和干预系统的运行。

结尾

其实在云原生一词诞生之前,就有现在很多技术在依赖一些虚拟的东西来实现目的,比如很多反向代理服务器都支持的VIP(虚拟IP),著名的SOA架构中的注册中心。但这些技术只是在部分领域里面起到作用,不成体系。

但是Kubernetes的出现则改变了一切,通过Kubernetes云资源定义实现了系统运行的方方面面,为云原生应用的运行提供了操作系统级别的保障,这也是我认为Kubernetes能一统天下,带领云计算PaaS领域腾飞的核心价值,也是Kubernetes被不少人称之为云操作系统的原因。

你可能感兴趣的:(随笔,云原生,cloud,native,架构,docker,kubernetes)