云原生七大代表技术原来是这些!还不了解的该补课啦!

Posted Cloud云说

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云原生七大代表技术原来是这些!还不了解的该补课啦!相关的知识,希望对你有一定的参考价值。

小鲲之前已经聊过云原生的起源,本次我们继续来聊一聊按CNCF的定义,云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API等等。那么,这些技术都是什么?这些技术有什么联系?


云原生的代表技术

1 容器

一般我们说的“容器”(LinuxContainer,LXC),都是“Linux容器”(当然微软也在搞容器,但还没linux那么成熟)。

开源解决方案供应商红帽官网给出的容器定义:Linux® 容器是与系统其他部分隔离开的一系列进程。

运行这些进程所需的所有文件都由另一个镜像提供,这意味着从开发到测试再到生产的整个过程中,Linux 容器都具有可移植性和一致性。

因而,相对于依赖重复传统测试环境的开发渠道,容器的运行速度要快得多。容器比较普遍也易于使用,因此也成了 IT 安全方面的重要组成部分。

容器提供进程级的隔离,可以将操作系统管理的资源划分到相互隔离的组中,在相互隔离的组之间解决资源使用存在冲突的问题。

比如应用程序(Application)APP 1 ,只能在centos 操作系统上运行;APP2只能在ubuntu操作系统上运行。而同一个操作系统同时运行APP1和APP2就产生冲突。容器技术则恰恰可以解决这类问题。目前主流的容器技术有Docker、LXD以及RKT等。


2 Docker

说到容器,就不得不说Docker。2010年,几个大胡子的年轻人在美国旧金山成立了一家名叫“dotCloud”的公司。这家公司主要提供基于PaaS的云计算技术服务。具体来说,是和LXC有关的容器技术。LXC,就是Linux容器虚拟技术(Linux container)

后来,dotCloud公司将自己的容器技术进行了简化和标准化,并命名为——Docker。

Docker项目发布时,无非也是LXC的一个使用者。它创建和使用应用容器的逻辑跟Warden等竞争对手没有本质不同。

不过,我们现在也知道,真正让PaaS项目无所适从的,是Docker项目最厉害的杀手锏:容器镜像。

Docker项目通过容器镜像,直接将一个应用运行所需的完整环境,即:整个操作系统的文件系统也打包了进去。

这种思路,可算是解决了困扰PaaS用 户已久的一致性问题,制作一个“一次发布、随处运行”的Docker镜像的意义,一下子就比制作一个连开发和测试环境都无法统一的Buildpack高明了太多。

Docker项目大大降低了容器技术的使用门槛。轻量级,可移植,虚拟化,语言无关,写了程序扔上去做成镜像可以随处部署和运行,开发、测试和生产环境彻底统一了,还能进行资源管控和虚拟化。
 
Docker作为一种开源应用容器引擎,是为开发人员和系统管理员设计的用于构建、发布和运行分布式应用的平台,典型的Docker平台Kubernetes、Openshift V3、Flynn、Deis等。

Docker允许开发人员将各种应用以及依赖包打包到一个可移植的Docker容器中,以Docker容器为资源分割和调度的基本单位,封装整个软件运行时的环境,然后发布到Linux机器上。

云原生七大代表技术原来是这些!还不了解的该补课啦!
按照Docker的设计方案,应用软件的交付过程如同海上运输,操作系统OS如同一个货轮,每一个在OS基础上的软件都如同一个集装箱。

用户可以通过标准化手段自由组装运行环境,同时集装箱的内容可以由用户自定义,也可以由专业人员(开发人员或系统管理员)定制。

如此一来,交付一个应用软件产品,就相当于交付一系列标准化组件的集合。


3 Kubernetes

有了容器,就需要编排管理容器的生命周期。这里就要提到kubernetes。
Kubernetes,这个单词来自于希腊语,含义是舵手或领航员。K8s是它的缩写,用“8”字替代了“ubernete”这8个字符。

云原生七大代表技术原来是这些!还不了解的该补课啦!
K8s并不是一件全新的发明。它是谷歌根据其内部使用的 Borg 改造成的一个通用容器编排调度器,于2014年6月开源。同年7月,微软、Red Hat、IBM、Docker等公司,相继加入K8s。

