很多伟大产品都是来自于企业内部,一开始是企业出于自身需求开发了某种工具,后来发现这个工具不仅可以满足自身需求,还能满足市场上其他用户的需求。于是企业管理层决定把这个工具开放出来,形成产品推向市场,企业自身就是这个产品的种子用户。云计算的诞生就是依赖这样一条路径。
众所周知,亚马逊是当今全球云计算市场的领导者,同时也是云计算的开拓者。2006 年春天 AWS( Amazon Web Services ) 提供第一个云存储服务 (Amazon S3),同年秋天提供了云计算服务(Amazon EC2)。
亚马逊在电子商务领域深耕多年,积累了独特且强大的软件基础设施。亚马逊意识到如果把自己在软件方面的技术基础设施开放给开发者,将省去开发者购买、搭建和维护这些基础设施的大量时间和成本,这将会构建起来一个巨大的生态体系。于是Amazon Web Services就这样诞生了。
2008年,王坚博士加入阿里以后,开始推动阿里云的建设,同时减少阿里对雅虎以及IBM的技术依赖。在做阿里云的前几年时间里,项目持续赔钱,bug频出,团队出走,甚至80%的工程师陆续离开。但阿里云始终坚持下来,最终成为国内公有云市场的领导者,同时也是全球第三大云计算厂商。
阿里云逐步拉开与第四名谷歌的距离,紧追微软Azure
目前云计算厂商提供的云服务大致可分为IaaS、PaaS和SaaS三种,其中最基础的服务就是IaaS(基础设施即服务)。云厂商提供给开发者的是虚拟化的服务器,需要开发者安装操作系统及应用程序的运行环境。
云计算的服务模式
IaaS模式对于开发者来说还是有点麻烦,因此云厂商开始直接为开发者提供运行环境,开发者不需要自己来安装操作系统。
云计算的基础就是资源虚拟化,核心技术是虚拟机。虚拟机主要有两种类型,一种是直接在硬件上安装虚拟化程序,在一台物理机上隔离出多个虚拟机,如下左图(裸金属架构);另一种是在宿主机操作系统上安装虚拟化程序,再隔离出多个虚拟机(宿主机架构)。
虚拟机技术的两种类型
生成和管理虚拟机的程序就是Hypervisor,也称为VMM(Virtual machine Monitor,虚拟机监视器),这不是一个特定程序,而是一类程序,常见的VMM程序包括:VMware EXSi、KVM、Xen、Hyper-V等。其中开源KVM应该是云平台用的最多的VMM。
为了大规模地管理虚拟机,就需要用到管理平台软件,如OpenStack,可以管理诸如KVM或Xen等类型的VMM程序。OpenStack、KVM这些都属于云计算IaaS层的技术。
容器也是一种虚拟化技术,不过是比虚拟机更轻的虚拟化技术,如果大家感兴趣还可以看看以前的旧文《聊聊云计算:5分钟弄清楚我们为什么需要容器》。
容器与虚拟机的比较
相比于传统的虚拟机,Docker的优势很明显,它启动时间很快,是秒级,而且对资源的利用率很高(一台主机可以同时运行几千个Docker容器)。此外,它占的空间很小,虚拟机一般要几GB到几十GB,而容器只需要MB级甚至KB级。现在大家常说的Docker,就是创建容器的工具,是应用容器引擎。
同样对于大规模的容器集群管理,需要专门的容器编排(Container Orchestration)工具。常见的容器编排工具包括:Kubernetes、Docker Compose、Docker Swarm、Apache Mesos、Marathon等。其中Kubernetes是最常用的容器编排工具,因为Kubernetes的首字母K和尾字母s之间有8个字母,所以Kubernetes也被称为K8S。
K8S与容器之间的关系
目前云计算技术已从VMM和Openstack为代表的虚拟机技术体系,逐步过渡到以容器和K8S为代表的云原生技术体系。这其中与互联网应用程序越来越复杂有关系。
传统的互联网应用程序都是单体架构,随着程序越来越复杂,单体架构被分拆成多个服务的分布式架构,逐步演化为后来的微服务架构。
为了给每个服务单独分配资源,就需要把不同的服务运行环境隔离开,如果全部用虚拟机来做隔离,那么成本和性能都是问题。容器由于其对资源的占用很少,所以更适合于分布式架构的系统。这就是以容器和K8S为代表的云原生技术成为云计算的主流。