写点什么

CNCF 官方大使张磊:什么是云原生?,一个 Java 程序员的面试心得

用户头像
极客good
关注
发布于: 刚刚

开源基金会之一,是 Kubernetes,containerd,etcd


,Envoy 等知名开源项目的托管基金会


  1. 云原生技术社区


CNCF 目前托管的 20 正式项目共同构成了现代云


计算生态的基石。其中 Kubernetes 项目是全世界第


四活跃的开源项目


  1. 云原生技术产业


除了前面两点之外,现在全球各大公有云厂商都已经支持了?Kubernetes。此外,还有?100?多家技术创业公司也在持续地进行投入,总体市场于 2021 年逼近 1000 亿美元。现在阿里巴巴也在全面上云,而且上云就要上云原生,这也是各大技术公司拥抱云原生的一个例子。


[](


)我们正处于时代的关键节点


=================================================================================



2019?年正是云原生时代的关键节点,为什么这么说?我们这里就为大家简单梳理一下。


从?2013?年?Docker?项目发布开始说起,Docker?项目的发布使得全操作系统语义的沙盒技术唾手可得,使得用户能够更好地、更完整地打包自己的应用,使得开发者可以轻而易举的获得了一个应用的最小可运行单位,而不需要依赖任何 PaaS 能力。这对经典?PaaS?产业其实是一个“降维打击”。


2014?年的时候,Kubernetes?项目发布,其意义在于?Google?将内部的?Borg/Omega?系统思想借助开源社区实现了“重生”,并且提出了“容器设计模式”的思想。而?Google?之所以选择间接开源?Kubernetes?而不是直接开源?Borg?项目,其实背后的原因也比较容易理解:Borg/Omega?这样的系统太复杂了,是没办法提供给?Google?之外的人使用,但是?Borg/Omega?这样的设计思想却可以借助?Kubernetes?让大家接触到,这也是开源?Kubernetes?的重要背景。


这样到了?2015?年到?2016?年,就到了容器编排“三国争霸”的时代,当时?Docker、Swarm、Mesos、Kubernetes?都在容器编排领域展开角逐,他们竞争的原因其实也比较容易理解, 那就是?Docker?或者容器本身的价值虽然大,但是如果想要让其产生商业价值或者说对云的价值,那么就一定需要在编排上面占据一个有利的位置。


Swarm?和?Mesos?的特点,那就是各自只在生态和技术方面比较强,其中,Swarm?更偏向于生态,而?Mesos?技术更强一些。相比之下, Kubernetes?则兼具了两者优势,最终在 2017?年“三国争霸”的局面中得以胜出,成为了当时直到现在的容器编排标准。这一过程的代表性事件就是?Docker?公司宣布在核心产品中内置了?Kubernetes?服务,并且?Swarm?项目逐渐停止维护。


到了?2018?年的时候,云原生技术理念开始逐渐萌芽,这是因为此时?Kubernetes?以及容器都成为了云厂商的既定标准,以“云”为核心的软件研发思想逐步形成。


而到了?2019?年,情况似乎又将发生一些变化。



[](


)什么是“云原生”?云原生该怎么落地?


=======================================================================================


[](


)云原生的定义





很多人都会问“到底什么是云原生?”


实际上,云原生是一条最佳路径或者最佳实践。更详细的说,云原生为用户指定了一条低心智负担的、敏捷的、能够以可扩展、可复制的方式最大化地利用云的能力、发挥云的价值的最佳路径。


因此,云原生其实是一套指导进行软件架构设计的思想。按照这样的思想而设计出来的软件:首先,天然就“生在云上,长在云上”;其次,能够最大化地发挥云的能力,使得我们开发的软件和“云”能够天然地集成在一起,发挥出“云”的最大价值。


所以,云原生的最大价值和愿景,就是认为未来的软件,会从诞生起就生长在云上,并且遵循一种新的软件开发、发布和运维模式,从而使得软件能够最大化地发挥云的能力。说到了这里,大家可以思考一下为什么容器技术具有革命性?


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


[](


)云原生的技术范畴





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


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

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

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

  • 第四部分就是云原生的底层技术,比如容器运行时、云原生存储技术、云原生网络技术等。

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

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


[](


)云原生思想的两个理论





在了解完云原生的技术范畴之后你就会发现,其所包含的技术内容还是很多的,但是这些内容的技术本质却是类似的。云原生技术的本质是两个理论基础。


  • 第一个理论基础是:不可变基础设施。这一点目前是通过容器镜像来实现的,其含义就是应用的基础设施应该是不可变的,是一个自包含、自描述可以完全在不同环境中迁移的东西;

  • 第二个理论基础就是:云应用编排理论。当前的实现方式就是?Google?所提出来的“容器设计模式”,这也是 Kubernetes?部分文章中所需主要讲述的内容。


[](


)基础设施向云演进的过程





首先为大家介绍一下“不可变基础设施”的概念。其实,应用所依赖的基础设施也在经历一个向云演进的过程,举例而言,对于传统的应用基础设施而言,其实往往是可变的。


大家可能经常会干这样一件事情,比如需要发布或者更新一个软件,那么流程大致是这样的,先通过?SSH?连到服务器,然后手动升级或者降级软件包,逐个调整服务器上的配置文件,并且将新代码直接都部署到现有服务器上。因此,这套基础设施会不断地被调整和修改。


但是在云上,对“云”友好的应用基础设施是不可变的。


这种场景下的上述更新过程会这么做:一旦应用部署完成之后,那么这套应用基础设施就不会再修改了。如果需要更新,那么需要现更改公共镜像来构建新服务直接替换旧服务。而我们之所以能够实现直接替换,就是因为容器提供了自包含的环境(包含应用运行所需的所有依赖)。所以对于应用而言,完全不需要关心容器发生了什么变化,只需要把容器镜像本身修改掉就可以了。因此,对于云友好的基础设施是随时可以替换和更换的,这就是因为容器具有敏捷和一致性的能力,也就是云时代的应用基础设施。


所以,总结而言,云时代的基础设施就像是可以替代的“牲口”,可以随时替换;而传统的基础设施则是独一无二的“宠物”,需要细心呵护,这就体现出了云时代不可变基础设施的优点。


[](


)基础设施向云演进的意义

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
CNCF 官方大使张磊:什么是云原生?,一个Java程序员的面试心得