云计算、大数据和人工智能(一)云计算

序言

近些年, 云计算、大数据和人工智能,这几个关键字在IT领域非常火.作为软件行业的从业者(技术人员)其实大家,在日常工作和生活中也多少接触得到,也能大概的有个了解.因为个人学习兴趣,想稍微系统的了解下相关的知识,所以,在网上看了一些文章,其中有一篇以面向非技术者的视角,把这三者,以及互相间的关系讲的很明白.所以想分享给大家.全文因为是面向非技术者,所以有些地方讲的有些太通俗,看起来很有些冗长,所以个人稍微结合技术者的视角,再结合自己的理解,分享出来。


云计算、大数据和人工智能(一)云计算

1 云计算的目标

云计算最初的目标是对资源的管理.

管理的主要是:计算资源、网络资源、存储资源

※这里大家日常工作中。服务器相关应该用到过虚拟机。其实可以理解为资源管理的雏形。

1. 管数据中心就像配电脑

计算资源:CPU,内存

网络资源:工作电脑网口或者无线网卡,通过路由器,链接到公司网络。

存储资源:硬盘

对于一台电脑是这个样子的,对于一个数据中心也是同样的。公司服务器的机房,有很多的服务器,这些服务器也是有CPU、内存、硬盘的,也是通过类似路由器的设备链接公司上网络的。这时的问题就是:运营数据中心的人是怎么把这些设备统一的管理起来的呢?

2. 灵活就是想啥时要都有,想要多少都行

管理的目标就是要达到两个方面的灵活性。

时间灵活性:想什么时候要就什么时候要,需要的时候一点就出来了。

虚拟机服务器管理员,随时可以从服务器上划分出新的虚拟机。

如果去一个云计算的平台上,他要想要这个资源时,只要一点就有了。

空间灵活性:想要多少就有多少。

虚拟机硬盘大小分配。

云盘空间大小分配。

空间灵活性和时间灵活性,即我们常说的云计算的弹性。而解决这个弹性的问题,经历了漫长时间的发展。

3. 物理设备不灵活

第一个阶段是物理设备时期。这个时期客户需要一台电脑,我们就买一台放在数据中心里。

物理设备更新换代飞速发展,例如服务器,内存动不动就是百G内存;例如网络设备,一个端口的带宽就能有几十G甚至上百G;例如存储,在数据中心至少是PB级别的(一个P是1000个T,一个T是1000个G)。

然而物理设备不能做到很好的灵活性:

首先是它缺乏时间灵活性。不能够达到想什么时候要就什么时候要。从采购设备,到安装部署花费大量时间。时间灵活性非常差。

其次是它的空间灵活性也不行。例如用户需要一个很小很小的电脑,但现在哪还有这么小型号的电脑?不能为了满足用户只要一个G的内存是80G硬盘的,就去买一个这么小的机器。但是如果买一个大的,又会因为电脑大,需要向用户多收钱,可用户需要用的只有那么小一点,所以多付钱就很冤。

4. 虚拟化灵活多了

虚拟化。用户不是只要一个很小的电脑么?数据中心的物理设备都很强大,我可以从物理的CPU、内存、硬盘中虚拟出一小块来给客户,同时也可以虚拟出一小块来给其他客户。每个客户只能看到自己的那一小块,但其实每个客户用的是整个大的设备上的一小块。

这样空间灵活性和时间灵活性就基本解决了。

上文提到过公司内服务器虚拟机的运用,同理。

5. 虚拟世界的赚钱与情怀

在虚拟化阶段,最牛的公司是VMware。它是实现虚拟化技术比较早的一家公司,可以实现计算、网络、存储的虚拟化。这家公司很牛,性能做得非常好,虚拟化软件卖得也非常好,赚了好多的钱,后来让EMC(世界五百强,存储厂商第一品牌)给收购了。

但这个世界上还是有很多有情怀的人的,尤其是程序员里面。有情怀的人喜欢做什么事情?开源。

世界上总有一些大牛看不惯钱都让一家赚了去的情况。大牛们觉得,这个技术你会我也会;你能开发出来,我也能。我开发出来就是不收钱,把代码拿出来分享给大家,全世界谁用都可以,所有的人都可以享受到好处,这个叫做开源。

比如最近的蒂姆·伯纳斯·李就是个非常有情怀的人。2017年,他因“发明万维网、第一个浏览器和使万维网得以扩展的基本协议和算法”而获得2016年度的图灵奖。图灵奖就是计算机界的诺贝尔奖。然而他最令人敬佩的是,他将万维网,也就是我们常见的WWW技术无偿贡献给全世界免费使用。我们现在在网上的所有行为都应该感谢他的功劳,如果他将这个技术拿来收钱,应该和比尔盖茨差不多有钱。

在虚拟化软件也一样,有了VMware,这个软件非常贵。那就有大牛写了两个开源的虚拟化软件,一个叫做Xen,一个叫做KVM。

6. 虚拟化的半自动和云计算的全自动

