谷歌如何设计与构建超大规模的软件系统
极客时间编辑部
讲述:丁婵大小:2.83M时长:03:06
最近,在谷歌工作近十年的高级软件工程师欧尼福(Onufry)以 Borg 为例,讲解了谷歌这样的大公司是如何设计与建造超大规模的软件系统的。
据介绍,Borg 是谷歌设计的一个集群管理器,它负责对来自于几千个应用程序所提交的 job 进行接收、调试、启动、停止、重启和监控,这些 job 将用于不同的服务,运行在不同数量的集群中,每个集群各自都可以包含最多几万台服务器。
与大多数复杂的系统一样,Borg 最初的设计理念也是十分复杂的,简要总结如下:
谷歌希望能够自动地、动态地将所有的任务调度到由数千台独立机器组成的机器单元中。
调度工作将由一个中央的“主服务器”完成,它负责维护整个机器单元的运行状态(作为主副本复制状态)。
待工作的任务将指定它们对 CPU、磁盘和内存的要求,以及它们的优先级。“主服务器”将利用该优先级对所有的任务进行合理的排序,暂时腾出低优先级任务的资源给高优先级的任务使用。
谷歌将采取超额预定资源的机制,将低优先级的任务放入那些虽然被高优先级任务预定但是还未使用的资源中。
对任务资源占有量的评估,以及对超额配置所导致的资源短缺问题的响应,将由一台机器上的代理(Borglet)来完成,该代理需要拥有超级用户的权限。
随后,就出现了系统需求的大规模增长。同时也添加了 SSD 作为一种额外的资源。即便后来证明最初的假设是错误的,也就是如果一个机械硬盘发生故障,那么所有使用该机械硬盘的任务都应该被认为是处于死亡状态。因此该系统中便添加了允许幸存磁盘丢失的代码路径,以用来重新调度资源,更好的组织机器单元。
此外,他们也围绕“主服务器”和代理的核心思想构建了新的生态系统,它是一个内部检查的工具,也是一款配置语言。它可以自动化预测任务对资源的需求,而不再需要人们在配置中手动输入,同时还可以用来配额管理系统、跨机器单元调度,以及更多其他的功能。
最终,系统也在他们的开发过程中得到了改进。最初每隔一秒计算一次的资源核算机制逐渐被基于系统内核的机制(cgroups)所取代。另外他们彻底的检查了之前所有的错误提示,并对错误提示进行了大幅改进。在 Borg 系统的“主服务器”和代理级别添加了只读的用户界面展示,然后随着系统的改进,最终构建出了可以跨机器单元的用户界面展示。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
请先领取课程
免费领取
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论