27 Star 143 Fork 33

smartboot / aio-enhance

Gitee — Enterprise-level DevOps R&D management platform
Join Gitee
Clone or download
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README.md

aio_enhance 是一款无侵入式的 Java AIO 内核增强类库注意:这不是一款通信框架),解决 Oracle 官方 Java AIO 的设计缺陷,提供更高效、更稳定的通信能力。

aio_enhance 采用了 NIO 技术,再结合自研的异步线程模型重写了 AIO 实现逻辑,100% 兼容官方定义的接口。用户可自由选择 Oracle 官方提供的,或者 aio_enhance 增强的 AIO 实现,架构如下图。

除了线程模型的设计,我们还对 IO 调度模型做了一些改进。经由 aio_enhance 增强的通信服务,相较于官方 Java AIO 的吞吐能力会有 100% ~ 400% 的提升幅度。而相较业界主流 NIO 框架,aio_enhance 的性能表现高出 50% 以上。

一、项目背景

1.1 解决平台兼容性问题。

Java 原生 AIO 在 Mac 操作系统下存在兼容性问题,进行性能压测会偶发性的系统崩溃。

1.2 修复官方 AIO 架构缺陷

官方的 Java AIO 在底层架构设计上存在缺陷(参考:Java AIO通信模型)。在高并发场景下会出现比较严重的锁竞争现象,以致无法充分发挥机器性能。

1.3 优化 AIO 线程模型

虽然 官方 Java AIO 相较于 NIO 多了一层异步线程模型,极大降低了开发人员的编程难度。但是通信过程中的 accept、connect、read、write 等事件都是复用同一组线程资源,容易造成读写回调进入死锁状态。 AIO 通信框架在设计时需要特别关注这一点,但如果引入 aio-enhance 则无此顾虑。

二、适用场景

如果您符合以下几个条件,aio-enhance 会是一个不错的选择。

  • 基于 Java AIO 实现的通信框架,并且想要获得卓越的性能表现。如:smart-socket;
  • 对高并发、低延迟有严苛要求;

三、集成

步骤一:依赖

引入增强包:aio-enhance.jar。可以通过maven方式引入依赖,亦可直接下载 jar 包并导入classpath。

<dependency>
	<groupId>org.smartboot.aio</groupId>
	<artifactId>aio-enhance</artifactId>
	<version>1.0.6</version>
</dependency>

步骤二:启动

可以通过硬编码的方式设置系统属性,如下:

System.setProperty("java.nio.channels.spi.AsynchronousChannelProvider", "org.smartboot.aio.EnhanceAsynchronousChannelProvider");

也可在 java 启动命令行中设置,如下:

java -Djava.nio.channels.spi.AsynchronousChannelProvider=org.smartboot.aio.EnhanceAsynchronousChannelProvider xxx.jar

四、性能对比

为了更加客观的展现 Java 原生 AIO、NIO 以及通过 aio-enhance增强后的 AIO 的性能表现,我们选择 smart-socket 和 netty 在 TFB 上的测试结果做了比较。

  • aio:smart-socket
  • nio:netty
  • aio-enhance: smart-socket

4核CPU

源数据: aio: smart-socket aio-enhance: smart-socket nio: netty

28核CPU

源数据:aio: smart-socket aio-enhance: smart-socket nio: netty

五、总结

虽说在实验场景下 Java AIO 的表现不如 NIO,但是异步非阻塞的设计思想是值得被肯定的。况且在现实场景中,这点性能差别很容易就被业务逻辑所抹平,大家无需去计较孰优孰劣,适合自己的就是最好的选择。如今有了 aio-enhance 做备选,Java AIO本身设计上的缺陷也就没那么重要了。

关注公众号

Repository Comments ( 12 )

Sign in for post a comment

About

aio_enhance(音译:硬汉) 是一款无侵入式的 Java AIO 内核增强类库,解决原生 AIO 架构设计中存在的缺陷,提供更高效、更稳定的通信能力。 expand collapse
Java
Apache-2.0
Cancel

Releases

No release

aio-enhance

Contributors

All

Activities

load more
can not load any more
Java
1
https://gitee.com/smartboot/aio-enhance.git
git@gitee.com:smartboot/aio-enhance.git
smartboot
aio-enhance
aio-enhance
master

Search

181749 a2d7925e 1850385 181749 9f8568a7 1850385