从操作系统发展的历史可以看出,操作系统的大作用是提供合适的抽象。
操作系统是帮我们操控硬件的软件,它就像是应用程序与硬件的中间者,在两者之间扮演一个协调、管理的角色。它们的关系如下图。
操作系统提供了几个我们熟悉的概念去表示硬件设备,比如进程、虚拟存储器、文件。它们表示的硬件设备如下图所示。
可以看出文件是对I/O设备的抽象描述,而虚拟存储器是对主存和I/O设备的统称,最后,一个进程在此基础上又加入了处理器。
但在目前的大规模多机集群的情况下,这个抽象已经失效了。
由于摩尔定律的失效,单核CPU的效率无法提升,同时单机IO的无法扩展。但是商业和科研的上的数据需求又不断的在扩大规模,导致了在服务端越来越依靠不断的扩大机器规模来解决问题。
但机器规模的扩张仅仅是粗放型的,解决机器、系统、数据之间的协调成为巨大的问题。
我们不再像以前那样,通过shell或者视窗来登陆系统了,我们在手机上登陆的系统,背后的数据来自于一个又一个的大集群。
那么,问题来了,目前的操作系统不足以抽象上面的机器。
这导致了很多问题,对于程序员而言,我们写的程序不再能简单的编写然后运行了,至少一个大规模的,需要被很多人访问的系统是这样的。
对于民众而言,他们不能直接接触到这个集群,但是过年抢票的痛苦的背后其实来自于系统。
新的抽象是云吗?
这是目前的云计算的抽象图,虽然看起来很酷,但实际上这个抽象还只是一个蓝图,并没有像第一幅图那样已经实现。
正如微软的win9,win10试图用同一个操作系统UI解决手机和PC的问题那样不切实际一样,同样的故事也在云端发生,IaaS提供给用户的还是传统的操作系统交互,登陆系统后你还是看到一样的操作系统shell。
PaaS稍微好一些,PaaS能让程序员把自己的程序分发部署、运行到集群上,但目前受限于安全性、性能、实现的考虑,用户能在PaaS系统中获得的自由非常小,并且又依赖于不同厂商的云实现。
Docker提供了一种思路,就是集装箱方式来管理程序,或者说,这只是集群中的一项标准
和这个图片所暗示的一样,docker仅仅提供了集装箱的标准,但与之配套的码头、装卸机、中心控制等还没有建立,这仅仅是个开始。人的自由还非常的小。
我们这个时代有无数的数据,但这些数据却被禁锢在政府或者大商业公司的机房内,人类的大脑所能接受的数据量是有限的,可以想想目前我们的PC已经实质上性能过剩了,手机也快了。唯有在云上给出系统的合理抽象,大多人才有机会去操纵和利用这些数据,并进化出我们和这个世界的新的交流方式。