分布式理论架构设计

2022-04-19  本文已影响0人  极速魔法

IO模型

NIO核心组件

// selectedKeys集合
selector.selectedKeys()

// 是否读就绪事件
SelectionKey.isReadable();

// 服务端注册到选择器,指定监听事件 OP_ACCEPT 客户端连接事件
serverSocketChannel.register(selector,SelectionKey.OP_ACCEPT)
ByteBuffer allocate = ByteBuffer.allocate(10);
// 当前索引位置,可以添加的位置,起始位置0
allocate.position();

// 当前索引位置改为1
allocate.position(1);

// 最多能操作到哪个位置索引
allocate.limit();

// 还有多少个可以操作的个数
allocate.remaining();

// 切换读模式,起始位置0,结束位置 limit(),
// 结束位置是原来position()位置
allocate.flip();

// 切换写模式,起始位置0,结束位置 capacity(),覆盖原来的值
allocate.clear();

// 位置开始设置为0
allocate.rewind();

// 写入数据
allocate.put("abc".getBytes());

Reactor模式

使用IO 复用监听事件,收到事件分发给某个线程

Netty

ChannelPipeline

ChannelHandler的集合,负责处理和拦截 inbound outbound的事件和操作,贯穿Netty的责任链

ChannelHandlerContext

事件处理器上下文对象,Pipline链中的实际处理节点。ChannelHandlerContext包含一个ChannelHandler,也绑定了ChannelPipeline和Channel的信息

粘包和拆包

TCP流,没有界限的一串数据。TCP根据缓冲区的对包进行划分。

解决方案:

  1. 消息长度固定,读取定长的报文,就认为读到了一条完整消息 FixedLengthFrameDecoder
  2. 换行符作为消息结束符 LineBasedFrameDecoder
  3. 特殊的分隔符作为消息的结束标志 DelimiterBasedFrameDecoder
  4. 消息头中定义长度字段标识消息的总长度 LengthFieldBasedFrameDecoder

分布式理论

分布式系统

一个业务拆分成多个子业务,分布在不同的节点,构成分布式系统

CAP定理

分布式一致性协议

NWR协议

N:在分布式存储系统中,有多少份备份数据
W:代表一次成功的更新操作要求至少有w份数据写入成功
R: 代表一次成功的读数据操作要求至少有R份数据成功读取
满足W+R>N,对于客户端就是强一致性的

Raft协议

引入主节点,通过竞选确定主节点。
节点类型:Follower、Candidate 和 Leader

Lease机制

租约机制,维护分布式系统数据一致性 的一种常用工具。

分布式系统设计策略

上一篇下一篇

猜你喜欢

热点阅读