要说虚拟化软件解决了灵活性问题,其实并不全对。因为虚拟化软件一般创建一台虚拟的电脑,是需要人工指定这台虚拟电脑放在哪台物理机上的。这一过程可能还需要比较复杂的人工配置。所以使用VMware的虚拟化软件,需要考一个很牛的证书,而能拿到这个证书的人,薪资是相当高,也可见复杂程度。

所以仅仅凭虚拟化软件所能管理的物理机的集群规模都不是特别大,一般在十几台、几十台、最多百台这么一个规模。

这一方面会影响时间灵活性:虽然虚拟出一台电脑的时间很短,但是随着集群规模的扩大,人工配置的过程越来越复杂,越来越耗时。另一方面也影响空间灵活性:当用户数量多时,这点集群规模,还远达不到想要多少要多少的程度,很可能这点资源很快就用完了,还得去采购。

※上面的问题,目前公司一些部门使用虚拟机服务器,同样面临这样的问题。

所以随着集群的规模越来越大,基本都是千台起步,动辄上万台、甚至几十上百万台。如果去查一下BAT,包括网易、谷歌、亚马逊,服务器数目都大的吓人。这么多机器要靠人去选一个位置放这台虚拟化的电脑并做相应的配置,几乎是不可能的事情,还是需要机器去做这个事情。

人们发明了各种各样的算法来做这个事情,算法的名字叫做调度(Scheduler)。通俗一点说,就是有一个调度中心,几千台机器都在一个池子里面,无论用户需要多少CPU、内存、硬盘的虚拟电脑,调度中心会自动在大池子里面找一个能够满足用户需求的地方,把虚拟电脑启动起来做好配置,用户就直接能用了。这个阶段我们称为池化或者云化。到了这个阶段,才可以称为云计算,在这之前都只能叫虚拟化。

7. 云计算的私有与公有

云计算大致分两种:一个是私有云,一个是公有云,还有人把私有云和公有云连接起来称为混合云,这里暂且不说这个。

私有云:把虚拟化和云化的这套软件部署在别人的数据中心里面。使用私有云的用户往往很有钱,自己买地建机房、自己买服务器,然后让云厂商部署在自己这里。VMware后来除了虚拟化,也推出了云计算的产品,并且在私有云市场赚的盆满钵满。

公有云:把虚拟化和云化软件部署在云厂商自己数据中心里面的,用户不需要很大的投入,只要注册一个账号,就能在一个网页上点一下创建一台虚拟电脑。例如AWS即亚马逊的公有云;例如国内的阿里云、腾讯云、网易云等。

8. 云计算的赚钱与情怀

公有云的第一名亚马逊过得很爽,第二名Rackspace过得就一般了。没办法,这就是互联网行业的残酷性,多是赢者通吃的模式。所以第二名如果不是云计算行业的,很多人可能都没听过了。

第二名就想,我干不过老大怎么办呢?开源吧。如上所述,亚马逊虽然使用了开源的虚拟化技术,但云化的代码是闭源的。很多想做又做不了云化平台的公司,只能眼巴巴的看着亚马逊挣大钱。Rackspace把源代码一公开,整个行业就可以一起把这个平台越做越好,兄弟们大家一起上,和老大拼了。

于是Rackspace和美国航空航天局合作创办了开源软件OpenStack,如上图所示OpenStack的架构图,能够看到三个关键字:Compute计算、Networking网络、Storage存储。还是一个计算、网络、存储的云化管理平台。

当然第二名的技术也是非常棒的,有了OpenStack之后,果真像Rackspace想的一样,所有想做云的大企业都疯了,你能想象到的所有如雷贯耳的大型IT企业:IBM、惠普、戴尔、华为、联想等都疯了。

原来云平台大家都想做,看着亚马逊和VMware赚了这么多钱,眼巴巴看着没办法,想自己做一个好像难度还挺大。现在好了,有了这样一个开源的云平台OpenStack,所有的IT厂商都加入到这个社区中来,对这个云平台进行贡献,包装成自己的产品,连同自己的硬件设备一起卖。有的做了私有云,有的做了公有云,OpenStack已经成为开源云平台的事实标准。

9. IaaS, 资源层面的灵活性

随着OpenStack的技术越来越成熟,可以管理的规模也越来越大,并且可以有多个OpenStack集群部署多套。然后进行统一的管理。这样整个规模就更大了。

在这个规模下,对于普通用户的感知来讲,基本能够做到想什么时候要就什么什么要,想要多少就要多少。还是拿云盘举例子,每个用户云盘都分配了5T甚至更大的空间,如果有1亿人,那加起来空间多大啊。

其实背后的机制是这样的:分配你的空间,你可能只用了其中很少一点,比如说它分配给你了5个T,这么大的空间仅仅是你看到的,而不是真的就给你了,你其实只用了50个G,则真实给你的就是50个G,随着你文件的不断上传,分给你的空间会越来越多。

当大家都上传,云平台发现快满了的时候(例如用了70%),会采购更多的服务器,扩充背后的资源,这个对用户是透明的、看不到的。从感觉上来讲,就实现了云计算的弹性。其实有点像银行,给储户的感觉是什么时候取钱都有,只要不同时挤兑,银行就不会垮。

