redis、zk、kafka、es分布式、扩缩容 横评(详解在注释里面,图片加载需要时间)
2023-07-05 09:43:34 0 举报
AI智能生成
知识要点和原理解析,详细信息和图片均在黄色图标的注释中,鼠标移动到黄色图标上即会显示,图片加载有时较慢。
作者其他创作
大纲/内容
通过分片和主从模式实现分布式
CLUSTER MEET 命令
集群的组群过程
均匀分配
使用 cluster addslots 命令来指定
哈希槽(slots)的划分
取模
指定
哈希槽(slots)的映射
哈希槽(slots)用来划分数据存储区域,即通过slots定位目标node,真正存储数据的还是redis node
集群分片
通过RDB + replication_buffer
异常情况
1、从节点与主节点建立连接时进行全量同步
2、主节点与从节点正常运行时的同步
环形数组repl-backlog-buffer
master-repl-offset
slave-repl-offset
实现方式
增量同步
特别注意
默认 1MB
repl_backlog_buffer:复制积压缓冲区
3、主节点与从节点连接断开后又重连时会进行增量同步或全量同步
主从同步
Master 和 Slave模式
数据复制
主观下线
注意
客观下线
状态维护-心跳检查机制
1、客户端连接任一实例,获取到slots与实例节点的映射关系,并将该映射关系的信息缓存在本地
2、将需要访问的redis信息的key,经过CRC16计算后,再对16384 取模得到对应的 Slot 索引
3、通过slot的位置进一步定位到具体所在的实例,再将请求发送到对应的实例上
定位数据所在节点
数据获取
扩容原理
slot迁移的其他说明
迁移slot和数据
扩容
忘记节点
缩容原理
缩容
Redis Cluster集群扩缩容
redis集群
zk
一台 kafka 服务器就是一个 broker
一个kafka集群由多个 broker 组成
一个 broker 可以容纳多个 topic的多个partition
broker
在kafka集群中,可以有无数的主题
生产者和消费者消费数据一般以主题为单位。更细粒度可以到分区级别
一个topic 可以划分为多个partition,分布到多个 broker上管理
Topic(主题)
partition 中的每条消息都会被分配一个递增的id(offset),每个 partition 是一个有序的队列,kafka 只保证按一个 partition 中的消息的顺序,不保证一个 topic 的整体(多个 partition 间)的顺序
每个partition都可以有多个副本
partition的表现形式就是一个一个的文件夹
每一个分区会有一个编号,编号从0开始
特征
保障 partition 的高可用
目的
轮询算法
leader replica分布
follower和leader绝对是在不同的机器,同一机器对同一个分区也只可能存放一个副本(包括自己)
处于同步状态的副本叫做in-sync-replicas(ISR)
follower通过拉的方式从leader同步数据
消费者和生产者都是从leader读写数据,不与follower交互
Partition的副本数
实现topic数据的负载均衡
对于 kafka 集群
提高并发度,提高效率
对于消费者
好处
Partition(分区)
Producer(生产者)
Consumer
Consumer Group
Group Coordinator
cluster、broker、topic、partition、消费者、费者组 关系
组件构成
一个主分区可以有多个副本
一个主题对应多个主分区
多个分区及副本分布在不同broker上
通过topic管理消息(broker部分)
通过分区策略将消息发送到目标partition
生产者
配合消费者组及分区策略从不同partition消费消息
1、当 Consumer Group 组成员数量发生变化(主动加入或者主动离组,故障下线等);
2、当订阅主题数量发生变化;
3、当订阅主题的分区数发生变化;
Rebalance 的触发条件
靠 Consumer 端的心跳线程
Rebalance 如何通知其他 consumer 进程?
触发与通知
重平衡Rebalance
消费者
分布式核心
是通过DelayedQueue来实现的
那这个定期发送如何实现呢?
heartbeat的实现原理
扩缩容会通过重平衡重新分配
kafka
高可用性
可扩展性
两个特性
green:所有主要分片和复制分片都可用
yellow:所有主要分片可用,但不是所有复制分片都可用
red:不是所有的主要分片都可用
集群健康值
Cluster - 集群
master 主节点
一个节点可以既为Master节点,又为Data节点,但是为什么不推荐?
data 数据节点
data_content 内容数据节点
...
节点角色
如果你设置了 node.roles,则节点只会分配你指定的角色。 如果不设置 node.roles,节点将被分配以上所有角色(除了voting_only 和coordinating角色例外)。
节点不等同于服务器,一个服务器上可以部署多个节点。
所有节点都知道集群中的所有其他节点,并且可以将客户端请求转发到适当的节点。
Node - 节点
Primary Shard(主分片)
Shard - 分片
1、服务高可用(容灾)
2、扩展性能
作用
Replication- 副本
分片
结构图
最基本常用属性
Field域
术语
每个段都是一个独立的可被搜索的数据集,并且段具有不变性,一旦索引的数据被写入硬盘,就不可修改。
为了提升写的性能,Lucene 并没有每新增一条数据就增加一个段,而是采用延迟写的策略,每当有新增的数据时,就将其先写入内存中,然后批量写入磁盘中。
本质上就是segment中加到内存的FST数据,因此segment越多,该内存越大
ES Segment Memory
提交点
Inverted Index
哪些情形下需要显式的指定store属性呢?
Stored Fields
Document Values
Cache
segment的数据结构
分段存储-segment
posting list的ID范围
数据结构
索引结构
索引过程
倒排索引
Lucene索引
lucene
Index - 索引
从6.0.0 版本起已废弃,一个索引中只存放一类数据
Type - 类型
Document - 文档
构成
扩缩容
es
分布式、扩缩容横评
0 条评论
回复 删除
下一页