Week6 学习总结

用户头像
wyzwlj
关注
发布于: 2020 年 07 月 12 日

一、如何解决数据库写压力大问题

1、 读压力大 VS 写压力大

    1)读压力大问题的解决方式

        a. 使用缓存

        b. 数据库主从复制

    2)写压力大问题的解决方式

        a. 消息队列:可以解决写压力分布不均匀的问题,无法解决写压力始终较大的问题

        b. 数据分片&分布式数据库

2、数据分片

    1)解决的问题:数据量大、用户的写请求量大,超出服务器的压力

    2)如何分片

        a. 水平拆分:对数据表进行切分,避免单表数据量过大,对拆分的表分开部署

        b. 垂直拆分:按业务对数据分库+拆分的数据库分开部署

    3)如何实现分片&查询

        a. 硬编码实现分片:数据分片和路由算法,写在代码中

        b. 映射表外部存储:数据分片和路由算法写在配置文件中,应用程序加载配置文件

c. 分布式数据库中间件:应用程序调用中间件实现数据分片和路由处理,应用程序对分片过程无感 知,eg. MyCat

    4)分片算法&集群如何伸缩

        a. 余数hash法:需要一条一条的遍历数据,重新计算hash值,迁移的数据量较大

        b. 一致性hash算法:需要一条一条的遍历数据,重新计算hash值,迁移的数据量较少,但是处理过程仍然比较复杂

        c. 实践场景

            ->使用算法:余数hash算法

            ->具体操作:

                一个数据库中部署了多个schema示例;

                伸缩时,将schema迁移到新的服务器上(数据库主从复制)

                数据迁移完成后,再修改路由配置,并将原有的schema删除

            ->注意事项:一开始应该部署多少个schema呢,怎样设置合适的个数?需要在一开始做好容量规划

二、数据库演进

1、演进过程

    1)单一数据库

    2)数据库读写分离:主从复制

    3)业务分库:不同的业务使用不同的数据库

    4)综合部署

2、分布式数据库

    1)为了解决什么问题

    2)引入了什么新的问题:高可用问题&数据最终一致性问题

        a. CAP原理:

            ->一致性C:每次读取数据时,要么返回正确的数据,要么返回错误,不能返回一个过期的数据

            ->可用性A:每次请求一定要有返回,不能返回错误或失去响应,但是允许返回不正确的数据

            ->分区耐受性P:因为网络原因导致部分节点之间的消息丢失或延迟时,要保证系统依然可用

            ->总结

                    C和A之间是矛盾的,而对分布式系统而言,P是必须要满足的,所以分布式系统只能同时满足CP或AP,不能同时满足CAP

                    C和A之间并非是绝对的对立关系,不是说降低C就一定能提高A,或降低A就一定能提高C。设计时,需要考虑保证可用性的同时,尽可能提高一致性,从而引出BASE理论

        b. BASE理论

            ->基本可用:Basically Avaliable,即系统出现故障时,允许损失部分可用性,如响应时间上的损失或功能上的损失

            ->弱状态:Soft state,即允许系统中的数据存在中间状态,允许多个服务节点之间的数据同步过程存在延时

            ->最终一致性:Eventually consistent,多个节点上的数据副本,经过一段时间的同步后,最终能够达到一致

        c. 最终一致性问题解决方法

            ->时间戳+集群间时间同步

            ->客户端解决冲突

            ->投票解决冲突

3、NoSQL数据库

    1)HBase & LSM树

    2)Doris案例分析



三、分布式一致性问题--Zookeeper

1、分布式系统的高可用问题

    1)类似于MySQL的主主复制,需要设置备份的主节点

    2)主节点&备份主节点之间,需要设置一个仲裁节点,进行判主处理

    3)仲裁节点又需要保证高可用.......

2、Zookeeper如何解决高可用问题中的仲裁节点问题

    1)Paxos算法

    2)Zab协议

3、Zookeeper分析

    1)架构的分析

    2)树状记录结构分析

    3)API

4、使用场景

    1)配置管理

    2)选master

        a. 节点尝试向zookeeper将自己注册为leader

        b. 临时节点

    3)集群管理

        a. 负载均衡&失效转移

        b. 服务节点的注册&发现

        c. 负载均衡节点的观察&监听



用户头像

wyzwlj

关注

还未添加个人签名 2018.05.02 加入

还未添加个人简介

评论

发布
暂无评论
Week6 学习总结