云原生到底是什么?它会是未来发展的趋势吗?

🌟 前言

大家好,我是 Edison😎

相信大家对于「云原生」这一次并不陌生吧!那么云原生到底是什么?云原生为什么这么火?云原生技术真的会成为主流么?

带着这写疑问,跟着我的步伐,一起去深究云原生的世界!

1. 云计算

云计算(Cloud Computing ),是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备。

云计算是继 1980 年代大型计算机到客户端-服务器的大转变之后的又一种巨变。用户不再需要了解 “云” 中基础设施的细节,不必具有相应的专业知识,也无需直接进行控制。

云计算描述了一种基于互联网的新的 IT 服务增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展而且经常是虚拟化的资源。

云计算通俗来说就是 输入/输出计算 不在一个主机上。计算要用到计算设备,计算设备一般是指:CPU、内存和硬盘。输入/输出设备一般是指:键盘、鼠标、显示器、耳机、音响、话筒等外设。

而我们的个人计算机是使用主板将这些东西连接到一起来协调工作。

一个软件在执行以完成某项任务的时候,如果用到的计算设备和输入/输出设备不是通过主板连接,而是通过网络连接,那么这个过程就叫云计算。

🌟这里简单举例说明一下

1、我远程到客户电脑给客户处理问题,输入/输出使用的是我的鼠标、键盘和显示器,计算使用的是客户的 CPU、内存和硬盘。

2、打开搜索引擎,搜索 “云计算” ,给我返回很多相关的内容。搜索程序运行在百度的搜索引擎服务器上,而输入和输出是在我的电脑上。

3、登录云盘,在云盘里存储文件,删除文件,下载文件等。

而云计算给我们的感觉一般都是这样:

1、输入/输出在终端,终端触手可及;计算在云端,云端位置未知。

2、云端资源永远是无限的(公有云,例如阿里云),需要多少,按需租用,完全满足弹性需求。

一个完整的云计算环境由云端、计算机网络和终端三部门组成(也就是常说的云、管、端)。 云端就是指计算设备,负责完成软件的计算; 终端是指我们用来完成输入/输入的设备; 计算机网络负责将云端和终端连接起来,完成信息传输(将终端的输入指令传输到云端,将云端的执行结果反馈给终端)。

公有云服务商组建了云端并对外出租计算设备,那么出租类型也就是我们常说的——IaaS SaaS、PaaS、DaaS。

🍑 IaaS

IaaSInfrastructure as a server 的缩写,意思是基础设施即服务。

又云端公司把 IT 环境的基础设施建设好,然后直接对外出租硬件服务器或者虚拟机。消费者可以利用所有计算基础设施,包括处理 CPU、内存、存储、网络和其它基本的计算资源,用户能够部署和运行任意软件,包括操作系统和应用程序。

消费者不管理或控制任何云计算基础设施,但能控制操作系统的选择、存储空间、部署的应用,也有可能获得有限制的网络组件(例如路由器、防火墙、负载均衡器等)的控制。如下图所示:

云端公司一般都会有一个自助网站,用户可以向云端公司签订租赁协议以获取一个账号,登录之后可以管理自己的计算设备:开关机、安装操作系统、安装应用软件等。

IaaS 型租用方式对用户来说优点很明显,就是非常灵活,也是自由度最大的一种类型。用户可以决定安装什么操作系统,以及是否需要安装或者安装什么类型的数据库,安装什么软件等等。就像自己买了台电脑,如何使用是你全权做主。

不过缺陷也很明显,除了管理维护量大之外,还有一个缺陷就是:计算资源严重浪费。操作系统、数据库以及中间件本身就要消耗大量的计算资源,而这些消耗对于租户而已是必须的但是又是无用的,因为用户只是想要运行软件。

🍑 PaaS

PaaSPlatform as a Server 的缩写,意思是平台即服务,即把运行用户所需的软件的平台作为服务出租。如下图所示:

云端公司要做事情就是运行软件所需要的下 7 层部署完毕,然后再 PssS 上划分小块(习惯称之为容器)对外出租,租户只需要安装和使用软件就可以了。

平台软件层包括操作系统、数据库、中间件和运行库,但是并不是每一个软件都需要这 4 部分的支持,需要什么是由软件决定的。所以 PaaS 又分为 2 种,半平台 PaaS 和 全平台 PaaS。