10. 总结

到了这个阶段,云计算基本上实现了时间灵活性和空间灵活性;实现了计算、网络、存储资源的弹性。计算、网络、存储我们常称为基础设施Infranstracture, 因而这个阶段的弹性称为资源层面的弹性。管理资源的云平台,我们称为基础设施服务,也就是我们常听到的IaaS(Infranstracture As A Service)。

2 云计算不光管资源,也要管应用

有了IaaS,实现了资源层面的弹性就够了吗?显然不是,还有应用层面的弹性。

这里举个例子:比如说实现一个电商的应用,平时十台机器就够了,双十一需要一百台。你可能觉得很好办啊,有了IaaS,新创建九十台机器就可以了啊。但90台机器创建出来是空的,电商应用并没有放上去,只能让公司的运维人员一台一台的弄,需要很长时间才能安装好的。

虽然资源层面实现了弹性,但没有应用层的弹性,依然灵活性是不够的。有没有方法解决这个问题呢?

人们在IaaS平台之上又加了一层,用于管理资源以上的应用弹性的问题,这一层通常称为PaaS(Platform As A Service)。这一层往往比较难理解,大致分两部分:一部分为“你自己的应用自动安装”,一部分为“通用的应用不用安装”。

自己的应用自动安装:比如电商应用是你自己开发的,除了你自己,其他人是不知道怎么安装的。像电商应用,安装时需要配置支付宝或者微信的账号,才能使别人在你的电商上买东西时,付的钱是打到你的账户里面的,除了你,谁也不知道。所以安装的过程平台帮不了忙,但能够帮你做得自动化,你需要做一些工作,将自己的配置信息融入到自动化的安装过程中方可。比如上面的例子,双十一新创建出来的90台机器是空的,如果能够提供一个工具,能够自动在这新的90台机器上将电商应用安装好,就能够实现应用层面的真正弹性。例如Puppet、Chef、Ansible、Cloud Foundary都可以干这件事情,最新的容器技术Docker能更好的干这件事情。

通用的应用不用安装:所谓通用的应用,一般指一些复杂性比较高,但大家都在用的,例如数据库。几乎所有的应用都会用数据库,但数据库软件是标准的,虽然安装和维护比较复杂,但无论谁安装都是一样。这样的应用可以变成标准的PaaS层的应用放在云平台的界面上。当用户需要一个数据库时,一点就出来了,用户就可以直接用了。有人问,既然谁安装都一个样,那我自己来好了,不需要花钱在云平台上买。当然不是,数据库是一个非常难的东西,光Oracle这家公司,靠数据库就能赚这么多钱。买Oracle也是要花很多钱的。然而大多数云平台会提供MySQL这样的开源数据库,又是开源,钱不需要花这么多了。但维护这个数据库,却需要专门招一个很大的团队,如果这个数据库能够优化到能够支撑双十一,也不是一年两年能够搞定的。

比如您是一个做单车的,当然没必要招一个非常大的数据库团队来干这件事情,成本太高了,应该交给云平台来做这件事情,专业的事情专业的人来做,云平台专门养了几百人维护这套系统,您只要专注于您的单车应用就可以了。

要么是自动部署,要么是不用部署,总的来说就是应用层你也要少操心,这就是PaaS层的重要作用。

虽说脚本的方式能够解决自己的应用的部署问题,然而不同的环境千差万别,一个脚本往往在一个环境上运行正确,到另一个环境就不正确了。

而容器是能更好地解决这个问题。

容器是 Container,Container另一个意思是集装箱,其实容器的思想就是要变成软件交付的集装箱。集装箱的特点:一是封装,二是标准。

那么容器如何对应用打包呢?还是要学习集装箱。首先要有个封闭的环境,将货物封装起来,让货物之间互不干扰、互相隔离,这样装货卸货才方便。好在 Ubuntu中的LXC技术早就能做到这一点。

封闭的环境主要使用了两种技术,一种是看起来是隔离的技术,称为 Namespace,也即每个 Namespace中的应用看到的是不同的 IP地址、用户空间、程号等。另一种是用起来是隔离的技术,称为 Cgroups,也即明明整台机器有很多的 CPU、内存,而一个应用只能用其中的一部分。

所谓的镜像,就是将你焊好集装箱的那一刻,将集装箱的状态保存下来,就像孙悟空说:“定”,集装箱里面就定在了那一刻,然后将这一刻的状态保存成一系列文件。这些文件的格式是标准的,谁看到这些文件都能还原当时定住的那个时刻。将镜像还原成运行时的过程(就是读取镜像文件,还原那个时刻的过程)就是容器运行的过程。

有了容器,使得 PaaS层对于用户自身应用的自动部署变得快速而优雅。

※容器的概念在web开发中,时下也是非常重要的一个概念。新的一些web技术,很多都用到了webcomponent的概念。这个在实际项目中是切实用得到的。有兴趣的网友


云计算、大数据和人工智能(一)云计算

可以了解下。


分享到:


相關文章: