架构师训练营第 1 期第 6 周学习总结
本周主要学习了分布式关系数据库和CAP原理。
MySQL复制有主从复制和主主复制。其中主从复制是写命令记录到Binlog,从服务器复制Binlog到自己的服务器,Relay log,而SQL执行线程会从Relay log读取,执行命令。通常是一主多从复制。好处有分摊负载,专机专用,便于冷备份。高可用方面的考虑是在主服务器宕机时,从服务器可以写入。其中主主复制是A的binlog同步到B的relay log,而B的binlog也同步到A的relay log去。主要用于失效恢复。A和B都有主从复制。需要注意的是,不可以同时向两个服务器写入,否则会导致数据重复。读并发了,但写没有增加,存储能力也没增加。更新表结构会导致巨大的同步延迟,所以update等需要人工实现,而不是复制方式。
MySQL的数据分片是一张数据库的表,分别存到不同数据库中。有几种实现方式,硬编码的方式是用两台服务器,使用奇偶进行分片。比如用户ID。映射表外部存储的方式是通过用户ID,查找到server_no,比硬编码灵活很多。挑战是需要额外代码,而且无法执行多分片的联合查询,无法使用数据库的事务,随着数据增长,如何增加更多服务器成为一个问题。
数据库中间件的设计大同小异,Mycat, Cobar,系统架构和关键设计很相似,Cobar是最早的,最关键是路由模块,决定路由到哪里去。增加新服务器时,使用数据迁移。规则是,一开始比较大的N,对N取模,比如现有2台服务器,直接对100取模。连接也是100个。启动100个schema,也就是数据库实例。
只要修改服务器IP地址的配置即可。先迁移数据到新服务器,再更新路由即可。
数据库部署方案有:单一服务与单一数据库,应用拆分,类目和用户数据库拆分开,业务分库,综合部署,也做业务分库,用户数据库每个分片,都有主从复制。
评论