“云原生”,很多人会对这个新名词感到困惑,到底什么是云原生,云原生又能给我们带来什么呢?其实云原生的概念最早是由来自Pivotal的MattStine于2013年首次提出,这是他根据自身多年的架构和咨询经验总结出来的一个思想集合,得到了开源社区的不断完善,并被一直延续使用至今。

一、什么是云原生

那么到底什么是“云原生”呢?我们试图先从字面意思理解“云(Cloud)”和“原生(Native)”。

“云(Cloud)”这个字面意识不难理解简单的看就是天空中漂浮的一朵云,那么这个“云”放在科技环境下由从指代网络、互联网的标识到现在的云计算,所以可以说“云”在现在我们默认指代云计算。

“原生(Native)”字面的意识理解为本地人,那么同样的放到现今的科技大环境下就是指"应用所处的环境"。

所以"云原生"可以简单的理解为:“一个应用系统借助云计算相关的周边技术进行设计研发,从而使该应用能完美的适配云上环境”。

云原生计算基金会总经理Priyanka Sharma对云原生的解释为:“云原生技术是指工程师和软件人员利用云计算构建更快、更有弹性的技术,这样做是为了快速满足客户的需求”。

而官网(CNCF)上则将云原生的定义概况为:服务网格、声明式API、不可变基础设施、微服务、容器这五大特征,这也成了很多人对云原生的基础印象。

弄不懂什么是云原生?看完这篇文章就够了!-LMLPHP弄不懂什么是云原生?看完这篇文章就够了!-LMLPHP

总结来说,云原生就是一个快速构建应用的理念,一种快速交付应用的技术集合。

云原生还有一个非常重要的知识点,那就是云原生基金会,毕竟云原生这个理念需要落地推行的话还是需要靠众人来拾材,CNCF(云原生计算基金会)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术,可以说CNCF的主要目的是培育云原生工具市场。

目前CNCF基金会开放的相关项目图如下:

弄不懂什么是云原生?看完这篇文章就够了!-LMLPHP

弄不懂什么是云原生?看完这篇文章就够了!-LMLPHP

CNCF基金会的会员大致如下:

弄不懂什么是云原生?看完这篇文章就够了!-LMLPHP

弄不懂什么是云原生?看完这篇文章就够了!-LMLPHP

二、云原生的代表技术

上文提到过云原生是一种理念,一个技术栈的集合。那么相对应的技术栈主要有:容器、服务网格、微服务、不可变基础设施和声明式API。

  • 容器容器是与系统其他部分隔开的一系列进程。运行这些进程所需的所有文件都由一个镜像提供,这意味着从开发到测试再到生产的整个过程中,容器都具有可移植性和一致性。简单的说容器就是存放应用和应用相关依赖的“独立集装箱”,根据运送的货物的不同特性可以制定多种集装箱类型(即容器镜像)

  • 服务网格服务网格简单的说可以看做是我们平时用的代理软件,但这个代理软件又更加的智能。Service Mesh可以看做是传统代理的升级版,用来解决现在微服务框架中出现的问题,可以把 Service Mesh看做是分布式的微服务代理。

  • 微服务将应用程序构造为一组松散耦合的服务。在微服务体系结构中,服务是细粒度的,协议是轻量级的。简单的说就是其中单个应用程序由许多松散耦合且可独立部署的较小组件或服务组成。

  • 不可变基础设施:这里基础设施可以理解为一个应用运行所需要的基本需求,不可变性最基本的就是指运行服务的服务器在完成部署后,就不在进行更改。这里指代容器镜像。

  • 声明式API:描述最终运行环境的状态,而由系统来决定如何来创建这个环境。例如,你的描述就变成“创建一个有三个Nginx的集群”,而不是把创建Nginx的命令运行三次组成一个集群。这样的好处是当运行环境与描述不符合时,系统能检测到差异,并自动修复,这样系统就有了自动容错的功能。

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

三、云原生能带来什么

在去年IDC(互联网数据中心)对企业的调研中,有将近70%已经将云策略落地,却只有3%能带来明显的获利突破,差异就在技术面的“云实践成熟度”也就是云原生化。

MSP团队(基础设施平台服务商)在面对一个云化项目时大致的流程,首先需要做相关的业务系统的调研,然后选择相对应的云平台,然后给出相关的云化方案,最后根据方案对业务系统进行迁移或者云化的改造。但是面对混合云或多云环境的下云特色存在差异性,导致了在云实践上的差异性。

而云原生化的云服务平台,不仅能够显着的降低基础建设与管理成本、提高布署灵活性与可扩充性,而且还有较高的安全性。

  • 在微服务化方面:云原生将应用程序代码解耦成独立模块化单元,降低微服务的部属时间与互依性,提高应用的扩展性等。

  • 在容器化包装方面:过去程序开发者可能需要创建多个虚拟机好让不同的应用程序运作,但程序容器化让多个应用程序得以存在同一操作环境中,开发人员将代码、微服务放置在可复制、搬移的容器中,轻松地复制、发布到任意云平台,多个容器间不会互相干扰(沙盒机制),不仅减少管理工作还能更有效地利用硬件资源,实现更快的持续集成、交付与发布。

  • 在动态管理方面通过集中的编排调度系统进行动态管理和调度,达到高速、低风险、迅速扩展和部署的方式,进行应用或服务的构建、测试、部署。

借助以上优势以及相对一致的实践方式,云原生能快速的打通各家云环境的壁垒,企业可以对市场变化做出最快的反应,使得新创云原生企业拥有能不断颠覆传统企业的威力。

四、云原生的挑战

根据CNCF的统计自2016年以来,生产中使用容器的数量增加了300%。根据这个规模来看若是在大型应用云化部署后(这里假设都是以容器实例在运行),那么这个应用数以百计或者千计的容器该如何做好全生命周期的管理,如:监控日志的采集告警、调度、以及应用模块与模块之间链路调用追踪等将会是我们即将面临的最大的挑战之一。

本文声明:

本文首发于:数栈研习社

数栈还在github有一个开源项目:FlinkX,欢迎大家一起交流~



03-12 19:34