在参与了众多的大型的系统建设之后,个人在16年进入了所在公司的技术平台相关体系构建领域,四年多参与建设平台及落地支撑大规模业务的经历,尝试着阶段总结下当下云计算时代企业技术平台构建的体系的理解。
云计算从概念到如今落地多年,逐渐成为各个领域数字化建设的基础,目前各行各业都在启动一轮数字化上云的建设。身在电信行业这个数字化比较早的领域,在这次浪潮中也有幸参与了平台层面的建设和落地。
按照标准的云计算分层定义来看,典型的云计算体系三层划分如下,每层都在服务化的分层架构体系下抽象定义(服务化的架构思维代表现阶段一种主流的架构思路,当然它并不代表全部的架构形态)。
IaaS层,基础设施即服务层
按照传统的软件开发角度的视角来看,基本上一个应用软件的运行的基础条件:
“一台服务器(包括运行的操作系统等环境)+ 应用程序(开发者开发)”
复杂一些的,应用程序需要网络的能力才能协作提供服务,那么包括网络基础能力的提供也可以归结在服务器基础领域的体系内。
随着计算的所需的算力越来越高,IaaS层演变到现如今,本身的演进简单总结成三个阶段,三个阶段并不是严格的先后进行的,在技术的生命周期上是交替着前进的。
第一阶段:单服务器到多服务器集群
单服务器到服务器集群的时期:
不管是小型机还是后来大规模使用的x86服务器,其本质都是一样的,只不过随着机器的需求越来越高,原先手工部署管理的机器集群逐渐显现高成本。
这个阶段对用不同的应用程序域来讲,主要解决的是越来越多的服务器,在问题计算域里面怎么去统一的管理。在服务器本身的能力抽象上暂时没有涉及(比如虚拟化)。
在这个阶段,不同应用领域对服务器的管理显现了不同的方式(这里主要看交易和批量大数据处理两个领域):
1.交易领域
交易领域是一个对服务器的管理从手工,逐步到应用发布部署使用脚本自动化的过程。因为其主要应对的场景是来自外部web领域的请求处理,通常为负载型的应用。
负载型的应用,大多通过一个负载均衡的软件来实现应用处理请求在不同的服务器的服务端程序的并发调度处理。大致过程:
在服务器本身的管理上面,主要通过脚本来管理越来越多的服务器,以及应用程序如何在这些服务器上的发布和启停等工作。
2.数据计算领域
数据计算领域,最典型的就是分而治之的理念的应用,最常见的私有开发的应用框架或者业界知名的hadoop等计算框架,都是采用分而治之的并发计算的计算模型来应对大数据量的计算问题。
数据计算领域,逐渐的形成一套任务为单位的调度管理软件系统来管理服务器集群,这个阶段,交易型应用和批量数据计算应用都是隔离服务器集群部署的。(后来到阿里巴巴提出混合部署、混合调度技术应用)大致处理过程:
数据计算领域,虽然在应用的计算分发领域有了统一的集群调度管理软件,但是在服务器集群本身的管理上面,还缺乏统一的管理平台。
第二阶段:服务器虚拟化、集群化
服务器从集群化演变到虚拟化、集群化管理阶段。计算机领域,“分层解耦”,“抽象”一直是到目前为止没有改变的核心架构理念之一。
所谓“分层解耦”是希望通过不同层次的划分,使得可以聚焦在某一层次的问题域中去解决问题,小到计算机、操作系统,大到整个云计算的领域。
抽象,几乎是解决问题的核心手段之一,通过抽象我们可以屏蔽差异,统一概念,统一处理手段,面向使用者始终可以以统一的概念、逻辑来提供服务。
从服务器虚拟化抽象划分技术领域来看,大致上经历了两个阶段。
在虚拟化技术的使用下,通过openstack这一类IaaS层的平台软件实现了服务器集群,以及服务器虚拟化的抽象化管理。
使用者等于在一个服务器集群中,可以按照需要,统一分配管理不同规格的虚拟机服务器提供使用,而无需关注提供给你的虚拟机是运行在哪台服务器上。
计算能力“按需所取”、“弹性管理”是IaaS层在这层上核心能力,其中弹性管理就在于:
虚拟化的服务器集群可以面向使用者提供弹性的虚拟机计算服务,虚拟机可以提供不同规格的扩缩容服务,根据不同的计算负载的需要。
第三阶段:资源细粒度化、容器化
服务器是提供计算资源服务,服务器以哪种方式提供计算服务会随着真正的使用者需求而变。在尽管已经演变到虚拟化、集群化统一管理的IaaS平台时期,但是对应使用者来讲,管理使用的对象是“应用”。
尽管资源层抽象了虚拟化,通过虚拟机统一的对外提供计算服务,但是本质上虚拟机的规格还是一台台服务器,只要是这种模式提供计算服务的,那么就会出现如下的情况。
服务器虚拟化技术,本质上提供的资源隔离的计算单元,每个单元都可以理解为一台台服务器,有独立的操作系统,完整的服务器虚拟设备。
但是站在应用程序领域,程序的运行还是在一个个虚拟机的操作系统中竞争运行的。
还记得第一阶段说明的问题,就是程序的部署虽然可以通过自动化的手段来进行,但是如何划分部署、部署多少个进程等应用程序还是必须靠人工的经验。
问题的出现,在计算机技术领域就是演进发展的动力,尤其这类问题在大规模的使用场景下越来越变成束缚其生产效率的时候,总是会出现相应的技术手段来应对。
时下最流行的docker技术,是容器这个技术概念的实现之一,本质上通过对操作系统的资源一系列的抽象隔离,来实现了应用级别的资源单元化、虚拟化。
在容器化时代,主要核心关注点在三个:镜像、容器、编排管理
1.镜像
镜像是站在部署发布角度的提升,早期的开发者都深有体会,当我们开发完成好对应的应用程序,首先要进行打包。编译型的程序会编译成二进制可执行文件,或者jar包等。
第二步是通过类似ftp的服务将要部署的程序包传递上去,并启动运行,不同的程序发包到服务器上格式等都不同。
镜像,解决了我们痛点是“统一应用程序打包后的环境”,同时发包的时候,完整型的校验得到改善(尤其大规模发包,最有体会的就是经常有部分服务器发包的不完整,因为网络环境的问题)。
2.容器
容器通过Linux提供的cgroup和namespace相关技术,构成了一个以应用为中心的资源虚拟化的逻辑隔离单元。
Docker只是其中实现的比较完善的管理软件,核心技术是所有实现的容器软件通用的。发布应用,可以以每个应用的资源规格来定义,这样就极大的降低了应用资源抢占带来的运行不确定性,可以将某些应用限制在资源规格之内运行。
3.编排管理
既然资源规格变得这么细粒度,那么一套完整的管理、调度的编排工具就显得很重要,这个领域mesos+marathon和kubernetes都是时下流行的编排系统。
使用者通过这些编排系统,统一的分配管理虚拟化、细粒度化的资源规格,统一的管理应用的定义和发布调度,逐步面向使用者提供进一步的抽象化的资源服务。
到这里,大概初略的总结下IaaS层领域的演进的思路:
1.小型的系统应用,单服务器部署;
2.应用增加,单服务器配置规格越来越高,通过分区技术实现大规格的服务器多用户化的资源切分和隔离;
3.不同领域应用,以及越来越多的应用资源利用率等问题催生服务器集群化;
4.服务器集群化从脚本管理走向平台系统化管理阶段,同时虚拟化技术得到应用,出现了openstack这类开源的兼顾虚拟化和集群管理的平台软件,逐步支持大规模集群管理和服务器虚拟化。
5.随着对资源的细粒度的要求,进一步提升资源利用率,出现了容器以及容器编排技术平台,面向使用者提供了逻辑隔离的容器运行资源单元,进一步提升了资源共享和效率。