美文网首页
分布式理论架构设计

分布式理论架构设计

作者: 极速魔法 | 来源:发表于2022-04-19 13:23 被阅读0次

    IO模型

    • BIO 同步阻塞
    • NIO 同步非阻塞
    • AIO 异步非阻塞

    NIO核心组件

    • Selector
    // selectedKeys集合
    selector.selectedKeys()
    
    // 是否读就绪事件
    SelectionKey.isReadable();
    
    // 服务端注册到选择器,指定监听事件 OP_ACCEPT 客户端连接事件
    serverSocketChannel.register(selector,SelectionKey.OP_ACCEPT)
    
    • Channel
    • Buffer,本质上是一个可读写数据的内存块
    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 复用监听事件,收到事件分发给某个线程

    • 单Reactor 单线程
    • 单Reactor 多线程
    • 主从Reactor 多线程

    Netty

    ChannelPipeline

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

    ChannelHandlerContext

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

    粘包和拆包

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

    • 拆包 ,一个完整的包可能会被TCP拆分成多个包发送,
    • 粘包,也可能把多个小的包封装成一个大的数据包发送。

    解决方案:

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

    分布式理论

    分布式系统

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

    CAP定理

    • C 一致性,数据的强一致性,所有节点访问的都是同一份最新的数据副本
    • A 可用性,系统中非故障节点收到的每个请求都必须有响应
    • P 分区容错性, 遇到网络分区故障,仍然能对外提供服务

    分布式一致性协议

    NWR协议

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

    Raft协议

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

    Lease机制

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

    • Lease是颁发者对一段时间内数据一致性的承诺
    • 颁发者发出Lease后,不管是否被接收,只要Lease不过期,颁发者都会按照协议遵守承诺
    • Lease的持有者只能在Lease的有效期内使用承诺,一旦Lease超时,持有者需要放弃执行,重新申 请Lease。

    分布式系统设计策略

    • 心跳检测
    • 高可用
    • 容错性
    • 负载均衡

    相关文章

      网友评论

          本文标题:分布式理论架构设计

          本文链接:https://www.haomeiwen.com/subject/hmusertx.html