威斯敏斯特!大学研究:工作负载调度算法演进解析,经典型负载均衡的调度算法

  更新时间:2026-01-21 20:30   来源:牛马见闻

吉报头条
重要新闻
国内新闻
国际新闻
图片精选

当你在电脑上同时运行多个程序时为了解决这个问题为了解决这个问题

<p class="f_center"><br></p> <p id="48PL8P03">当你在电脑上同时运!行多个)程序时,你有没有好奇过计算机是如何决定哪个程序先运行、哪个程序后运行的呢?这个看似简单的问题,实际上涉及到计算机科学中一个极其重要但鲜为人知的领域——工作负载调度。<br></p> <p id="48PL8P04">英国威斯敏斯特大学科学技术学院的Leszek Sliwko和Vladimir Getov教授发表了一项开创性研究,这项研究于2015年发表在《国际计算机科学与软件工程期刊》第4卷第6期(页码141-155)。有兴趣深入了解的读者可以通过期刊编号查询完整论文。两位研究者像考古学家一样,深入挖掘了从1950年代到现代云计算时代调度器的演化历程,为我们描绘了一幅完整的技术发展画卷。</p> <p id="48PL8P05">为了理解什么是工作负载调度,不妨把计算机想象成一个忙碌的餐厅。在这个餐厅里,厨师就像CPU处理器,而各种菜品订单就像不同的计算任务。餐厅经理需要决定先做哪道菜、后做哪道菜,这样才能保证所有顾客都能及时用餐,同时让厨房运转效率最高。这个餐厅经理的角色,就是我们要讨论的"调度器"。</p> <p id="48PL8P06">研究团队发现,调度器的发展历程可以分为三个主要阶段,就像餐饮业从家庭作坊发展到连锁餐厅再到外卖平台的过程一样。第一阶段是操作系统进程调度器,相当于单个餐厅内部的管理;第二阶段是集群系统作业调度器,类似于连锁餐厅的协调管理;第三阶段是大数据调度器,就像现代化的外卖平台需要协调成千上万个商家。</p> <p id="48PL8P07">这项研究的独特之处在于,它不仅仅是一个技术发展的编年史,更是对不同类型调度器设计理念演变的深度分析。研究团队通过大量的文献调研和技术分析,揭示了一个令人惊讶的发现:尽管这些调度器应用在完全不同的场景中,但它们的设计思路却呈现出惊人的相似性和趋同性。</p> <p id="48PL8P08">一、从简单排队到智能分配:操作系统进程调度器的进化之路</p> <p id="48PL8P09">回到计算机发展的早期,那时的调度系统就像一个简单的排队系统。早期的操作系统采用"协作式调度",这种方式就像一群有礼貌的顾客在银行排队,每个人办完事后会主动让出位置给下一个人。Windows 3.1和早期的Mac系统都采用这种方式,程序需要主动告诉系统:"我用完了,下一个可以来了。"</p> <p id="48PL8P0A">但这种方式有一个致命弱点,就像如果队伍中有一个特别没礼貌的顾客一直霸占着柜台不走,整个银行就会陷入瘫痪。如果某个程序设计不当或者出现错误,它可能会占用所有的CPU资源,导致整个系统死机。</p> <p id="48PL8P0B">为了解决这个问题,计算机科学家们开发了"多级反馈队列"调度算法。这个算法的巧妙之处就像一个智能的餐厅预约系统。餐厅设置了多个不同优先级的队列:VIP客户、普通客户、临时客户等。如果某个客户的用餐时间超出了预期,系统会自动将其降级到较低优先级的队列中,确保其他客户也能得到服务。</p> <p id="48PL8P0C">这个算法最早在1962年由麻省理工学院的Fernando Corbató在兼容分时系统中提出。Corbató教授因为这项开创性工作获得了1990年的图灵奖,这相当于计算机科学领域的诺贝尔奖。他的工作为现代操作系统奠定了基础,至今仍在Windows、Mac OS和Linux系统中发挥重要作用。</p> <p id="48PL8P0D">随着多核处理器的普及,调度器面临了新的挑战。这就像一个餐厅突然从只有一个厨师变成了有多个厨师,餐厅经理需要考虑如何协调多个厨师之间的工作。Linux系统经历了从O(n)调度器到O(1)调度器,再到完全公平调度器的演进过程。</p> <p id="48PL8P0E">O(n)调度器的问题在于效率。想象一个餐厅经理每次安排工作时都要检查所有的订单,如果订单很多,光是检查就要花费大量时间。O(1)调度器解决了效率问题,但引入了复杂的启发式算法,就像给餐厅经理配了一套复杂的规则手册,虽然决策快,但有时候判断不够准确。</p> <p id="48PL8P0F">现在广泛使用的完全公平调度器采用了一种更加优雅的方法。它使用红黑树数据结构,就像一个智能的排队系统,能够自动平衡各个程序的CPU使用时间。如果某个程序使用CPU时间过少,系统会提高它的优先级;如果某个程序占用时间过多,则会降低其优先级。这种方式确保了所有程序都能得到公平的处理时间。</p> <p id="48PL8P0G">二、从单机到集群:分布式系统调度器的挑战与创新</p> <p id="48PL8P0H">当计算需求超出单台机器的处理能力时,人们开始将多台计算机连接起来协同工作,这就像从单个餐厅扩展到餐厅连锁店的概念。但管理一个餐厅连锁店比管理单个餐厅复杂得多,需要考虑不同餐厅之间的协调、资源分配、故障处理等问题。</p> <p id="48PL8P0I">集群系统作业调度器就是为了解决这些复杂问题而设计的。与操作系统进程调度器不同,集群调度器需要处理的是大规模的作业队列,有时候队列中可能有数十万甚至数百万个任务等待执行。</p> <p id="48PL8P0J">最常见的集群调度策略是"先来先服务",就像餐厅按照客户到达的顺序提供服务。但这种简单策略在实际应用中会遇到问题。比如,一个需要长时间处理的大任务可能会阻塞后面所有的小任务,就像一个点了很多菜的大桌客户让后面的客户都要等很久。</p> <p id="48PL8P0K">为了解决这个问题,研究人员开发了"回填"技术。这种技术的巧妙之处在于,当大任务在等待资源时,系统可以安排一些小任务先执行,只要这些小任务不会影响大任务的最终执行时间。这就像餐厅在准备大桌菜品的同时,可以先为其他客户提供一些简单的饮品和小食。</p> <p id="48PL8P0L">SLURM是这个领域的佼佼者,它最初由美国劳伦斯利弗莫尔国家实验室开发,专门用于管理大型Linux集群。这个系统现在被全世界约50%的超级计算机采用,包括曾经的世界第一超级计算机。SLURM使用基于希尔伯特曲线的最佳适应算法,能够有效管理成千上万个处理器的协调工作。</p> <p id="48PL8P0M">Maui和Moab调度器代表了另一种设计理念。Maui是早期的开源集群调度器,提供了"预先保留"功能,就像餐厅可以为VIP客户提前预留包间。Moab则是Maui的商业版继承者,增加了更多企业级功能,目前管理着全球顶级超级计算机中约40%的工作负载。</p> <p id="48PL8P0N">Google的Borg系统虽然不对外开放,但代表了集群调度的最高水准。Borg采用单体化调度架构,就像一个中央厨房统一管理所有的烹饪任务。但随着规模的扩大,Google发现这种方式遇到了瓶颈,于是开发了新一代的Omega系统,采用并行调度架构,允许多个调度器同时工作,通过乐观并发控制来解决资源冲突问题。</p> <p id="48PL8P0O">三、应对数据洪流:大数据调度器的创新思路</p> <p id="48PL8P0P">随着互联网的爆发式发展,人类产生的数据量呈指数级增长。纽约证券交易所每天产生约1TB的交易数据,Facebook存储着大约10亿张照片相当于1PB的数据,而欧洲大型强子对撞机每年产生约15PB的实验数据。面对如此庞大的数据量,传统的数据处理方法显得力不从心,这就催生了大数据调度器的出现。</p> <p id="48PL8P0Q">大数据调度器的设计理念与前两类调度器有着根本性的不同。它们不仅要管理计算资源的分配,还要同时管理数据存储和数据处理的协调。这就像一个现代化的物流中心,不仅要管理货物的存储,还要协调运输、分拣、包装等多个环节的工作流程。</p> <p id="48PL8P0R">MapReduce是大数据处理领域的开创性技术,由Google在2003年开发,用于构建搜索引擎的索引。MapReduce的核心思想非常巧妙,可以用图书馆整理图书的过程来理解。假设图书馆需要统计所有书籍中各个词汇的出现频率,传统方法需要一个人逐本翻阅所有书籍,这样效率极低。MapReduce的方法是将这个任务分解为两个阶段:Map阶段让多个志愿者同时处理不同的书籍,每人负责提取自己负责书籍中的所有词汇;Reduce阶段则由专门的统计员收集所有志愿者的结果,进行汇总统计。</p> <p id="48PL8P0S">Hadoop是MapReduce思想的开源实现,最初由Yahoo!工程师开发。到2008年,Yahoo!宣布其搜索索引系统已经运行在一个拥有1万个CPU核心的Hadoop集群上。Hadoop的成功在于它不仅实现了MapReduce的核心思想,还解决了大规模分布式系统中的诸多实际问题。</p> <p id="48PL8P0T">Hadoop引入了"数据本地化"优化策略,这个概念可以用快递配送来理解。传统的数据处理方式就像所有快递都要运到中央仓库进行分拣,然后再配送到各个地区。而数据本地化策略则是让计算任务尽可能在数据所在的机器上执行,就像在各个区域设立分拣中心,减少不必要的运输成本。</p> <p id="48PL8P0U">Spark是新一代大数据处理框架,它解决了MapReduce在迭代计算中的性能问题。MapReduce的问题在于每次计算都要将中间结果写入磁盘,就像一个装配线工人每完成一个步骤都要把半成品放到仓库里,下次需要时再取出来。Spark则提供了内存计算能力,让数据可以在内存中多次使用,大大提高了处理效率。在某些应用场景下,Spark的性能可以比Hadoop提高几个数量级。</p> <p id="48PL8P0V">Spark还引入了"延迟调度"的概念,这种技术的巧妙之处在于权衡公平性和数据本地化的关系。当一个任务应该在某个特定节点上执行以获得最佳性能时,如果该节点暂时忙碌,系统会等待一小段时间(通常最多10秒),而不是立即将任务分配给其他节点。这种策略在保证系统整体公平性的同时,显著提高了数据处理的效率。</p> <p id="48PL8P10">四、三代调度器的异同点分析</p> <p id="48PL8P11">通过深入分析这三类调度器,研究团队发现了一个有趣的现象:尽管它们应用在完全不同的场景中,但其设计理念却呈现出惊人的相似性和演进趋势。</p> <p id="48PL8P12">操作系统进程调度器最初专注于响应性和性能平衡,主要解决如何在毫秒级的时间片内快速做出调度决策。这类调度器的设计哲学是"快速而简单",因为调度开销必须控制在极低的水平。早期的调度器使用简单的轮询算法,后来发展为复杂的多级队列系统,但始终保持着低开销的特点。</p> <p id="48PL8P13">随着多核处理器的普及,操作系统调度器开始面临与分布式系统类似的挑战。现代的CPU调度器需要考虑缓存局部性、NUMA架构等因素,这与集群调度器考虑网络延迟和数据传输成本的思路如出一辙。Linux的完全公平调度器引入了"公平性"概念,这个理念后来在集群调度器中得到了更广泛的应用。</p> <p id="48PL8P14">集群系统作业调度器则更注重可扩展性和资源管理的公平性。这类调度器通常需要处理数万到数十万个任务的队列,调度决策的时间可以是秒级甚至分钟级的。因此,它们可以使用更复杂的算法来优化资源分配和任务调度。</p> <p id="48PL8P15">有趣的是,集群调度器中的"回填"技术概念后来被大数据调度器广泛采用。同时,容错机制也成为集群调度器的核心特性,因为在大规模分布式环境中,硬件故障是常态而非异常。这种设计理念深刻影响了后续大数据系统的架构设计。</p> <p id="48PL8P16">大数据调度器在继承前两类调度器优点的基础上,又针对数据密集型应用的特点进行了专门优化。数据本地化成为这类调度器的核心设计原则,这个概念虽然在集群调度器中有所体现,但在大数据场景下变得更加关键。</p> <p id="48PL8P17">另一个值得注意的趋势是,三类调度器都在向"智能化"方向发展。早期的调度器主要依赖静态规则,而现代调度器越来越多地使用动态学习和预测算法。例如,一些大数据调度器开始使用机器学习技术来预测任务执行时间和资源需求,从而做出更精准的调度决策。</p> <p id="48PL8P18">五、用户行为的意外发现</p> <p id="48PL8P19">在研究过程中,两位学者发现了一个令人意外但普遍存在的现象:无论是集群系统还是大数据平台,用户都普遍存在"资源高估"的行为。</p> <p id="48PL8P1A">在集群系统中,研究发现用户为了避免任务因为资源不足而被强制终止,往往会大幅高估所需的计算时间和内存资源。这种行为就像预订餐厅时故意多报人数以确保有足够座位,结果导致大量座位空置。在某些情况下,用户实际使用的资源可能只有申请资源的一小部分,造成了严重的资源浪费。</p> <p id="48PL8P1B">Google的研究数据显示,在超过90%的情况下,用户申请的内存资源都远超实际需要,有些情况下浪费率高达98%。这种现象在学术研究环境中尤为突出,因为研究人员往往更关注实验结果而不是资源利用效率。</p> <p id="48PL8P1C">为了解决这个问题,一些现代调度系统开始采用"智能压缩调度"策略。系统会根据历史数据学习用户的真实资源使用模式,然后在实际调度时进行适当的调整。这种方法类似于航空公司的超售策略,通过统计学方法在保证服务质量的前提下提高资源利用率。</p> <p id="48PL8P1D">六、技术发展的未来趋势</p> <p id="48PL8P1E">通过对调度器发展历程的深入分析,研究团队预测了几个重要的发展趋势。</p> <p id="48PL8P1F">首先是"统一化"趋势。随着容器技术和云计算的普及,传统的操作系统进程调度、集群作业调度和大数据任务调度之间的界限正在模糊。Kubernetes等现代容器编排系统已经开始整合这些不同层次的调度功能,提供统一的资源管理和任务调度接口。</p> <p id="48PL8P1G">其次是"智能化"发展方向。现代调度器越来越多地引入机器学习和人工智能技术,通过分析历史数据来预测任务执行时间、资源需求和系统负载模式。这种智能化调度可以显著提高系统的整体效率和用户体验。</p> <p id="48PL8P1H">第三个趋势是"绿色化"关注。随着数据中心能耗问题日益突出,调度器开始考虑能源效率优化。通过将任务集中到少数服务器上执行,然后关闭闲置服务器,可以显著降低整体能耗。研究表明,闲置服务器的能耗通常仍达到峰值功耗的50%以上,因此这种优化策略具有重要的环保意义。</p> <p id="48PL8P1I">最后是"实时化"要求的提升。随着物联网和边缘计算的发展,越来越多的应用场景要求调度器能够处理实时或近实时的任务调度需求。这给传统的批处理调度模式带来了新的挑战。</p> <p id="48PL8P1J">研究团队特别提到,未来调度器设计的一个重要方向是借鉴生物学中的自适应和进化机制。自然界中的蚁群算法、蜂群优化等仿生算法已经在一些调度系统中得到应用,显示出良好的效果。</p> <p id="48PL8P1K">说到底,这项研究为我们揭示了计算机调度系统发展的内在逻辑和规律。从早期简单的先来先服务队列,到现代智能化的多层次调度系统,每一次技术进步都是为了更好地平衡效率、公平性和可靠性这三个核心目标。</p> <p id="48PL8P1L">归根结底,调度器的演进反映了人类对计算资源管理理念的不断深化。早期我们追求的是"能用",后来关注"好用",现在则要求"智能"和"绿色"。这种发展轨迹不仅体现了技术的进步,也反映了人类对计算系统认识的不断深入。</p> <p id="48PL8P1M">这项研究对普通人的意义在于,它帮助我们理解了日常使用的各种计算设备和云服务背后的技术原理。无论是手机上的应用切换,还是云端的视频处理,都离不开这些调度算法的支持。随着人工智能和物联网技术的普及,理解这些基础技术将有助于我们更好地使用和选择各种智能设备和服务。</p> <p id="48PL8P1N">对于技术从业者而言,这项研究提供了宝贵的历史视角和设计思路。它告诉我们,技术的发展往往不是线性的,而是螺旋式上升的。许多看似过时的技术理念,在新的应用场景下又会焕发新的生命力。同时,跨领域的技术借鉴往往能够带来意想不到的创新突破。</p> <p id="48PL8P1O">Q&A</p> <p id="48PL8P1P">Q1:工作负载调度器是什么,为什么重要?</p> <p id="48PL8P1Q">A:工作负载调度器就像餐厅的管理员,负责决定哪个任务先执行、哪个后执行。当你同时运行多个程序时,调度器确保每个程序都能公平地使用计算机资源,避免某个程序占用过多资源导致系统卡顿。它是所有计算系统正常运行的基础。</p> <p id="48PL8P1R">Q2:为什么现代调度器比早期的调度器复杂得多?</p> <p id="48PL8P1S">A:早期的调度器只需要管理单台计算机上的几个程序,就像小餐厅只需要安排几桌客人。现代调度器需要协调成千上万台服务器,处理海量数据,还要考虑网络延迟、故障恢复、能源消耗等复杂因素,就像管理一个遍布全球的餐厅连锁集团。</p> <p id="48PL8P1T">Q3:普通用户的行为如何影响调度系统的效率?</p> <p id="48PL8P1U">A:研究发现用户普遍存在"资源高估"现象,申请的计算资源远超实际需要,就像预订餐厅时故意多报人数。这种行为导致大量资源浪费,在某些情况下浪费率高达98%。现代调度系统正在开发智能压缩策略来解决这个问题。</p>

编辑:Jill Awbrey