什么是替代品的Netty为高性能网络? [关闭]

问题描述 投票:20回答:3

我在选择网络库来实现客户机/服务器系统,抽不出微秒的过程。它将实现自己的协议来发送和接收消息。我找了一个很好的NIO框架,让我轻松地开发的服务器和客户端,而不必过于担心低级别选择细节。每个人都建议我Netty的,但我想我犯团队的框架之前有2个或3其他替代品进行试验。有一件事我不喜欢非常关注的Netty是如何处理与自己ByteBuf实施和引用计数的ByteBuffers。任何人都可以分享自己的想法和办法?

java networking real-time netty nio
3个回答
28
投票

我们已经开发出不产生对GC垃圾的任何下2微秒在回环执行NIO networking library。正如彼得Lawrey提到的,本地JDK选择产生了大量的垃圾,但我们通过实现我们自己的epoll选择固定所有这些垃圾泄漏。忙等待选择的线程是伟大的延迟,但必须有一个平衡不要烫伤芯片或消耗大量的能量。我们选择实施使用低级的招数来实现一种节能模式采取的是平衡的照顾。

此外CoralReactor,你还可以对GrizzlyMina看看,但我们还没有与这些框架玩过没。

对于一些的Netty TCP性能基准测试中,你可以去看看here


18
投票

这是假设你真的想节省每微秒。大多数应用程序没有这样严格的要求。

如果你想保存微秒,你会想用忙等待非阻塞NIO对专用CPU线程。因为你需要有足够的CPU,但不减少处理IO延迟这不很好地扩展。我建议你也结合孤立的CPU,以尽量减少抖动。

你会希望避免使用选择,因为他们阻止和/或产生相当多的垃圾增加GC暂停的。

此外,以尽量减少等待时间,你会想使用一个低延迟,内核旁路网络适配器如Solarflare的。

您将要使用推解析器这么长的消息可以被解码/解析为他们下载。即你不会要等到出发前收到的整个消息。

组合使用这些技巧可以节省10 - 30微秒关每个请求或入站事件。

网状的可扩展性,即,较高的净吞吐量更好的解决方案,但在小成本的等待时间,因为这样做是基于支持Web服务,其中毫秒的延迟是可容忍的大多数框架。


13
投票

如果您有好的使用至少一些斯卡拉,Spray是一个伟大的替代了Netty。从长远来看,该游戏框架是例如打算从Netty中迁移到喷雾。喷雾提供了不同级别的TCP抽象的。那些是:

  1. 块级
  2. 请求级别(HttpRequest的/的HttpResponse)
  3. 编组对象级别

更深层次的,你挖入堆栈,越原始的传递信息。在块级API,你来相当接近原始字节的缓冲区。我从来没有使用过这种低层次的抽象自己,但我听到好东西。

喷雾建立在阿卡IO的顶部这又是建立在Java的NIO的顶部。所有功能都环绕演员的抽象是什么使得它容易建立使用喷雾并行应用程序。我想,聊天服务器将是一个完美的使用情况。由于阿卡提供了一个Java API,你应该能够使用喷雾与大多这个API。然而,你可能需要阅读一些斯卡拉现在,然后每源。最终,喷雾将完全合并到阿卡。


编辑:引自喷网站:“喷雾不再维护和Akka HTTP已被取代Playframework开始实验支持从Play 2.4.X开始阿卡HTTP服务器后端在Play 2.6.X版本,起到完全迁移到阿卡HTTP服务器后端。

© www.soinside.com 2019 - 2024. All rights reserved.