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