为了账号安全,请及时绑定邮箱和手机立即绑定

【学习打卡】第9天 多端全栈项目实战

标签:
MySQL

课程名称:多端全栈项目实战,大型商业级代驾业务全流程落地

课程章节:第二章

主讲老师:神思者


课程内容: 

    1.  mysql 集群基础概念


课程收获

    1. 数据切分

    MySQL单表数据超过两千万,CRUD性能就会急速下降,所以我们需要把同一张表的数据切分到不同的MySQL节点中。这需要引入MySQL中间件,其实就是个SQL路由器而已。

    MyCat、ProxySQL、ShardingSphere等等

    课程中选择了  ShardingSphere 而且还是Apache负责维护的,国内也有很多项目组在用这个产品,手册资料相对齐全,所以相对来说是个主流的中间件。

    https://img1.sycdn.imooc.com/62f4d68d0001d47504480348.jpg


规则是:

     在MySQL_1和MySQL_2两个节点上分别创建订单表,然后在ShardingSphere做好设置。如果INSERT语句主键值对2求模余0,这个INSERT语句就路由给MySQL_1节点;如果余数是1,INSERT语句就被路由给MyQL_2执行,通过控制SQL语句的转发就能把订单数据切分到不同的MySQL节点上

    将来查询的数据的时候,ShardingSphere把SELECT语句发送给每个MySQL节点执行,然后ShardingSphere把得到的数据做汇总返回给Navicat就行了。我们在Navicat上面执行CRUD操作,几乎跟操作单节点MySQL差不多,但是这背后确实通过路由SQL语句来实现的。



解释:

        我们可以将海量得数据切分到不同得mysql节点。但是时间日积月累 每个mysql里面得数据还是会超过几千万条, 这时候 就必须做归档。 对于一年以上得业务数据,可以看作过期得冷数据,我们可以把这部分得数据转移到归档数据库, 例如ToKuDB、MongoDB或者HBase里面(虽然没用过)

        这样MySQL节点就实现缩表了,性能也就上去了。

        比方说你在银行APP上面只能插到12个月以内的流水账单,再早的账单是查不到的。这就是银行做了冷数据归档操作,只有银行内部少数人可以查阅这些过期的冷数据


2.数据同步

    数据切分虽然能应对大量业务数据的存储,但是MySQL_1和MySQL_2节点数据是不同的,而且还没有备用的冗余节点,一旦宕机就会严重影响线上业务。接下来我们要考虑怎么给MySQL节点设置冗余节点。

    MySQL自带了Master-Slave数据同步模式,也被称作主从同步模式。例如MySQL_A节点开启了binlog日志文件之后,MySQL_A上面执行SQL语句都会被记录在binlog日志里面。MySQL_B节点通过订阅MySQL_A的binlog文件,能实时下载到这个日志文件,然后在MySQL_B节点上运行这些SQL语句,于是就保证了自己的数据和MySQL_A节点一致

    https://img1.sycdn.imooc.com/62f4d7b60001f9e504960270.jpg


    MySQL_A被称作Master(主节点),MySQL_B被称作Slave(从节点)

    主从同步模式里面,数据同步是单项的,如果你在MySQL_A上写入数据,可以同步到MySQL_B上面;如果在MySQL_B上面写入数据,是不能同步到MySQL_A节点的

    https://img1.sycdn.imooc.com/62f4d7dd0001f2a105010319.jpg


        于是我们要配置双向主从同步,也就是互为主从节点

        MySQL_A订阅MySQL_B的日志文件,MySQL_B订阅MySQL_A的日志文件


3.读写分离

        绝大多数Web系统都是读多写少的,比如电商网站,我们都是要货比三家,然后再下单购买。所以搭建MySQL集群的时候,就要划定某些节点是读节点,某些节点是写节点

        

        主从同步有个问题就是Master和Slave身份是固定,如果MySQL_1宕机,MySQL_2和MySQL_3都不能升级成写节点。那怎么办呢,给MySQL_1加上双向同步的MySQL_4节点。


    https://img3.sycdn.imooc.com/62f4d84000018f0d08060280.jpg


        ShardingSphere会轮询的方式给MySQL_1和MySQL_4发送写操作的SQL语句(INSERT、DELETE、UPDATE等);如果是查询语句,ShardingSphere会发给其余四个读节点去执行,这就实现了读写分离。假设MySQL_1宕机,ShardingSphere通过心跳检测能知道,于是所有的写操作就转发给MySQL_4。反之如果MySQL_4宕机,MySQL_1也会接替工作。在上面示意图中的6个MySQL节点,无论哪一个宕机都不影响数据库整体的使用,都有各自的冗余节点。


4. 数据分片

    https://img1.sycdn.imooc.com/62f4d8b0000189ba08070390.jpg


    

    前6个节点组成了第一个MySQL分片,后6个MySQL节点组成了另一个MySQL分片,两个分片之间没有任何的数据同步。这时候ShardingSphere把各种SQL语句路由给相应的MySQL分片,数据就实现了切分。



5.ShardingSphere

    ShardingSphere是开源免费的数据库集群中间件,自带了各种切分数据的算法和雪花主键生成算法,甚至我们自己也可以写代码订制新的算法,相对来说比MyCat扩展性更强。


https://img1.sycdn.imooc.com/62f4d921000168a414870737.jpg









点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
Web前端工程师
手记
粉丝
25
获赞与收藏
19

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消