1、半平台 PaaS:只安装操作系统,其他的租户自己去解决。这样会比较麻烦,因为你需要有较强的技术实力,而且需要耗费部分资源去安装软件运行需要的、的中间件、运行库、数据库。

2、全平台 PaaS:安装应用软件依赖的全部平台软件,也就是 4 部分全部准备完毕。不过大家也知道,世界上的应用软件如此庞大,支撑他们的语言、数据库、中间件、运行库可能都不一样,PaaS 云端公司不可能全部都去安装,所以他们支持的软件是有限的。

相对于 IaaS 来说,PaaS 租户的灵活性降低了,只能在云端提供的有限平台范围内做软件,但是有点也很明显,能够最大化利用租用的资源和不需要租户有高深的 IT 技术。

🍑 SaaS

SaaSSoftware as a Server 的缩写,意思是软件即服务。把软件租出去,用户连安装都不需要了。同样来看图:

对比 PaaS 略微有一点不同,应用软件是云端公司来安装、运维的,租户使用软件,需要管理的是这些软件产生的数据信息。

一般来说 SaaS 适用的软件都有如下的特点:

1、复杂:软件庞大、安装复杂、使用复杂、运维复杂,单独购买架构昂贵,例如 ERP、CRM、BI 等。

2、模块化:按功能模块划分,需要什么功能就组什么模块。

3、多租户:多个企业用户同时操作,使用同一个软件而不是互相干扰。当然,数据是逻辑隔离的,不同用户的数据检索字段之一必然是用户身份信息。

4、多币种多语言多时区的支持

🍑 DaaS

DaaSData as a Server 的缩写,意思是数据即服务。云端公司负责建立全部的 IT 环境,收集用户需要的基础数据并且做数据分析,最后对分析结构或者算法提供编程接口,让数据成为服务。如图:

DaaS 是大数据时代的象征,能做 DaaS 服务的云端公司需要从数据积累、数据分析和数据交付三方面积累自身的核心竞争力。

2. 云原生

云原生(Cloud Native)的概念,最早是由 Pivotal 于 2013 年提出的。

云原生可分解为 “云”(Cloud)和 “原生”(Native)两个词。这里还隐藏了一个词—— “计算”(Computing),因为云原生本质上是一种与云计算(Cloud Computing)相同的计算方式,因此通常我们在说云原生的时候,实际上是暗指云原生计算(Cloud Native Computing)。

得益于云计算快速发展,基于云计算特性所设计的云原生应用相比传统的单体应用在安全性,扩展性,快速迭代,运维等各方便都有巨大的领先优势。

云原生并不是指某一种技术,它是一种架构设计理念,只要符合这种架构设计理念的应用,都可以称为 云原生应用, 看看 CNCF 官方对于云原生的定义:

🍑 容器技术

云原生是依赖容器作为技术技术来实现的,但是容器并不是什么新潮技术,以下是容器云技术的发展历史,其中有几个关键的历史节点

  1. 早在 06 年的时候 Amazon 基于容器技术构建的 IaaS 平台 AWS,成为所有云计算厂商的鼻祖,由于技术领先的优势 AWS 现在依然也是云计算行业老大
  2. 13 年 Docker 的诞生进一步简化容器技术的使用门槛,Docker 公司自以为掌握云时代的核心技术,开始野心勃勃的有意挑战传统的云计算大厂例如 RedHat,Google 的江湖地位,公司股价也是一骑绝尘,却不料被 RedHat 联合 Google 发布的 Kubernetes 击溃,Kubernetes 的成功让大家以为容器技术并非云时代的核心技术,容器编排 才是核心技术。
  3. 2015 年借助 Kubernetes 的成功,Google 宣布成立 CNCF 基金会,这是云原生时代的代表性的组织。致力于完善云时代的基础设施,帮助开发者构建更出色的产品。

下图是 CNCF 的部分全景图:

你会发现耳熟能详记得技术架构都被囊括其中:K8S、ETCD、Tars、Buildpacks、Mysql、MongoDb、Nginx......

