tencent cloud

文档反馈

一致性级别

最后更新时间:2023-01-03 17:21:17
    TDSQL-C MySQL 版的自动读写分离功能,会在 TDSQL-C MySQL 版与应用程序间建立好连接,进而解析发送进来的每一条 SQL,如果是 CREATE、ALTER、DROP、RENAME 等语句则直接发往读写实例,如果是事务外的读(SELECT)语句则发送到只读实例,从而实现了读写分离。但是当数据库负载很高,如大批量插入数据的时候,延迟会非常严重,导致无法从只读节点中读取最新数据。
    当读写实例有数据更新后,相关的更新会应用到只读实例,其中数据同步的延迟时间与写入压力有关。TDSQL-C MySQL 版通过提供不同的一致性级别,来保证业务访问数据库的数据一致性要求。
    TDSQL-C MySQL 版提供了以下三种一致性级别,满足您在不同场景下对一致性的要求:
    最终一致性
    会话一致性
    全局一致性

    最终一致性

    功能简介 TDSQL-C MySQL 版的数据库代理实现了自动读写分离功能,在自动读写分离场景下默认提供数据的最终一致性,从而保证只读实例对已改变写的数据的读取,最终都能取得已更新的数据,但不完全保证能立即取得。已更新的数据主从复制延迟会导致从不同节点查询到的结果不同。
    适用场景 如需要减轻读写实例压力,让尽量多的读请求路由到只读实例,对一致性要求不是很高的场景您可以选择最终一致性。

    会话一致性

    功能简介 有些场景要求一致性较高,而最终一致性会导致查询的结果有所不同,通常需要对业务进行拆分,将一致性要求高的请求直接发往读写实例,而可以接受最终一致性的请求则通过读写分离发往只读实例。这既会增加读写实例的压力,影响读写分离的效果,又会增加应用开发的负担。
    为解决上述问题,TDSQL-C MySQL 版提供会话一致性。会话一致性保证了同一个会话内,一定能够查询到读请求执行前已更新的数据,确保了数据单调性。
    在 TDSQL-C MySQL 版的链路中间层做读写分离的同时,中间层会追踪各个节点已经应用的日志位点,即日志序号(Log Sequence Number,简称 LSN)。同时每次数据更新时 TDSQL-C MySQL 版会记录此次更新的位点为 Session LSN。当有新请求到来时, TDSQL-C MySQL 版会比较 Session LSN 和当前各个实例的 LSN,仅将请求发往 LSN 大于或等于 Session LSN 的实例,从而保证了会话一致性。
    
    在上述场景中,当更新完成后,返回客户端结果时复制也在同步进行,而当下一个读请求到来时,读写实例和只读实例之间的数据复制有可能已经完成。且大多数应用场景都是读多写少,所以在该机制下保证了会话一致性。
    适用场景 适用于对一致性有较高要求的场景,TDSQL-C MySQL 版的一致性级别越高,对主库的压力越大,集群性能也越低。推荐使用会话一致性,该级别对性能影响很小而且能满足绝大多数应用场景的需求。
    注意:
    开启会话一致性后,如果读写实例与只读实例复制时延较大,各个读节点 LSN 均小于 Session LSN,会导致 SELECT 请求发送到读写实例,从而增大读写实例的压力,整个集群的读写性能会有一定的降低。

    全局一致性

    功能简介 某些场景对一致性要求极高,除了会话内部有逻辑上的因果依赖关系,会话之间也存在依赖关系,例如在使用连接池的场景下,同一个线程的请求有可能通过不同连接发送出去。对数据库来说这些请求属于不同会话,但是业务逻辑上这些请求有前后依赖关系,此时会话一致性便无法保证查询结果的一致性。因此 TDSQL-C MySQL 版提供了全局一致性来解决该问题。
    适用场景 适用于对一致性要求极高的场景,当主从延迟较高时,使用全局一致性可能会导致更多的请求被路由到读写实例,造成读写实例压力增大,业务延迟也可能增加。因此建议在读多写少的场景下选择全局一致性。

    设置一致性级别

    说明:
    设置一致性级别需先开启读写分离功能,在开启读写分离的步骤中即可设置会话一致性级别,如已开启功能,但需修改一致性级别,请参考以下步骤。
    2. 在集群列表中,单击集群 ID 或操作列的管理,进入集群管理页面。
    3. 在集群管理页面,选择数据库代理 > 读写分离 > 调整配置
    
    4. 在配置窗口下,选择一致性级别,单击确定
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持