redis数据结构

  1. String 字符串
  2. list 列表
  3. hash 散列表
  4. set 无序集合
  5. zset 有序集合

RocketMQ

  1. NameServer:命名发现服务,更新和路由发现broker;其在RocketMQ中起着中转承接的作用,是一个无状态的服务,
    多个NameServer之间不通信。
  2. Broker-Master:broker 消息主机服务器。
  3. Broker-Slave:broker 消息从机服务器。
  4. Producer:消息生产者。
  5. Consumer:消息消费者。

kafka
消费模型

  1. 基于推送模型的消息系统,由消息代理记录消费状态。消息代理将消息推送到消费者后,标记这条消息为已经被消费,
    但是这种方式无法很好地保证消费的处理语义。
    比如当我们已经把消息发送给消费者之后,由于消费进程挂掉或者由于网络原因没有收到这条消息,
    如果我们在消费代理将其标记为已消费,这个消息就永久丢失了。
    如果我们利用生产者收到消息后回复这种方法,消息代理需要记录消费状态,这种不可取。
    如果采用 Push,消息消费的速率就完全由消费代理控制,一旦消费者发生阻塞,就会出现问题。
  2. Kafka 采取拉取模型(Poll),由自己控制消费速度,以及消费的进度,消费者可以按照任意的偏移量进行消费。

高可靠分布式存储模型
在 Kafka 中保证高可靠模型依靠的是副本机制,有了副本机制之后,就算机器宕机也不会发生数据丢失

Kafka 一个 Topic 下面的所有消息都是以 Partition 的方式分布式的存储在多个节点上

ZooKeeper的特性

  1. 顺序一致性,从同一个客户端发起的事务请求,最终将会严格地按照其发起顺序被应用到Zookeeper中去。
  2. 原子性,所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,即整个集群要么都成功应用了某个事务,要么都没有应用。
  3. 单一视图,无论客户端连接的是哪个 Zookeeper 服务器,其看到的服务端数据模型都是一致的。
  4. 可靠性,一旦服务端成功地应用了一个事务,并完成对客户端的响应,那么该事务所引起的服务端状态变更将会一直被保留,除非有另一个事务对其进行了变更。
  5. 实时性,Zookeeper 保证在一定的时间段内,客户端最终一定能够从服务端上读取到最新的数据状态。

设计目标

  1. 简单的数据结构
  2. 可以构建集群
  3. 顺序访问: 对于来自客户端的每个更新请求,Zookeeper 都会分配一个全局唯一的递增编号,这个编号反映了所有事务操作的先后顺序
  4. 高性能: Zookeeper 和Redis一样全量数据存储在内存中,100%读请求压测QPS 12-13W。

ZooKeeper 可以做什么

  1. 分布式服务注册与订阅
  2. 分布式配置中心
  3. 命名服务
  4. 分布式锁

零拷贝
(复制拷贝)

  1. read 调用导致用户态到内核态的一次变化,
    同时,第一次复制开始:DMA(Direct Memory Access,
    直接内存存取,即不使用 CPU 拷贝数据到内存,而是 DMA 引擎传输数据到内存,
    用于解放 CPU) 引擎从磁盘读取 index.html 文件,并将数据放入到内核缓冲区。
  2. 发生第二次数据拷贝,即:将内核缓冲区的数据拷贝到用户缓冲区,同时,发生了一次用内核态到用户态的上下文切换。
  3. 发生第三次数据拷贝,我们调用 write 方法,系统将用户缓冲区的数据拷贝到 Socket 缓冲区。此时,又发生了一次用户态到内核态的上下文切换。
  4. 第四次拷贝,数据异步的从 Socket 缓冲区,使用 DMA 引擎拷贝到网络协议引擎。这一段,不需要进行上下文切换。
  5. write 方法返回,再次从内核态切换到用户态

零拷贝
第一次使用 DMA 引擎从文件拷贝到内核缓冲区,
第二次从内核缓冲区将数据拷贝到网络协议栈;内核缓存区只会拷贝一些 offset 和 length 信息到 SocketBuffer,基本无消耗。
是从操作系统的角度来说的。因为内核缓冲区之间,没有数据是重复的

  1. mmap 适合小数据量读写,sendFile 适合大文件传输。
  2. mmap 需要 4 次上下文切换,3 次数据拷贝;sendFile 需要 3 次上下文切换,最少 2 次数据拷贝。
  3. sendFile 可以利用 DMA 方式,减少 CPU 拷贝,mmap 则不能(必须从内核拷贝到 Socket 缓冲区)
  4. rocketMQ使用了mmap, kafka使用了sendFile

IO/NIO

  1. IO阻塞队列(BIO)
  2. NIO非阻塞队列

NIO模型

  1. Channel(通道),Buffer(缓冲区), Selector(多路复用器)
  2. IO是面向流的,NIO是面向缓冲区的

NIO优点:

  1. 通过Channel注册到Selector上的状态来实现一种客户端与服务端的通信。
  2. Channel中数据的读取是通过Buffer , 一种非阻塞的读取方式。
  3. Selector 多路复用器 单线程模型, 线程的资源开销相对比较小。

CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。
CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。