2015年,谷歌将其捐赠给Linux基金会下属的云原生计算基金会(CNCF),K8s也成为CNCF第一个项目。

云可以为我们提供稳定而唾手可得的基础设施,但是业务上云成了一个难题,K8s 的出现与其说是从最初的容器编排解决方案开始,倒不如说是为了解决应用上云(即云原生应用)这个难题。

CNCF中托管的一系列项目,即致力于云原生应用整个生命周期的管理,从部署平台、日志收集、Service Mesh(服务网格)、服务发现、分布式追踪、监控以及安全等各个领域通过开源软件为我们提供一整套解决方案。
 
Kubernetes作为云应用的部署标准,直接面向业务应用,大大提高了云应用的可移植性,解决云厂商锁定的问题,让云应用可以在夸云之间无缝迁移,甚至用来管理混合云,成为企业 IT 云平台的新标准。


超值福利插播)

云原生七大代表技术原来是这些!还不了解的该补课啦!


4 微服务

微服务需要从两个方面去理解:什么是"微"、什么是"服务"。微,狭义来讲就是体积小。

著名的 "2 pizza 团队" 很好的诠释了这一解释(2 pizza 团队最早是亚马逊 CEO Bezos提出来的,意思是说单个服务的设计,所有参与人从设计、开发、测试、运维所有人加起来只需要2个披萨就够了)。


而所谓服务,一定要区别于系统,服务一个或者一组相对较小且独立的功能单元,是用户可以感知最小功能集。

传统的单体架构,是以整个系统为单位进行部署。而微服务,则是以每一个独立组件(例如用户服务,商品服务)为单位进行部署。

对于单体应用,如果发现某一业务的请求量非常大,那么是无法单独扩展该业务的,只能拷贝整个单体应用,再部署一套环境,来实现集群。

正因为单体应用的缺陷,才有了微服务。微服务和单体应用的区别,可以用Martin Fowler的这张图来解释:

图中左边是单体架构的集群,右边是微服务集群。

什么意思呢?比如根据每个服务的吞吐量不同,支付服务需要部署20台机器,用户服务需要部署30台机器,而商品服务只需要部署10台机器。这种灵活部署只有微服务架构才能实现。而近几年流行的Docker,为微服务架构提供了有效的容器。


5 服务网格

服务网格( Service Mesh ),是指用以处理服务与服务之间通信的基础设施层。其最早由Buoyant公司(开发Service Mesh项目Linkerd的公司)提出,并在内部使用。该公司2016年9月29日第一次公开使用这个术语。
 
Service Mesh一般用于微服务应用的可配置基础架构层( configurable infrastructure layer )。Istio( 由Google、IBM、Lyft公司在背后进行支持 ) 是目前最广为人知的一款服务网格架构。

Kubernetes是目前Istio唯一支持的容器组织框架。为什么Service Mesh这么受欢迎?对许多公司来说,Docker和Kubernetes这样的工具已经 "解决了部署问题",或者说几乎解决了。但他们还没有解决运行时的问题,这就是服务网格的由来。

什么是解决了部署问题?

使用 Docker 和 Kubernetes 等功能可显著减轻部署的增量操作负担。使用这些工具,部署100个应用或服务不再是部署单个应用的100倍。

这是向前迈出的一大步。对许多公司来说,这导致采用微服务的成本大幅降低。这不仅是因为Docker和Kubernetes所提供了强大的抽象,而且还因为它们使整个组织的打包和部署模式过程标准化了。
 
Service Mesh的出现,弥补了Kubernetes在微服务的连接、管理和监控方面的短板,为Kubernetes提供更好的应用和服务管理。

因此,Service Mesh的代表Istio一经推出,就被认为是可以和Kubernetes形成双剑合璧效果的微服务管理的利器,受到了业界的推崇。



6 不可变基础设施

在传统的可变服务器基础架构中,服务器会不断更新和修改。

使用此类基础架构的工程师和管理员可以通过SSH连接到他们的服务器,手动升级或降级软件包,逐个服务器地调整配置文件,以及将新代码直接部署到现有服务器上。

换句话说,这些服务器是可变的。它们可以在创建后进行更改。

可变基础设施通常会导致以下问题:

