欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Netty 简介 - 高性能原理 + 关键组件模型

程序员文章站 2022-05-06 20:17:41
...

Netty > java.nio + java.net

Netty 简介 - 高性能原理 + 关键组件模型
            
    
    博客分类: Java netty 
 

Netty 是一个 NIO 框架。
它的设计强调了“分离关注点”(Separation Of Concerns)。
它通过事件机制,将业务逻辑与无关的技术逻辑隔离,通过抽象层填补 基础平台 和 业务开发 之间的鸿沟。
Netty 极大地简化了网络编程(如,TCP/UDP socket 服务器)。可以利用它更快速容易地开发网络应用。

 

Netty 如何实现高性能

Netty 没有 Java 核心类库那么强烈的通用性、跨平台等负担。
它针对性能等特定目标、及Linux等特定环境,采用了极致的优化手段。
 

  • 通过更优雅的 Reactor 模式实现灵活的线程模型
    利用 EventLoop 等机制,高效地管理大量的 Channel
  • 充分利用 Java 的 Zero-Copy 机制等多种技巧,从多种角度降低内存分配和回收的开销。如:
    池化的 Direct Buffer 可提高IO性能、减少对象的创建与销毁。
    利用反射直接操纵 SelectionKey

  • 使用更多本地代码。如,直接利用 JNI 调用 Open SSL,性能比 Java 内建的 SSL引擎更好。
  • 通信协议序列化 等其它方面的优化。

Writing Highly Performant Network Frameworks on the JVM - A Love-Hate Relationship
 

如,Netty 的 ChannelOutboundBuffer 中利用 AtomicLongFieldUpdater 而不是直接使用 AtomicLong。

public final class ChannelOutboundBuffer {
  private static final AtomicLongFieldUpdater TOTAL_PENDING_SIZE_UPDATER =
      AtomicLongFieldUpdater.newUpdater(ChannelOutboundBuffer.class, "totalPendingSize");

  private volatile long totalPendingSize;
  ...
}

 

借鉴意义

虽然 Netty 的很多优化技巧对于追求极致性能有一定借鉴意义,但一般业务开发中要谨慎采用
如,直接调用本地方法会对加大内存管理的难度,不同平台上部署应用时兼容性风险较大。
不同版本的JDK中,某些 Unsafe 方法的命名空间就不同。

 

使用 Netty 时的关键组件

基于官方代码示例 EchoServer


Netty 简介 - 高性能原理 + 关键组件模型
            
    
    博客分类: Java netty 
 

  • ServerBootstrap:服务端程序入口。Netty通过这种机制简化服务端的生命周期管理。
    创建 Channel、注册端口、绑定 Handler 等。
    客户端对应的是 Bootstrap
  • Channel:Netty 中的各类 Channel 针对应用开发,提供了相对易用的抽象方法。
    Channel 和 Selector 等概念依然是 Netty 的基础组件。
  • EventLoop:这是 Netty 处理事件的核心机制。它负责 注册感兴趣的事件、调度Handler 等。
  • ChannelFuture:这是 Netty 实现异步IO 的基础。它保证了同一个 Channel 操作的调用顺序。
    Netty 扩展了 Java 标准 Future,提供了针对特定场景的 Future
  • ChannelHandler:这是放置业务逻辑的地方。
  • ChannelPipeline:这是 ChannelHandler 链条的容器。

Netty 简介 - 高性能原理 + 关键组件模型
            
    
    博客分类: Java netty 
 

 

  • Netty 简介 - 高性能原理 + 关键组件模型
            
    
    博客分类: Java netty 
  • 大小: 53.8 KB
  • Netty 简介 - 高性能原理 + 关键组件模型
            
    
    博客分类: Java netty 
  • 大小: 54.3 KB
  • Netty 简介 - 高性能原理 + 关键组件模型
            
    
    博客分类: Java netty 
  • 大小: 78.5 KB
相关标签: netty