以云计算和大数据为背景的分布式系统,通常可以分为三个层面:1. 包含服务器与网络的基础架构层;2. 海量可靠的存储层;3. 大规模计算层。当前主流的设计都倾向于采用现代通用的计算机系统来作为底层的基础架构。如何对众多的通用计算机进行有效的管理与利用成为分布式系统需要解决的核心问题。
资源管理
通用计算机系统由CPU和若干设备控制器通过共同的总线相连而成,而做为一台服务器最重要的部分包括:CPU,内存,磁盘,网络。现代操作系统对这些资源进行了有效的管理使运行在其上的各种程序能合理地进行共享。那么一个集群的资源管理是否也可以像操作系统那样来管理呢?答案是肯定的。
资源的定义
对于CPU,内存,磁盘,网卡这些再熟悉不过的概念,没有必要给出具体的定义,这里只是对这些资源进行一下量化,量化的原则是去繁化简,抓牢核心:
- CPU:CPU之所以可以量化,与现代分时多任务操作系统的调度相关, 即单位时间内CPU指令单元执行了多个程序的指令集,而每个程序占用时间的长短决定了使用率的大小。对于多核CPU来说,每个核的使用率又可以单独计算(此处不展开超线程概念)。作为一种简化的方式,对CPU可以以N*core的形式量化,譬如1.5*core,表示单位时间内CPU的使用率是150%。
- 内存:以内存的容量作为量化维度
- 磁盘:磁盘作为一种资源,量化维度比较多样化,可以从存储空间,吞吐量,iops等多个维度进行量化
- 网卡:网卡的量化可以包括吞吐量,pps(packet per second)等
给出以上这些资源的量化标准后,整个集群的资源状况一目了然,资源的管理与调度工作才能展开。这里需要补充一点,分布式系统资源的变化不会像操作系统上资源的变化那样容易被感知,有时候网络延迟或者单台机器的故障,都可能使得集群的整体资源情况处于不一致的状态。对于量化的维度来说:(1) 如果对于一个给定的程序,资源消耗范围不可预估,如波动很大;(2) 资源本身量化有难度。对满足上述情况的维度,只会增加资源管理的复杂