容器技术使得应用具有了一种 “自包含” 的定义方式。所以,这样的应用才能以敏捷的、以可扩展可复制的方式发布在云上,发挥出云的能力。这也就是容器技术对云发挥出的革命性影响所在,所以说,容器技术正是云原生技术的核心底盘。

3. 技术范畴

云原生的技术范畴包括了以下几个方面:

1、云应用定义与开发流程。这包括应用定义与镜像制作、配置 CI/CD、消息和 Streaming 以及数据库等。

2、云应用的编排与管理流程。这也是 Kubernetes 比较关注的一部分,包括了应用编排与调度、服务发现治理、远程调用、API 网关以及 Service Mesh。

3、监控与可观测性。这部分所强调的是云上应用如何进行监控、日志收集、Tracing 以及在云上如何实现破坏性测试,也就是混沌工程的概念。

4、云原生的底层技术,比如容器运行时、云原生存储技术、云原生网络技术等。

5、云原生工具集,在前面的这些核心技术点之上,还有很多配套的生态或者周边的工具需要使用,比如流程自动化与配置管理、容器镜像仓库、云原生安全技术以及云端密码管理等。

6、最后就是 Serverless。Serverless 是一种 PaaS 的特殊形态,它定义了一种更为 “极端抽象” 的应用编写方式,包含了 FaaS 和 BaaS 这样的概念。而无论是 FaaS 还是 BaaS,其最为典型的特点就是按实际使用计费(Pay as you go),因此 Serverless 计费也是重要的知识和概念。

4. 趋势

应用上云的大潮不可阻挡,云原生是目前软件行业最大的趋势之一。随着云原生成为各行业数字化转型的必选项,软件开发、部署和运维的方式正在发生前所未有的改变。

数字化转型是大趋势和必然选择,企业的发展也由平台技术驱动向应用服务驱动转变。而云原生正在重塑企业数字化转型的基础技术平台,是构建现在企业应用的基础技术架构,无论是互联网应用、企业交易类应用,还是大数据应用,甚至人工智能相关的负载等,都需要基于云原生架构。

5. 发展

趋势形成的原因,除了云原生的架构让开发可以快速持续发布,让服务按需快速伸缩,让系统更具弹性从而更具可用性等技术优势,就企业发展而言,云原生相关技术和标准来源于开源项目也是一个极其重要的原因。开源的生态,企业不用担心被供应商卡脖子,也不用担心技术迭代成本高的问题。基于这些基本点,云原生成为企业发展的战略是必然的。

6. 未来

对从业者而言,思维方式要进行转变。必须意识到云原生技术对企业应用开发方式将是一次全方位的重构。要思考如何利用容器、微服务等技术重写应用,利用 DevOps 重塑企业的研发和运维流程,利用 GitOps、声明式架构重新定义企业的流水线和运维方式,利用可观测性和 SLA(Service-Level Agreement,服务等级协议)升级原来的监控系统,利用云原生的以身份为中心的安全体系保障企业安全。

对开发人员、运维人员、软件交付人员、数据库管理人员等,利用趋势形成前的窗口期,系统掌握云原生技术体系,提升云原生技术实操能力,全面掌握容器、Kubernetes(K8s)、服务网格、DevOps 等云原生技术,具备搭建和运维云原生平台的能力,是获得更大职业发展空间和更多可能性的必然选择。

最后

数字产业蓬勃发展,传统云计算产业走向成熟,大数据、物联网、人工智能、区块链各种新兴技术百花齐放,开发者大有用武之地。但与此同时,新技术层出不穷的涌现,也让开发者对现有技术能力产生焦虑,对于未来道路的选择变得困惑。

不可否认的是,云原生让开发者看到了更多可能。云原生技术的演进为开发者提供了更加 “聪明的方式” 去工作,即充分利用云原生平台的组件及工具链,屏蔽底层技术并节省不必要的时间花费,更加专注地聚焦业务价值创造以及创新。

如果说云是一种信仰,那么云原生就是一种态度,时代呼唤人人都应成为云原生开发者。

不用考虑云原生是不是未来,是不是趋势,因为当下,云原生已经到来!在我心中,云原生更多来说,是一个状态,或者是发展的一个过程,简单来说就是软件应用在上云过程为了适应云、用好云的一种技术架构。

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/e1b5db683b695e2fd59cb03dc
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券