读写分离分类:
分为客户端和中间件。
客户端:(非proxy)应用层(去中心化)
开源代表:TDDL(淘宝) sharding-jdbc(当当)
优点:
1.不需要中间件(不需要运维,高可用)
2.支持任何数据库
3.数据源切换方便
缺点:
1.增加额外的开发工作
2.程序侵入性
3.不能动态增加数据源
proxy(代理)中间件(中心化):
开源代表:mycat atlas mysqlProxy
优点:
1.动态增加数据源,对程序没影响,也不需要重启
2.不需要应用层开发读写分离的代码
3.应用层不需要关注数据库方面的事情(不关心master/slave)
缺点:
1.依赖中间件
2.proxy中转的,性能会下降
3.维护成本高
读写分离和主从复制的关系:读写分析是建立在主从复制的基础上的
AOP区分数据源读写问题: 注意读写分离和区分数据源不是一回事
如果使用AOP实现读写分离则会出现问题。
例如:
Insert(select) orders
在下单时,需要查询库存
在AOP service 上的方法时,没法区分 其中包含了select,这时就没法区分读写分离了