看 v4.3.4 的文档写本地事务分为单日志流事务与单机多日志流事务,
OceanBase 不是一个 server 上只存在一个日志流的主副本吗?
请问什么情况下会有单机多日志流事务,日志流分裂的时候吗?
OceanBase 产生单机多日志流事务需要满足以下两个条件:
-
事务涉及的表所涉及的多个日志流,其 Leader 在同一个 Server 上。
-
日志流的 Leader 与 Session 创建的 Server 相同。
由于 OceanBase 数据库日志流的设计,单机多日志流事务本质上也是分布式事务。为了提高单机的性能,OceanBase 数据库对事务内参与者副本分布相同的事务做了比较多的优化,相对于传统两阶段提交,大大提高了单机事务提交的性能。
嗯嗯,这个看到了,我疑惑的是同一个server上不是应该只存在一个日志流的主副本吗,所有的leader同属于一个日志流,为啥还会涉及多日志流呀?
-
负载均衡:虽然每个分区 Leader 的分布决定了流量在每个节点上的分布,但是为了实现更好的负载均衡,OceanBase 数据库可能会将多个日志流的 Leader 分配到同一个服务器上。这种设计有助于充分利用服务器资源,避免某些服务器负载过重而其他服务器闲置的情况。
-
高可用性:即使所有 Leader 属于同一日志流,将它们分配到同一个服务器上也可以提高系统的高可用性。当某个服务器发生故障时,其他服务器上的副本可以迅速接管服务,确保系统的连续运行。这是因为 OceanBase 数据库通过 Paxos 协议实现了多数派 Clog 强一致同步持久化,即使少数派副本发生故障,剩下的多数派副本也能保证有最新的 Clog,从而避免数据损失。
-
灵活性:将多个日志流的 Leader 分配到同一个服务器上提供了更大的灵活性。例如,在进行系统维护或升级时,可以更方便地调整 Leader 的分布,以减少对业务的影响。
-
性能优化:对于单机多日志流事务,OceanBase 数据库进行了大量的优化,使得事务内参与者副本分布相同的事务性能显著提升。这意味着即使多个日志流的 Leader 在同一个服务器上,事务处理的性能依然可以得到保障。
综上所述,OceanBase 数据库允许同一个服务器上存在多个日志流的主副本,这是为了实现负载均衡、提高高可用性、增强灵活性和优化性能。这种设计使得 OceanBase 数据库能够在分布式环境中高效、可靠地运行。
收到,感谢