在没有网络的时代,每台电脑就是一个单机,包括CPU、内存、硬盘、显卡等硬件,安装上操作系统和应用软件,就可以完成工作。后来网络诞生,它将单机关联起来,单机之间可以交换信息,协同工作。再后来,单机性能越来越强,就有了服务器,人们将多台服务器集中起来放在机房里,用户通过网络访问和使用机房里的计算机资源。再之后,小型网络变成了大型网络,就有了互联网。小型机房也变成了大型机房,就有了IDC互联网数据中心。当越来越多的计算机资源和应用服务被集中起来,就形成了——云计算。无数的IDC大型机房,就成了“云端”。
云计算说白了就是将计算机资源集中起来放在网络上。那么云计算如何实现呢?
云计算有三种服务方式,分别是SAAS(软件即服务)、PAAS(平台即服务)、IAAS(基础设施即服务)。
那这三种服务方式具体是把哪些计算机资源放在云端呢?下图看得更直观:
当对物理资源进行管理的第一步,就是“虚拟化”。虚拟化是一种技术,云计算是一种使用模式。虚拟化可以理解为一台物理服务器上运行多台虚拟服务器,这种虚拟服务器,也叫虚拟机(VM,Virtual Machine)。虚拟机共享物理服务器的CPU、硬盘、内存、网卡等资源。一台物理机上可以同时运行多台虚拟机。谁来完成物理资源虚拟化的工作呢?
Hypervisor 也叫做VMM(Virtual Machine Monitor,虚拟机监视器),它不是一款具体的软件,而是一类软件的统称。像VMware、KVM(kernel-based virtual machine,基于Linux内核的虚拟机)、Xen、Virtual Box,都属于Hypervisor。
为了更好的管理虚拟机,便有了OpenStack这样的云管理平台。OpenStack对资源进行管理,并且以服务的形式提供给上层应用或者用户去使用。有点像个商店负责管理商品(计算资源、存储资源、网络资源等),卖给用户,但它本身不制造商品(不具备虚拟化能力),它的商品,来自于KVM或者其它Hypervisor。
以上的几个概念包括VM、KVM、OpenStack等,都主要属于IaaS(基础设施即服务)。
容器是“轻量级”的虚拟化,它的目的和虚拟机一样都是为了创造“隔离环境”,不同点在于——虚拟机是操作系统级别的资源隔离,而容器本质上是进程级的资源隔离。像是Docker就是创建容器的工具,即应用容器的引擎。相比于传统的虚拟机,Docker的优势很明显,它启动时间很快,是秒级,而且对资源的利用率很高(一台主机可以同时运行几千个Docker容器)。此外,它占的空间很小,虚拟机一般要几GB到几十GB,而容器只需要MB级甚至KB级。
有了容器,我们还需要一个容器编排工具——Kubernetes(K8S)。K8S是一个容器集群管理系统,比如启动容器,自动化部署、扩展和管理容器应用,以及回收容器。
除了K8S之外,还有很多种容器管理平台,例如Compose,Marathon,Swarm,Mesos等。Docker和K8S,关注的不再是基础设施和物理资源,而是应用层,所以属于PaaS。
对分布式系统比较合适的定义是把所有IT资源看成为一个整体来使用,而不是去独立的看某个机器某个系统,即资源池。以开源Hadoop为例,为实现将IT资源变成整体,要做到的第一点就是将一个巨大的文件拆开放在多个地方,我们可以用一大堆计算机通过网络连接来存放这个巨大的文件,这样即使很多很小硬盘的机器也可以通过连在一起当成一个很大的存储空间来用,这种就是分布式存储(HDFS)。
光是文件存放合在一起还不够,计算能力也要合在一起,所以它还要满足一个任务分给多个物理机来处理。这样即便单机性能不足,通过这种方式连在一起,只要足够多,也能当超级计算机用,这种就是分布式计算(MapReduce)。
由此可见虚拟化主要是把大块拆成小块,分布式系统主要是把小块组合成大块,IT资源经过这样的揉碎再组合,就变成了一个十分灵活的系统。
All in one部署:当企业的IT系统没有很复杂,业务需求没有很高的时候,可以将所有的服务部署在一台云服务器上。比如将应用和数据库部署在一台ECS上。
应用与数据分离:将应用部署在ECS上,将数据库单独使用云上的数据库服务RDS,提升系统服务能力。
应用集群部署:为缓解前端访问的压力,使用SLB负载均衡服务统一接口处理用户请求;后端通过部署多台云服务器去处理用户的请求。
动静资源分离:为缓解系统存储压力,将静态资源(图片、音视频等非结构化数据)单独放到云上OSS文件存储,实现动静资源分离。
参考:
https://www.zhihu.com/question/22793847
https://developer.aliyun.com/article/256469
稀有物种女程序猿,日更python、网络、算法等相关知识。日拱一卒。欢迎各位催更扯淡一条龙!