云计算最初的目标
我们首先来说云计算。云计算最初的目标是对资源的管理,管理的主要是计算资源、网络资源、存储资源三个方面。
管数据中心就像配电脑
什么叫计算、网络、存储资源?
比如你要买台笔记本电脑,是不是要关心这台电脑是什么样的 CPU?多大的内存?这两个就被我们称为计算资源。
这台电脑要上网,就需要有个可以插网线的网口,或者有可以连接我们家路由器的无线网卡。
您家也需要到运营商比如联通、移动或者电信开通一个网络,比如 100M 的带宽。然后会有师傅弄一根网线到您家来,师傅可能会帮您将您的路由器和他们公司的网络连接配置好。
这样您家的所有的电脑、手机、平板就都可以通过您的路由器上网了。这就是网络资源。
您可能还会问硬盘多大?过去的硬盘都很小,大小如 10G 之类的;后来即使 500G、1T、2T 的硬盘也不新鲜了。(1T 是 1000G),这就是存储资源。
对于一台电脑是这个样子的,对于一个数据中心也是同样的。想象你有一个非常非常大的机房,里面堆了很多的服务器,这些服务器也是有 CPU、内存、硬盘的,也是通过类似路由器的设备上网的。
这时的问题就是:运营数据中心的人是怎么把这些设备统一的管理起来的呢?
灵活就是想啥时要都有,想要多少都行
管理的目标就是要达到两个方面的灵活性。具体哪两个方面呢?
举个例子来理解:比如有个人需要一台很小的电脑,只有一个 CPU、1G 内存、10G 的硬盘、一兆的带宽,你能给他吗?
像这么小规格的电脑,现在随便一个笔记本电脑都比这个配置强了,家里随便拉一个宽带都要 100M。然而如果去一个云计算的平台上,他想要这个资源时,只要一点就有了。
这种情况下它就能达到两个方面的灵活性:
时间灵活性:想什么时候要就什么时候要,需要的时候一点就出来了。
空间灵活性:想要多少就有多少。需要一个空间很小的电脑,可以满足;需要一个特别大的空间例如云盘,云盘给每个人分配的空间动不动就很大很大,随时上传随时有空间,永远用不完,也是可以满足的。
空间灵活性和时间灵活性,即我们常说的云计算的弹性。而解决这个弹性的问题,经历了漫长时间的发展。
物理设备不灵活
第一个阶段是物理设备时期。这个时期客户需要一台电脑,我们就买一台放在数据中心里。
物理设备当然是越来越牛:
例如服务器,内存动不动就是百 G 内存。
例如网络设备,一个端口的带宽就能有几十 G 甚至上百 G。
例如存储,在数据中心至少是 PB 级别的(一个 P 是 1000 个 T,一个 T 是 1000 个 G)。
然而物理设备不能做到很好的灵活性:
首先是它缺乏时间灵活性。不能够达到想什么时候要就什么时候要。比如买台服务器、买个电脑,都要有采购的时间。
如果突然用户告诉某个云厂商,说想要开台电脑,使用物理服务器,当时去采购就很难。与供应商关系好的可能需要一个星期,与供应商关系一般的就可能需要采购一个月。
用户等了很久电脑才到位,这时用户还要登录上去慢慢开始部署自己的应用。时间灵活性非常差。
其次是它的空间灵活性也不行。例如上述的用户需要一个很小很小的电脑,但现在哪还有这么小型号的电脑?不能为了满足用户只要一个 G 的内存、80G 硬盘的,就去买一个这么小的机器。
但是如果买一个大的,又会因为电脑大,需要向用户多收钱,可用户需要用的只有那么小一点,所以多付钱就很冤。
虚拟化灵活多了
有人就想办法了。第一个办法就是虚拟化。用户不是只要一个很小的电脑么?
数据中心的物理设备都很强大,我可以从物理的 CPU、内存、硬盘中虚拟出一小块来给客户,同时也可以虚拟出一小块来给其他客户。
每个客户只能看到自己的那一小块,但其实每个客户用的是整个大的设备上的一小块。
虚拟化的技术使得不同客户的电脑看起来是隔离的。也就是我看着好像这块盘就是我的,你看着这块盘就是你的,但实际情况可能我的这个 10G 和你的这个 10G 是落在同样一个很大很大的存储上。
而且如果事先物理设备都准备好,虚拟化软件虚拟出一个电脑是非常快的,基本上几分钟就能解决。所以在任何一个云上要创建一台电脑,一点几分钟就出来了,就是这个道理。
这样空间灵活性和时间灵活性就基本解决了。
虚拟世界的赚钱与情怀
在虚拟化阶段,最牛的公司是 VMware。它是实现虚拟化技术比较早的一家公司,可以实现计算、网络、存储的虚拟化。
这家公司很牛,性能做得非常好,虚拟化软件卖得也非常好,赚了好多的钱,后来让 EMC(世界五百强,存储厂商第一品牌)给收购了。
但这个世界上还是有很多有情怀的人的,尤其是程序员里面。有情怀的人喜欢做什么事情?开源。
这个世界上很多软件都是有闭源就有开源,源就是源代码。也就是说,某个软件做的好,所有人都爱用,但这个软件的代码被我封闭起来,只有我公司知道,其他人不知道。
如果其他人想用这个软件,就要向我付钱,这就叫闭源。但世界上总有一些大牛看不惯钱都让一家赚了去的情况。大牛们觉得,这个技术你会我也会;你能开发出来,我也能。
我开发出来就是不收钱,把代码拿出来分享给大家,全世界谁用都可以,所有的人都可以享受到好处,这个叫做开源。
比如最近的蒂姆·伯纳斯·李就是个非常有情怀的人。2017 年,他因“发明万维网、第一个浏览器和使万维网得以扩展的基本协议和算法”而获得 2016 年度的图灵奖。
图灵奖就是计算机界的诺贝尔奖。然而他最令人敬佩的是,他将万维网,也就是我们常见的 WWW 技术无偿贡献给全世界免费使用。
我们现在在网上的所有行为都应该感谢他的功劳,如果他将这个技术拿来收钱,应该和比尔盖茨差不多有钱。
开源和闭源的例子有很多:例如在闭源的世界里有 Windows,大家用 Windows 都得给微软付钱;开源的世界里面就出现了 Linux。
比尔盖茨靠 Windows、Office 这些闭源的软件赚了很多钱,称为世界首富,就有大牛开发了另外一种操作系统 Linux。
很多人可能没有听说过 Linux,很多后台的服务器上跑的程序都是 Linux 上的,比如大家享受双十一,无论是淘宝、京东、考拉……支撑双十一抢购的系统都是跑在 Linux 上的。
再如有 Apple 就有安卓。Apple 市值很高,但是苹果系统的代码我们是看不到的,于是就有大牛写了安卓手机操作系统。
所以大家可以看到几乎所有的其他手机厂商,里面都装安卓系统。原因就是苹果系统不开源,而安卓系统大家都可以用。
在虚拟化软件也一样,有了 VMware,这个软件非常贵。那就有大牛写了两个开源的虚拟化软件,一个叫做 Xen,一个叫做 KVM,如果不做技术的,可以不用管这两个名字,但是后面还是会提到。
虚拟化的半自动和云计算的全自动
要说虚拟化软件解决了灵活性问题,其实并不全对。因为虚拟化软件一般创建一台虚拟的电脑,是需要人工指定这台虚拟电脑放在哪台物理机上的。
这一过程可能还需要比较复杂的人工配置。所以使用 VMware 的虚拟化软件,需要考一个很牛的证书,而能拿到这个证书的人,薪资是相当高,也可见其复杂程度。
所以仅仅凭虚拟化软件所能管理的物理机的集群规模都不是特别大,一般在十几台、几十台、最多百台这么一个规模。
这一方面会影响时间灵活性:虽然虚拟出一台电脑的时间很短,但是随着集群规模的扩大,人工配置的过程越来越复杂,越来越耗时。
另一方面也影响空间灵活性:当用户数量多时,这点集群规模,还远达不到想要多少要多少的程度,很可能这点资源很快就用完了,还得去采购。
所以随着集群的规模越来越大,基本都是千台起步,动辄上万台、甚至几十上百万台。如果去查一下 BAT,包括网易、谷歌、亚马逊,服务器数目都大的吓人。
这么多机器要靠人去选一个位置放这台虚拟化的电脑并做相应的配置,几乎是不可能的事情,还是需要机器去做这个事情。
人们发明了各种各样的算法来做这个事情,算法的名字叫做调度(Scheduler)。
通俗一点说,就是有一个调度中心,几千台机器都在一个池子里面,无论用户需要多少 CPU、内存、硬盘的虚拟电脑,调度中心会自动在大池子里面找一个能够满足用户需求的地方,把虚拟电脑启动起来做好配置,用户就直接能用了。
这个阶段我们称为池化或者云化。到了这个阶段,才可以称为云计算,在这之前都只能叫虚拟化。