暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

什么是全局一致性

芬芳 2023-07-18
694

简介

在部分应用场景中,除了会话内部有逻辑上的因果依赖关系,会话之间也存在依赖关系,例如在使用连接池的场景下,同一个线程的请求有可能通过不同连接发送出去。对数据库来说这些请求属于不同会话,但是业务逻辑上这些请求有前后依赖关系,此时会话一致性便无法保证查询结果的一致性。因此PolarDB提供了全局一致性来解决该问题。
image.png
每个读请求到达PolarDB数据库代理时,代理都会先去主节点确认当前最新的LSN位点,假设为LSN0(为了减少每次读请求都去获得主节点的最新LSN,内部做了批量优化), 然后等待所有只读节点的LSN都更新至主节点的LSN0位点后,代理再将读请求发送至只读节点。这样就能保证该读请求能够读到至请求发起时刻为止,任意一条已完成更新的数据。
全局一致性提供如下两个配置参数:

参数 说明
ConsistTimeout 全局一致性读超时时间,即允许用于只读节点的LSN更新至主节点最新LSN的时间。若超出该时间,PolarDB代理将根据ConsistTimeoutAction参数设置进行对应操作。取值范围0~300000,默认值为20,单位为毫秒。
ConsistTimeoutAction 全局一致性读超时策略,若未能在参数ConsistTimeout设置的时间内将只读节点的LSN更新至主节点最新LSN,PolarDB代理将根据ConsistTimeoutAction参数设置进行对应操作。取值范围如下:
  • 0:将读请求发往主节点(默认)。
  • 1:代理返回一个错误报文wait replication complete timeout, please retry给应用端。
  • 适用场景

    当主从延迟较高时,使用全局一致性可能会导致更多的请求被路由到主节点,造成主节点压力增大,业务延迟也可能增加。因此建议在读多写少的场景下选择全局一致性。

    「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
    关注作者
    【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论