架构师 3 期 3 班 -week6- 总结
关系型数据库
提高读性能通过集群,提高写性能通过分片
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中的某个实例真的失效了,会存在不可用的情况,可以多加一个组来解决扩容中失效的可用性问题
版权声明: 本文为 InfoQ 作者【zbest】的原创文章。
原文链接:【http://xie.infoq.cn/article/1fce50312e00b677517945d5c】。未经作者许可,禁止转载。
评论