写点什么

架构师 3 期 3 班 -week6- 总结

用户头像
zbest
关注
发布于: 2020 年 12 月 31 日

关系型数据库

提高读性能通过集群,提高写性能通过分片

mysql 集群

一主多从的优点

  • 分摊负载(读操作)

  • 专机专用(不同的从结点可以给不通的业务提供服务)

  • 便于冷备

  • 高可用(读的高可用)



多主只能提供写的高可用,不能提高写的性能



mysql复制的注意事项

  • 主主复制不能同时提供写服务,可能会有逻辑冲突,只能当备份

  • 无法增加写的性能,只能提供写的高可用

  • 更新表结构会导致巨大的同步延迟(锁表,导致数据不一致)



mysql 分片



分片的方式

  • 硬编码

  • 映射表(通过外部的映射表记录数据存储在哪个结点)

  • 中间件(mycat)



分片的挑战

  • 处理逻辑复杂

  • 无法执行多片的联合查询

  • 无法使用事务

  • 动态扩容



为了扩容,在分片规划的时候可以多定义一些实例在同一个服务器上,扩容的时候只迁移部分实例



CAP 原理

当分区失效发生时,要么取消操作(保证数据一致性),服务不可用;要么继续写入(保证可用性),数据可能不一致;

对于一个分布式系统而言,网络失效一定会发送,也就是说分区容错性必须要保证。那么在可用性和一致性之间只能二选一。



当网络失效时,如果选择了一致性,系统可能会返回错误码或者超时,不能提供服务,即系统不可用;如果选择了可用性,那么系统总是可以返回数据,但是并不能保证数据一定是正确的。



所以,CAP原理更准确的说法是,在保证分区容错性的前提下,可用性和一致性无法同时满足



* 一致性:Consistency,一致性是说,每次读取的数据都应该是最近写入的数据或者返回一个错误(Every read receives the most recent write or an error),而不是过期数据,也就是说,数据是一致 的。

* 可用性:Availability,可用性是说,每次请求都应该得到一个响应,而不是返回一个错误或者失去响应,不过 这个响应不需要保证数据是最近写入的(Every request receives a (non-error) response, without the guarantee that it contains the most recent write),也就是说系 统需要一直都是可以正常使用的,不会引起调用者的异常,但是并不保证响应的数据是 最新的。

* 分区容错性:Partition tolerance,分区容错性是说,即使因为网络原因,部分服务器节点之间消息丢失或者延迟了,系统依 然应该是可以操作的(The system continues to operate despite an arbitrary number of messages being dropped (or delayed) by the network between no



BASE理论

BASE 是 Basically Available(基本可用)、Soft state(软状态)和 Eventually consistent (最终一致性)三个短语的缩写。

BASE理论是对CAP原理中AP系统的一种扩展。即通过牺牲强一致性来获得可用性。当出现故障时,允许部分不可用但要保证核心功能可用,允许数据在一段时间内不一致,但最终达到一致性状态。

满足BASE理论的事务,称之为柔性事务



ZK

ZK对Poaxs算法进行了改变,提出并实现了Zab协议



Zab主要包含:leader、follower两个角色



所有的提议(Proposal)都将由leader发起,leader负责维护Proposal的队列,并向所有follower发起投票,超过半数的follower通过投票,这个Proposal将被通过,并同步到所有follower。



主要作用:

* master 选举

* 配置信息管理

* 负载均衡和失效管理



搜索引擎基本架构

搜索引擎主要包含以下几个部分

* 数据来源:可以是爬虫、数据收集应用(日志收集之类)

* 数据处理:分词器、查询解释器

* 索引:构建倒排索引(可以在索引中加入频次和位置等信息)

* 结果处理:包括结果合并、排序、分页等结果的处理





Doris 案例分析

Doris 路由算法

预定义N个虚拟结点,创建虚拟结点和物理实例的映射关系,每个虚拟结点在物理实例上对应一个单独的存储(文件)方便集群扩容(缩容)时数据迁移。



Doris 高可用

采用双写策略,将集群分成2个group,在数据写入时要求同时写入2个group成功,否则判断写入失败。



结点失效

* 瞬时失效:网络波动等,瞬时连接失败,客户端重试

* 临时失效:短时间可以恢复且恢复后数据一致,等待(自动/人工)恢复

* 永久失效:无法恢复的,直接将机器下线。



失效恢复

在一个结点失效时,只写入未失效结点,并记录操作命令到redolog。

失效结点恢复过程中,失效结点只写入数据,不提供读服务,同时从redolog中,恢复失效这段时间的增量数据。





恢复完成后,AB结点恢复双写双读的服务模式。



注:如果是永久失效,加入新的结点,直接将未失效结点的文件copy到新的结点,再进行上面的失效恢复。



扩容

doris的扩容是复用失效的原理来实现的

集群分为AB两个group

1. 先让groupB失效

2. 然后在groupB中加入新的实例结点

3. 重新构建groupB的虚拟结点与实例结点的映射关系

4. 迁移分配给新实例结点的虚拟结点存储的文件

5. 整个groupB进去失效恢复阶段

6. groupB恢复完成,提供读写服务

7. 重复上面操作,给groupA扩容

8. 完成整个集群扩容



下面是扩容一个组的流程图





扩容完B 再扩容A 然后整个集群扩容完成



注:在使groupB失效到扩容完成恢复这段时间,如果groupA中的某个实例真的失效了,会存在不可用的情况,可以多加一个组来解决扩容中失效的可用性问题



发布于: 2020 年 12 月 31 日阅读数: 8
用户头像

zbest

关注

一个胖子 2020.11.04 加入

一个不正经的java程序员, 整天写着openresty和go的代码, 努力从键摄向非职业摄影师迈进, 快要溺死在内耗里的中年人, 胖子。

评论

发布
暂无评论
架构师 3 期 3 班 -week6- 总结