MySQL 8.3 Release Notes
组复制确保事务只有在大多数组成员收到并同意相对顺序后才能提交。这一方法在总写入量不超过组中任何成员的写入能力时效果良好。如果超过了,特别是某些成员的写入吞吐量小于其他成员,例如写入成员,那些成员可能会落后于写入成员。
某些成员落后于组会带来一些问题,特别是这些成员上的读取可能会外部化非常旧的数据。根据成员落后于组的原因,其他组成员可能需要保存更多或更少的复制上下文,以便能够满足慢速成员的潜在数据传输请求。
然而,在复制协议中有一种机制可以避免成员之间的距离太大,即流控机制。它试图实现以下目标:
-
使成员保持足够近,以便缓冲和去同步问题变得小;
-
快速适应变化的条件,如不同的工作负载或更多的写入成员;
-
为每个成员提供公平的写入能力份额;
-
不必要地减少吞吐量,以避免浪费资源。
鉴于组复制的设计,是否进行限制的决定可以根据两个工作队列来决定:(i) 认证队列;(ii)二进制日志 应用程序队列。只要其中一个队列的大小超过用户定义的阈值,限制机制就会被触发。只需配置:(i) 是否在认证器或应用程序级别进行流控,或者两者都进行;(ii) 每个队列的阈值。
流控依赖于两个基本机制:
-
监控成员以收集所有组成员的吞吐量和队列大小的统计信息,以便对每个成员的最大写入压力进行有根据的猜测;
-
限制尝试超出其公平份额的成员的写入。