架构师训练营 - 学习总结 第 6 周
1、本周先回顾了一致性哈希的重要程度和场景:
一致性哈希,常用于分布式集群,解决当集群机器横向扩展时,数据大批量访问不一致的问题,比如缓存集群或数据库集群。
初始化操作步骤:
建环,服务器节点放入环(包含虚拟节点),key的存放和查找,顺时针查找最接近的
2、数据分片方案
目标:数据量太大,尤其是单表,写操作的压力特别大,
要把单表拆分成多个分片,降低单表或单机的写压力。
方案1:硬编码实现,比如 id为单数访问服务器1,双数访问服务器2;
方案2、映射表,在外部存储每个id与服务器的映射关系,映射表数量也变的非常大,而且要访问2次,增加时间和代码复杂度;
方案3:用分布式数据库中间件,用中间件进行数据分片和路由;
中间件有MyCat、Cobar(对代码透明,通过SQL判断分片数据库在哪里)、Sharding
分布式数据库中间件,一般都提供 跨分片查询能力,自动数据合并能力。
3、数据库集群一般不使用一致性哈希,而是直接使用余数哈希,并且尽量避免数据迁移:
实践:一般在每个节点放置多个实例,在需要水平扩容时,直接迁移部分实例到新的服务器上;
所以,一开始就要考虑清楚未来需要多少分片,因为不允许扩容实例了。
如果真的超过一开始的分片数量,必须扩容分片,一般先增加从库,恢复数据库的完整备份,再用binlog追加,然后双写,再修改分片。
4、拆分业务,自然数据库也就按业务分库了
需要注意的是,避免直接访问其它业务的数据库,要通过API访问。
然后根据业务不同,数据量大的业务要分片,数据量小的不分了,直接走主从即可。
5、讲述了CAP原理、Base理论
CAP是分布式系统的设计理论基础,而Base强调的是最终一致性。
版权声明: 本文为 InfoQ 作者【水边】的原创文章。
原文链接:【http://xie.infoq.cn/article/4df170d1ecd9286457fecf7ee】。文章转载请联系作者。
评论