在使用缓存后,使大部分的数据读操作访问都可以不通过数据库就能完成,但是仍有一部分读操作(包括未命中缓存的,和缓存过期的)和全部的写操作需要访问数据库,当网站的访问量继续增加后,数据库会因为负载压力过高导致成为网站的性能瓶颈。
目前大部分的主流数据库都提供了主从热血功能,通过配置两台数据库的主从关系,可以将一台数据库服务器的数据同步到另一台服务器上,网站利用数据库的这一功能,可以实现数据库的读写分离,从而改善数据库的负载压力。
应用服务器在写数据的时候,访问主数据库,主数据库通过主从复制机制将数据更新同步到从数据库,这样当应用服务器读数据的时候,就可以通过从数据库获得数据,为了便于应用程序访问读写分离后的数据库,通常在应用服务器端用专门的数据访问模块(也叫数据访问层),使数据库读写分离对应用透明。
架构如下图:
总结:数据库读写分离缓解了数据库的压力,但同时会带来两个问题:
1,数据同步的问题。一般利用数据库自带的数据复制机制解决,可以参考:http://note.youdao.com/noteshare?id=1245e28ab69dc951bb9df9f53e9abc16&sub=E1F1B4AAEB9140D6B37B1998163DBD0B
2,应用程序对于数据源选择的问题。对于应用程序来说,后面的写操作全部要走主库,而读操作要走从库。这些操作一般通过中间件数据访问层来完成。