一、数据库主从配置
一个主节点,一个从节点(跟主节点配置相同,高峰期16核64G,低峰4核8G),一个从节点(readonly节点,供印度和中国查询或者做数据分析)。
网络负载平衡(Network Load Balancing, NLB)技术就是将访问压力均衡分布到多台服务器上,以此提高整个服务器集群的响应能力。(为什么需要NLB?因为mysql-proxy是高可用的,需要选择一个节点)NLB是4层负载均衡,跟ALB 7层负载均衡不同。
mysql-proxy本身是主从模式,是高可用的,负责路由到主节点还是从节点,以及主节点发生故障时从节点切换为主节点。(为什么需要proxy?因为主从节点需要路由,故障时需要切换)
每个物理机有两个数据库。
每个数据库都是主从模式,主节点负责读写,一个从节点负责热备,另外一个从节点配置较低负责日常查询。
二、数据源配置
配置在bootstrap.yml,配置4个物理机,8个数据库。
三、读取数据源配置
1、SpringFactoriesLoader.loadFactoryNames()方法将会从calssptah下的META-INF/spring.factories中读取key为org.springframework.context.ApplicationListener的值,并以集合形式返回。
2、spring.factories文件定义监听者: org.springframework.context.ApplicationListener=com.alicp.middleware.shardingbatis.starter.config.ShardingBatisListener,Spring启动会自动加载这个配置文件, 自动加载ShardingBatisListener, 自动执行onApplicationEvent方法。
3、onApplicationEvent执行过程中,配置信息会被加载到spring容器里面。
4、onApplicationEvent执行过程中会调用initShardingBatis -> initBusinessBean -> initLogicDataSource -> beanFactory.registerBeanDefinition("dataSource", beanDefinition),这样数据源就被加载到了容器中。
四、使用方注入SqlSession:
@Qualifier("delegatedSqlSession")
private SqlSession sqlSession;
继而使用getSqlSession().selectOne("OrderDoMapper.countActionsByClientId", orderQuery); 进行查询。
五、SqlSession的注入:
initBusinessBean方法同样会initSqlSessionFactory();,此方法会注入sqlSession:beanFactory.registerBeanDefinition("sqlSession", beanDefinition);。