可扩展性

负载均衡

一主多备间的负载均衡

最常见的复制拓扑结构就是一个主库加多个备库。我们很难绕开这个架构,许多应用都假设只有一个目标机器用于所有的写操作,或者所有的数据都可以从单个服务器上获得。尽管这个架构不太具有很好的可扩展性,但可以通过一些办法结合负载均衡来获得很好的效果。

  • 1.功能分区
    对于特定的目的可以通过配置备库或一组备库来极大地阔扎脑容量。一些比较常见的功能包括报表、分析、数据仓库,以及全文检索
  • 2.过滤和数据分区
    可以适用适用复制过滤技术在相似的备库上对数据进行分区。只要数据在主库上已经被隔离到不同的数据库或表中,这种方法就可以奏效。不幸的是,没有内建的八幡在行级别上进行复制过滤。你需要适用一些独创性的技术来实现这一点,例如适用触发器和一组不同的表。即使不把数据分区到各个备库上,也可以通过对读进行分区而不是随机分配来提高缓存效率。例如,可以把对以字母A-M开头的用户的读操作分配给一个给定的备库,把N-Z开头的分配给另外一个。这能够更好地利用每台机器的缓存,因为分离读更可能在缓存中找到相关的数据。最好的情况下,当没有写操作时,这样适用的缓存相当于两台服务器缓存的综合。相比之下,如果随机地在备库上分配读操作,每个机器的缓存本质上还是重复的数据,而总的有效缓存效率和一个备库缓存一样,不管你有多少台备库。
  • 3.将部分写操作转移到备库
    主库并不总是需要处理写操作中的所有工作。你可以分解写擦汗寻,并在备库上执行其中的一部分,从而显著减少主库的工作量
  • 4.保证备库跟上主库
    如果要在备库执行某种操作,他需要即使知道数据处于哪个时间点——哪怕需要等待一会儿才能到达这个点——可以适用函数MASTER_POS_WAIT()阻塞直到备库赶上了设置的主库同步点。另一种替代方案是复制复制心跳来检查延迟情况
  • 5.同步写操作
    也可以使用MASTER_POS_WAIT()函数来确保写操作已经被同步到一个或多个备库上。如果应用需要模拟同步复制来确保数据安全性,就可以在多个备库上轮流执行MASTER_POS_WAIT()函数。这就类似创建了一个"同步屏障",但任意一个备库出现复制延迟时,都可能花费很长时间完成,所以最好在确实需要的时候才适用这种方法(如果你的目的只是确保某些备库拥有时间,可以只等待一台备库接收到时间,MySQL5.5增加了半同步复制,能够支持这项技术)
上一篇:概率论中:二项分布和泊松分布有什么区别


下一篇:代码随想录打卡第十五天