17.3.3 Using Replication for Scale-Out 使用复制扩展

17.3.3 Using Replication for Scale-Out 使用复制扩展


你可以使用复制最为扩展解决方案,也就是说,你需要分散数据库的查询负载到多个数据库服务器:

因为复制分布在一个master到一个或者多个slave,


使用复制用于扩展最好的环境是你有大量的读和少量的写/更新,

很多的Web站点满足这种类型,  用户在浏览网站,阅读文章,帖子或者查看产品。


更新只发生在会话管理,或者购买或者添加评论到一个论坛。


复制在这种情况下,可以让你分散读到多个复制slave,  同时让你的web server  和复制master通讯

当写是需要的,在图17.1中,可以看到这个场景的示例复制布局,“使用复制来提高扩展的性能”。

Figure 17.1 Using Replication to Improve Performance During Scale-Out



如果你的代码的一部分, 负责数据库的访问可以被正确的 抽象/模块化,




转换来运行复制设置应该是很顺利的, 改变你的数据库访问的实现,发送所有的写到master,




发送读到master或者slave. 如果你的代码没有这个层级的抽象,建立一个复制系统




给你机会和动力来清理它, 创建一个实现下列功能的封装库或模块:


safe_writer_connect()


safe_reader_connect()


safe_reader_statement()


safe_writer_statement()






safe_ 在每个函数名字意味着函数负责处理所有的错误状况,你可以使用不同的函数名字。




重要的是要有一个统一的接口,用于连接读、写、读、写。




然后转换你的客户端代码使用封装的库, 这个可能是痛苦的和可怕的过程。




但是它有长期的回报,所有的应用使用这个方法能利用master/slave 配置,


即一个调用多个slave.  代码更容易维护,并增加的故障排除选项是很小的,




你只需要修改一个或者2个函数,比如, 记录每个语句执行时间,哪个语句给你一个错误:














原文地址:https://www.cnblogs.com/hzcya1995/p/13351302.html