在灾难发生的时候,难以重新构建服务。持续过多的手工操作,缺乏记录,会导致很难由标准初始化后的服务器来重新构建起等效的服务。
在服务运行过程中,持续的修改服务器,就犹如程序中的可变变量的值发生变化而引入的状态不一致的并发风险。这些对于服务器的修改,同样会引入中间状态,从而导致不可预知的问题。
 
不可变基础架构是另一种基础架构范例,其中服务器在部署后永远不会被修改。

程序设计中不可变变量(ImmutableVariable)就是在完成赋值后就不能发生更改,只能创建新的来整体替换旧的。由于具有这样的特性这种变量可以在并发环境下安全的使用。对于基础设施的不可变性,最基本的就是指运行服务的服务器在完成部署后,就不在进行更改。
 
不可变基础架构的好处,包括基础架构中更高的一致性和可靠性,以及更简单,更可预测的部署过程。

它可以缓解或完全防止可变基础架构中常见的问题,例如配置漂移和雪花服务器。但是,有效地使用它通常包括全面的部署自动化,云计算环境中的快速服务器配置,以及处理状态或短暂数据(如日志)的解决方案。
 

7 声明式API

声明式(Declarative)的编程方式一直都会被工程师们拿来与命令式(Imperative)进行对比。

我们最常接触的其实是命令式编程,它要求我们描述为了达到某一个效果或者目标所需要完成的指令,常见的编程语言 Go、Ruby、C++ 其实都为开发者了命令式的编程方法,
 
声明式和命令式是两种截然不同的编程方式:
 
在命令式 API 中,我们可以直接发出服务器要执行的命令,例如: “运行容器”、“停止容器”等;
在声明式 API 中,我们声明系统要执行的操作,系统将不断向该状态驱动。
 
通俗的说,命令式编程是第一人称,我要做什么,我要怎么做。

操作系统最喜欢这种编程范式了,操作系统几乎不用“思考”, 只要一对一的将代码翻译成指令就可以了。 

而声明式编程则类似于“第二人称”, 也就是你要做什么。 

有点“”产品经理”和“开发”之间的关系,“产品经理”只负责提需求,而“开发”怎么实现的,他并不关心。
 
让我们来总结一下上面提到的技术和工具:
k8s是整个云原生的基石,云原生的整个生态体系都是依靠k8s建立起来的。
容器(Container)是k8s的底层引擎。
Docker是应用最广的容器工具。
微服务是docker的好搭档。
服务网格是微服务的辅助,建立在k8s上的针对请求的扩展功能。
不可变基础设施是现代运维的基石。
声明式API是k8s的编码方式。


结  语

谈云原生就要谈云计算,不和云计算对比都是耍流氓。云计算的第一个浪潮是关于成本节约和业务敏捷性,尤其是云计算的基础设施更加廉价。

很多企业倾向于使用微服务架构来开发应用。微服务开发快速,职责单一,能够更快速的被客户所采纳。同时,这些应用能够通过快速迭代的方式,得到进化,赢得客户的认可。

云原生可以打通微服务开发、测试、部署、发布的整个流程环节。

云供应商为迎合市场,提供了满足各种场景方案的 API,例如用于定位的 Google Maps,用于社交协作的认证平台等。将所有这些 API 与企业业务的特性和功能混合在一起,可以让他们为客户构建独特的方案。所有这些整合都在 API 层面进行。这意味着,不管是移动应用还是传统的桌面应用都能无缝集成。

所以,采用云原生所开发的应用都且具备极强的可扩展性。

软件不可能不出故障。传统的企业级开发方式,需要有专职人员来对企业应用进行监控与维护。而在云原生架构下,底层的服务或者是API都由将部署到云中,等价于将繁重的运维工作转移给了云平台供应商。这意味着客户应用将得到更加专业的看护,同时,也节省了运维成本。

转载自全栈云技术架构


- End -



以上是关于云原生七大代表技术原来是这些!还不了解的该补课啦!的主要内容,如果未能解决你的问题,请参考以下文章

你还不懂云计算吗?

云原生时代这个技术不可替代

13款你需要了解的云原生工具

阿里云总监课第四期时髦的云原生应用怎么写?

关于云原生应用,这些安全风险了解一下

传统银行如何拥抱云原生?