🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
>[success] ### 业务上的分布式 * 新增一个用户, 需要调多个服务(用户服务 -> 新增用户, 学校服务 -> 新增学生, 班级服务-> 新增学生 ) * 如果这些操作都在同一个服务, 那么用mysql事务就可以解决 * 如果这些操作不在同的服务, 就需要一个中间键去维护(维护服务的成功和失败) >[success] ### 程序上的分布式 * mysql, redis 分布式 * 相同的数据库, 表 的实例分布式不同的机器上, 数据分片存放 * mysql cluster 提供分布式集群 * mysql router 主从, gtid 主从 --- * 早期没有mysql cluster的时候, 通过分库分表解决高并发 --- * mycat 数据库中间键, 1.x主打分库分表; 多个物理数据库, 虚拟成一个逻辑库 * 分库分表时, 用账号密码连上数据库, 每个数据库看到的是不一样的 * 分布式时, 用账号密码连上数据库, 每个数据库看到的是一样的, 只是存放的数据不一样 --- 现在流行微服务, 拆得比较散了, 再加个主从就够用了 ``` 1、双主配置一般是数据流量大的情况下用,但是一般都是keepalived+双主,这种环境,他的方法就是,两台主机存储各自独立,互为主备,负载负责高可用,如果挂一台,另外一台就顶上去,好处就是挂一台无所谓,另一台依然可以提供服务,但是,注意:如果存储独立,一但发生脑裂,那就要停负载,检查双主数据是不是同步,如果其中一台的日志断了,那就非常麻烦,最好的情况是,只要启起来故障的那台,执行start slave;开始备机同步,就ok,最差的情况是,故障机安全完蛋了,用做正常机的库做异机恢复,把同步重配一遍,要用软件来比两个库的数据一致性无问题,开负载,业务继续(注意:阿里云不支持keepalived类似的所有带vip的软件,它有自己的负载均衡,你买一台不要钱,只在内网使用); 2、主备是用的非常多的情况,我习惯一主三备,在备机下边做一个慢10分钟同步的级联,再用中间件做读写分离,mycat maxscale,再加上mha高可用,写在主,读在备,如果主挂了,mha会把其中的一台备机提升为主,然后把其他的两台设置为备,就把故障的主库移除,慢10分钟的级联就是,如果在主库执行了一个语句错了,如(drop table),并没有备份的情况下,10分钟之内发现了,那就在级联备机把这张表拿出来,然后把binlog中的语句拿出来,去掉drop table(执行错了的语句),然后在主库恢复一下就可以了,推荐这种做法,大多的互联网公司都这样做,不过也有不同场景不同实施的方案,这个要自己看; ``` --- 微服务 主从高可用 (读写分离功能需要在代码层上实现) 每个服务独占一个数据库, 再对并发量高的数据库做主从,