今天五一,祝大家开心。
数据库一主多从,是很经典的结构,对于容灾、可扩展性和高可用性,都是有好处的。
一主多从,依赖于主从复制,下面是主从复制的逻辑图:
主从复制后,可以认为,从库和主库的内容是"一致"的。 然而,由于主从复制需要时间,向主库写入数据后,如果直接从从库读取,很可能读不到最新的值,但是,对读实时性要求不高的业务场景,读写分离是没有问题的。
读写分离的逻辑图如下:
最近,项目中的一个读数据库操作,遇到了一些性能瓶颈,在主库上,有一个select操作经常有毛刺。经评估,在一些场景下,可以进行读写分离,于是将大量的读请求调度到从库,在主库上留下写请求和少量的读请求,可以看到,主从分离后,主库上的少量读请求耗时立即下降且稳定(数据已经脱敏):
而且,实际也发现,调读到从库上后,大量读请求的耗时也有下降。自然地,主库上的写请求的性能也会提升。读写分离的好处,可见一斑。
另外,对于应用服务来说,也可以做读写分离。比如,某服务既提供读接口,又提供写接口,我们可以让主调方做读写分离,这样就能针对读和写进行不同的伸缩策略,提升了扩展的弹性。
数据库的主从复制和读写分离,先说到这里了。