1

考虑一个场景,一个 Web 请求发出 N 个数据库请求。如果我知道所有或大部分请求都可以发送给 db-readers。使用 Vitess 的架构,当有多个 reader 设置时,那些 N db 请求不会分发到不同的 db-readers 吗?

当不同的 reader 有不同的复制延迟时,有可能 N 个 db 请求导致结果不一致。

Vitess 有特殊的处理方法吗?或者应用程序应该如何处理这种情况?

4

1 回答 1

1

Vitess 现在支持副本事务。因此,如果您想从副本中进行一致的读取,我建议您使用这种方法。如果您不想使用交易,下面有更长的答案。

副本读取的一般概念是它是脏读。即使您点击了同一个副本,数据也可能与之前的读取有所不同。唯一的区别是,如果你回到同一个副本,时间会向前移动。

实际上,这与从不同副本读取旧数据的情况并没有太大区别。从本质上讲,您必须处理您读取的两条数据可能彼此不一致的事实。换句话说,如果您编写应用程序以容忍两次读取之间的不一致,那么该代码可能也会容忍回溯到时间的读取。但这一切都取决于情况。

于 2020-07-01T04:40:24.197 回答