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 版提供了全局一致性来解决该问题。适用场景
适用于对一致性要求极高的场景,当主从延迟较高时,使用全局一致性可能会导致更多的请求被路由到读写实例,造成读写实例压力增大,业务延迟也可能增加。因此建议在读多写少的场景下选择全局一致性。
设置一致性级别
说明设置一致性级别需先开启读写分离功能,在开启读写分离的步骤中即可设置会话一致性级别,如已开启功能,但需修改一致性级别,请参考以下步骤。1. 登录 TDSQL-C MySQL 版控制台,在集群列表,选择已开启代理的集群,单击集群 ID,进入集群管理页面。2. 在集群管理页面 > 集群详情 > 数据库代理后单击详情,或在集群管理页面直接选择数据库代理 tab 页进入数据库代理管理页面。3. 在连接地址下找到目标访问地址,在其操作列单击调整配置。

4. 在配置窗口下,选择所需的一致性级别,单击确定。说明若一致性设置为会话一致性或全局一致性,您需对读写实例和只读实例之间的数据复制设置超时时间,取值范围:0~1000000微秒,设置为0,则表示若只读实例出现延迟, 导致一致性策略不满足, 请求将一直等待。

官网1折活动,限时活动,即将结束,速速收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠
转转请注明出处:https://www.yunxiaoer.com/140552.html