前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java Netty 与 RPC

Java Netty 与 RPC

作者头像
JiahuiZhu1998
发布2023-06-14 19:48:32
2270
发布2023-06-14 19:48:32
举报

1. Netty 原理

Netty 是一个 高性能,异步的 NIO框架,支持 TCP,UDP,文件传输;所有IO操作都是异步非阻塞的

通过 Future-Listener 获取 IO结果

2. Netty 高性能

2.1 多路复用

将多个IO阻塞复用在用一个 Selector 阻塞上,支持单线程下同时处理多个requests

BIO 提供 Socket 和 ServerSocket,NIO提供 SocketChannel 和 ServerSocketChannel

其中 NioEventLoop 集成了 Selector 可以并发处理几千个Channel,由于读写非阻塞,充分提升 IO线程效率

Netty Server端交互
Netty Server端交互
Netty Client端交互
Netty Client端交互

2.2 NIO 异步

非阻塞IO 支持并发处理N个Client连接和读写,支持弹性伸缩,可用,优于BIO

2.3 零拷贝 (Direct Buffers 使用堆外直接内存)

  • 使用 Direct Buffers,使用堆外内存socket读写,不需要进行byte buffer 的 二次拷贝
  • 支持对组合buffer进行直接操作,不需要通过内存拷贝合并buffer
  • Netty 使用 transferTo 进行文件传输,支持文件直接发送避免通过内存拷贝读写

2.4 内存池

Netty 支持内存池缓冲区重用机制,避免较多的Heap对象的分配和回收

2.5 高效 Reactor 线程

  • Reactor 单线程模型
  • Reactor 多线程模型

2.6 无锁设计,线程绑定

Netty 使用串行无锁,支持修改NIO线程参数,支持多个串行化线程并行

无锁串行
无锁串行

2.7 高性能的序列化框架

  • 通过 NAGLE 算法将缓冲区小封包做成大封包,防止网络阻塞
  • 通过IP+Port 计算 hash值,然后进行cpu绑定,均衡软中断在多个CPU上

3. Netty RPC 实现

RPC: Remote Procedure Call (远程过程调用)

在Java中 动态代理就是一种 RPC方式

使用 Protobuf,Thrift,Avro等序列化解决方案搭建RPC框架

4. Netty 通讯过程

netty通讯过程需要解决线程暂停消息乱序的问题

  • 使用 AtmoicLong 生成唯一的requestID
  • 存放回调对象到 ConcurrentHashMap
  • Synchronized 获取回调对象callback的锁并自旋wait
  • 监听消息的thread获得消息,找到callback上的lock并且notify

5. RMI (Remote Method Invocation) 实现方式

  • 写一个 RMI接口,继承 java.rmi.Remote 接口
  • 写RMI实现类,继承 java.rmi.server.UnicastRemoteObject
  • 运行 RMI编译器,创建客户端stub类和服务端skeleton类
  • 启动一个RMI注册表
  • 在 RMI注册表注册服务
  • Client查找远程对象,调用远程方法

6. Protocol Buffer

结构化数据串行的工具

  • 序列化/反序列化/速度快 (编码,解码简单)
  • 数据压缩效果好 (采用 Varint, Zigzag 编码方式; 采用 T-L-V 数据结构)

7. Thrift (Apache Thrift)

Apache Thrift
Apache Thrift

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Netty 原理
  • 2. Netty 高性能
    • 2.1 多路复用
      • 2.2 NIO 异步
        • 2.3 零拷贝 (Direct Buffers 使用堆外直接内存)
          • 2.4 内存池
            • 2.5 高效 Reactor 线程
              • 2.6 无锁设计,线程绑定
                • 2.7 高性能的序列化框架
                • 3. Netty RPC 实现
                • 4. Netty 通讯过程
                • 5. RMI (Remote Method Invocation) 实现方式
                • 6. Protocol Buffer
                • 7. Thrift (Apache Thrift)
                相关产品与服务
                弹性伸缩
                弹性伸缩(Auto Scaling,AS)为您提供高效管理计算资源的策略。您可设定时间周期性地执行管理策略或创建实时监控策略,来管理 CVM 实例数量,并完成对实例的环境部署,保证业务平稳顺利运行。在需求高峰时,弹性伸缩自动增加 CVM 实例数量,以保证性能不受影响;当需求较低时,则会减少 CVM 实例数量以降低成本。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档