知识卡片

Buffer资源池与配额管理:让"资源可以互相借用"不至于失控

普通读书笔记卡

内容

资源共享池要真正安全可用,光有”大家可以互相借用闲置资源”这个理念还不够,必须配一套明确的边界规则,否则很容易出现某个业务过度占用、或者调度混乱失控的问题。微博DCP的做法是区分”集群内部”和”跨集群”两种不同的调度权限:集群内部可以自由调度资源,比如缩小A服务的规模、把腾出来的资源直接分配给同一集群内的B服务,这种调度因为影响范围局限在自己团队内部,不需要额外的审批约束;但如果一个集群要向外调度资源(借用其他集群的闲置资源),就必须受配额制度的约束,控制每个集群能够从共享池拿走多少资源,不能无限制地”薅羊毛”。具体流转路径是:先看这个集群自己的Buffer资源池里够不够用,如果Buffer池资源充足,直接初始化使用;如果Buffer池资源不足,再看这个集群的配额是否还有余量,配额允许的话才能真正申请新设备、纳入Buffer池后再被使用——所有真正可调度的主机,都只能经过集群自己的Buffer池这一层,不存在绕过Buffer池直接跨集群调用的路径。这套设计给出了一条资源共享机制设计的重要原则:”共享”和”无序”是两回事,一个安全可控的资源共享池,必须明确划分”哪些调度决策可以自主完成、不需要额外约束”(集群内部)和”哪些调度决策涉及跨边界资源流转、必须受配额限制”(跨集群),并且要有一个统一的、所有资源流转都必须经过的入口和记账点(这里是Buffer池),否则资源共享很容易演变成谁动作快谁能多占资源的无序竞争,最终损害整个共享池的公平性和可持续性。

参考来源

- 位置:《高可用架构(第1卷)》第4章《容器与云计算》"4.5 微博基于Docker的混合云平台设计与实践"节,"4.5.3 微博混合云DCP系统设计核心:自动化、弹性调度"及"4.5.5 大规模集群操作自动化"(源文件:_epub-src/OEBPS/Text/Chapter4_5_4.xhtml、Chapter4_5_6.xhtml) - 结论依据:原文说明"不同业务的集群则各自独立,并且具有独立的资源池。集群内可以自由调度资源……若集群要调度外部资源,也有设计配额制度,控制每个集群分配到的资源……所有可调度的主机只能通过集群自己的Buffer池",直接支撑本卡片结论。 - 原始内容:而不同业务的集群则各自独立,并且具有独立的资源池。集群内可以自由调度资源……若集群要调度外部资源,也有设计配额制度,控制每个集群分配到的资源……随即被纳入DCP使用,所有可调度的主机只能通过集群自己的Buffer池。