知识卡片

资源管理器主动缓存资源:用一次性交互代价换取支撑毫秒级查询的能力

普通读书笔记卡

内容

HAWQ内部的资源管理器负责向全局资源管理器(比如YARN)动态申请计算资源,但它没有采用”每次查询都实时向全局资源管理器申请、用完立刻归还”这种最直接的做法,而是主动缓存了一部分资源,只在真正不需要的时候才把这些资源归还给全局资源管理器。这个设计选择背后的直接动机是:HAWQ的设计目标之一是支持毫秒级查询,而”向全局资源管理器申请资源”这个跨系统的交互本身是有明显开销和延迟的——如果每一个小查询都要走一遍完整的申请流程,这个交互延迟会直接拖累查询本身的响应时间,让”毫秒级查询”这个目标根本无法达成。通过在HAWQ自己的资源管理器这一层缓存一部分资源,大部分查询可以直接从这个本地缓存的资源池里快速拿到资源,不需要每次都跨系统去和YARN打交道,只有当本地缓存的资源不够用了,才真正触发一次和全局资源管理器的交互——这样把”和外部系统交互”这个相对昂贵的动作,从”每次查询都要做一次”降低到”资源不够用时才偶尔做一次”,用整体交互次数的减少去换取绝大多数查询的响应速度。同时资源管理器也需要保证每个查询实际使用的资源不超过分配给它的额度,否则不同查询之间会互相抢占资源,可能导致整个系统的稳定性受损。这个案例给出了一条应对”外部系统交互延迟拖累核心性能指标”这类问题的通用思路:当某个跨系统交互的开销和自己系统追求的核心性能目标(这里是毫秒级响应)之间存在明显的量级差距时,与其让每次请求都直接承担这个交互开销,不如在自己系统内部维护一层本地缓存/资源池,把这个交互的频率主动降下来,只在缓存资源不足以支撑当前需求时才真正触发一次跨系统交互,用这种”批量申请、本地按需分发”的模式去大幅摊薄单次交互开销对核心指标的影响。

参考来源

- 位置:《高可用架构(第1卷)》第6章《大数据与数据库》"6.5 解密Apache HAWQ——功能强大的SQL-on-Hadoop引擎"节,"6.5.2 Apache HAWQ系统架构"(源文件:_epub-src/OEBPS/Text/Chapter6_5_3.xhtml) - 结论依据:原文说明"资源管理器通过资源代理向全局资源管理器(比如YARN)动态申请资源,并缓存资源,在不需要的时候返回资源。我们缓存资源的主要原因是减少HAWQ与全局资源管理器之间的交互代价。HAWQ支持毫秒级查询。如果每一个小的查询都去向资源管理器申请资源,这样的话,性能会受到影响",直接支撑本卡片结论。 - 原始内容:资源管理器通过资源代理向全局资源管理器(比如YARN)动态申请资源,并缓存资源,在不需要的时候返回资源。我们缓存资源的主要原因是减少HAWQ与全局资源管理器之间的交互代价。HAWQ支持毫秒级查询。如果每一个小的查询都去向资源管理器申请资源,这样的话,性能会受到影响。