云计算其实跟 PC 机有一样的概念,有 CPU、硬盘、操作系统、应用软件。
云计算的计算节点(虚拟机)就是 PC 中的 CPU,数据缓存服务就是 PC 的内存,存储节点就是 PC 的硬盘,提供数据服务,让数据不丢、高可用,PC 中的控制器就是云计算的控制系统。PC 机的硬件上面要有操作系统。
操作系统很大一块是给开发人员提供系统的 API 接口,提供系统监控以看运行情况,并且还要有系统管理——如用户账号的权限管理、备份恢复等等。操作系统上面要有应用软件,这样才能服务于最终用户,应用软件就是真正落地的业务,这样才会有用户;有了用户,整个体系就运转起来了。
无论云计算长成什么样,都得要向用户提供“服务”,而不仅仅是软硬件和各种资源。
云计算的技术难点
到今天,云计算的工业实现已经不太难了。现在有开源软件 KVM 和 Xen,这两个东西基本把虚拟化搞定;而 OpenStack 则把管理、控制系统搞定,也很成熟。
PaaS 也有相应的开源,比如 OpenShift,而 Java 里也有 N 多的中间件框架和技术。另外分布式文件系统 GFS/TFS,分布式计算系统 Hadoop/Hbase 等等,分布式的东西都不神秘了。技术的实现在以前可能是问题,现在不是了。
对于云计算工程方面,现在最难的是运维。管 100 台、1 万台还是 100 万台机器,那是完全不同的。机器少你可以用人管理,机器多是不可能靠人的。
运维系统不属于功能性的东西,用户看不见,所以这是被大家严重低估的东西。只要你做大了,就必然要在运维系统上做文章。数据中心 / 云计算拼的就是运维能力。
运维的市场需求
为什么说运维比较复杂,原因有这么几个:
一方面,云计算要用廉价设备取代那些昂贵的解决方案。互联网就是要用便宜的东西搭建出高质量的东西,硬件和资源一定不会走高端路线——比如 EMC、IBM 小型机、SGI 超级计算机等等,如果用它去搭建云计算,成本太贵。运维好廉价的设备其实是云计算工程里最大的挑战。
另一方面,因为机器多了,用的又不是昂贵的硬件,故障就变成了常态,硬盘、主板、网络天天坏。所以,没什么好想的,运维就必须要跟上。
最后,这一大堆机器和设备都放在一起,安全就是一个挑战,一方面是 Security,另一方面是 Safety,保证数十台数百台的设备的安全还好说,但是对于数万数十万台的设计,就没有那么简单了。
面对这样的难题,人是无法搞得定的,只能依靠技术来管理和运维整个平台。比如必须有监控系统。这跟操作系统一样,对资源的管理,对网络流量、CPU 利用率、进程、内存等等的状态肯定要全部收集的。收集整个集群各种节点的状态,是必然每个云计算都有的,都是大同小异的。
然后,还要找到可用性更好的节点,这需要有一些故障自检的功能。比如阿里云就遇到过磁盘用到一定时候就会莫名其妙的不稳定,有些磁盘的 I/O 会变慢。变慢的原因有可是硬盘不行了,于是硬盘控制器可能因为 CRC 校验出错需要要多读几次,这就好比 TCP 的包传过来,数据出错了,需要重新传。
我们要有故障自动检测、预测的措施,才能驱动故障,而不是被动响应故障,用户体验才会好。换句话说,云计算时代我们需要自动化的、主动的运维。