在 Presto 中使用一致性哈希来改善动态集群的缓存命中率

Posted 过往记忆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在 Presto 中使用一致性哈希来改善动态集群的缓存命中率相关的知识,希望对你有一定的参考价值。

目前,越来越多的用户开始在 Presto 里面使用 Alluxio,它通过利用 SSD 或内存在 Presto workers 上缓存热数据集,避免从远程存储读取数据。Presto 支持基于哈希的软亲和调度(hash-based soft affinity scheduling),强制在整个集群中只缓存一到两份相同的数据,通过允许本地缓存更多的热数据来提高缓存效率。但是,当前使用的哈希算法在集群大小发生变化时效果不佳。本文介绍了一种用于软亲和调度的新哈希算法,一致性哈希(consistent hashing),来解决这个问题。

 

Soft Affinity Scheduling

Presto 使用一种称为软亲和调度的调度策略,将一个 split(最小的数据处理单元)调度到同一个 Presto worker(首选节点)。split 和 Presto worker 的映射关系是通过计算 split 路径的哈希值然后 mod 集群的节点数,确保相同的 split 始终被哈希到同一个 worker 上。第一次处理 split 时,数据将缓存在首选工作节点上。当后续查询处理相同的 split 时,这些请求将再次调度到相同的 worker 节点上。由于数据已经在本地缓存,因此不需要远程读取。

为了改善负载平衡和处理不稳定的 worker,选择了两个首选节点。如果第一个节点繁忙或没有响应,则使用第二个节点。所以数据可能在两台节点上进行缓存。

以上是关于在 Presto 中使用一致性哈希来改善动态集群的缓存命中率的主要内容,如果未能解决你的问题,请参考以下文章

什么是一致性哈希?可以应用在哪些场景?

Redis集群:基本概念

什么是一致性哈希算法

Redis 集群

2016 -Nginx的负载均衡 - 一致性哈希 (Consistent Hash)

Redis hash槽分配