我正在选择一个网络库来实现一个不能浪费任何微秒的客户端/服务器系统。它将实现自己的协议以发送和接收消息。我正在寻找一个很好的NIO框架,可以让我轻松开发服务器和客户端,而不必过多关注底层选择器细节。每个人都推荐Netty,但在承诺使用框架之前,我想尝试另外两种或三种替代方案。我不太喜欢Netty处理ByteBuffers的方式,因为它使用自己的ByteBuf实现和引用计数。有人能分享一下你的想法和替代方案吗?
我正在选择一个网络库来实现一个不能浪费任何微秒的客户端/服务器系统。它将实现自己的协议以发送和接收消息。我正在寻找一个很好的NIO框架,可以让我轻松开发服务器和客户端,而不必过多关注底层选择器细节。每个人都推荐Netty,但在承诺使用框架之前,我想尝试另外两种或三种替代方案。我不太喜欢Netty处理ByteBuffers的方式,因为它使用自己的ByteBuf实现和引用计数。有人能分享一下你的想法和替代方案吗?
假设您确实想要节省每一微秒。大多数应用程序没有如此严格的要求。
如果您想要节省微秒,您将需要使用繁忙等待非阻塞NIO线程在专用CPU上。这不会很好地扩展,因为您需要拥有大量的CPU,但可以最小化处理IO的延迟。我建议您还绑定孤立的CPU以最小化抖动。
您将希望避免使用选择器,因为它们会阻塞和/或创建相当多的垃圾,从而增加了GC暂停时间。
此外,为了最小化延迟,您将希望使用低延迟、内核旁路网络适配器,例如Solarflare。
您将需要使用推送解析器,以便可以在下载时解码/解析长消息。也就是说,在开始之前,您不想等待整个消息的接收。
将这些技巧组合使用可以使每个请求或传入事件的延迟减少10-30微秒。
Netty是可伸缩性更好的解决方案,即更高的净吞吐量,但代价是小幅度延迟,大多数基于支持Web服务的框架也都是如此,延迟在毫秒级别是可以容忍的。