集群锁管理器:原理、设计与优化
1. 集群锁管理基础
1.1 键冲突与命名空间
在集群环境中,应用程序可能会选择相同的键值来表示不同的对象,这可能导致问题。为了解决这个问题,可以支持独立命名空间的层次结构。使用元键来标识命名空间树,每个应用程序可以通过选择不同的元键来使用不同的命名空间,也可以使用多个命名空间。例如,数据库程序可以为每个独立的数据库使用不同的子元键,以避免键冲突。
1.2 树结构锁
有时,扁平的锁定方案可能不够用。例如,数据库程序有时需要锁定整个表(粗粒度锁定),有时需要锁定表中的单行(细粒度锁定)。树结构锁可以提供混合粒度的解决方案,子锁与父锁相关联,获取父锁会锁定整个子树,进程可以通过原子地释放父锁并获取同一子树中的子锁来降级父锁。
1.3 关联数据
锁用于保护资源,通常是内存中的数据对象。单计算机锁通常嵌入在它所保护的数据对象结构中,进程获得锁后即可使用数据对象。但在集群中,仅获得集群范围的锁可能不够,因为与锁关联的数据可能在不同的节点上。获取锁后,进程可能需要向另一个节点发送额外的消息以获取关联数据。为了减少移动关联数据的开销和延迟,集群锁管理器(CLM)可以在其锁定消息中携带关联数据。
2. CLM 设计
2.1 基本设计思路
CLM 设计原则上并不困难,但在优化集群锁算法以提高性能时会变得复杂。设计分为两个阶段:首先实现跨多个节点的锁定,然后添加恢复支持。CLM 使用应用层的消息传递协议,基于集群消息传递模型构建协议。
2.2 非高可用性 CLM
CLM 需要在集群中存储
超级会员免费看
订阅专栏 解锁全文
172万+

被折叠的 条评论
为什么被折叠?



