架构学习提炼笔记(三):高性能架构设计技巧——读写分离
读写分离的基本原理是:将数据库读写操作分散到不同的节点上。
读写分离的基本实现是:数据库服务搭建主从集群,一主一从,一主多从都可以,数据库主机负责读写操作,从机只负责读操作。主机通过复制将数据同步到从机,每台数据库都存储了所有的业务书,业务出服务器将写操作发给数据库主机,将读操作发给数据库从机。
读写分离操作主要有两个复杂度引入:
1.主从复制延迟。
常见解决思路是:
a.写操作后的读操作指定发给数据库主服务器。但是这样和业务绑定比较深,对业务的深入和影响比较大。
b.读从机失败后,再读一次主机。可从数据库访问层统一封装,代价较小,但可能造成对主机压力较大的风险
c.关键业务读写全部指向主机,非关键业务采用读写分离
2.分配机制
常见解决思路有:代码封装和中间件封装。
代码封装是通过在代码中抽象一个访问层,实现读写操作分离和数据库链接管理,例如,基于 Hibernate 进行简单封装,就可以实现读写分离,基本架构图为:
这种方式实现简单,可以根据业务做较多定制,但是开发工作量较大,主从切换时可能需要重启。
中间件封装,是指通过一套独立的系统,实现读写操作分离和数据库链接操作。对于业务服务器来说,中间件服务器就是数据库操作服务器,所有的操作都被其代理了。基本架构图是:
中间件的方式,实现非常复杂,服务器性能要求也很高,但是它可以实现支持多编程语言和业务服务器无感知切换,如果有足够的人力财力以及多编程语言的要求,可以采用中间件方式实现读写分离。一般推荐直接使用代码封装的方式。