首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高性能网络的Netty替代方案有哪些?

高性能网络的Netty替代方案有哪些?
EN

Stack Overflow用户
提问于 2014-05-24 06:56:23
回答 3查看 38.8K关注 0票数 25

我正在选择一个网络库来实现一个不能腾出任何微秒的客户机/服务器系统。它将实现自己的协议来发送和接收消息。我正在寻找一个好的NIO框架,它将允许我轻松地开发服务器和客户端,而不必太担心低级选择器的细节。每个人都推荐我,Netty,但我想在提交给我的团队一个框架之前,尝试其他2到3个替代方案。我不太喜欢Netty的一点是,它使用自己的ByteBuf实现和引用计数来处理ByteBuffers。有没有人可以分享你的想法和选择?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-24 07:40:45

我们已经开发了一个NIO networking library,它在环回上执行不到2微秒,而不会为GC产生任何垃圾。正如Peter Lawrey提到的,原生JDK选择器会产生大量垃圾,但我们已经通过实现自己的epoll选择器修复了所有这些垃圾泄漏。忙碌地等待选择器线程对于延迟来说是很好的,但必须有一个平衡,以避免消耗芯片或消耗大量能源。我们的选择器实现使用低级技巧来实现一种兼顾这种平衡的节能模式。

除了CoralReactor,你还可以看看GrizzlyMina,但是我们还没有尝试过这些框架。

对于一些Netty TCP性能基准测试,您可以查看here

票数 28
EN

Stack Overflow用户

发布于 2014-05-24 07:03:56

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

如果您想节省微秒,您将需要对专用cpus上的线程使用繁忙等待非阻塞NIO。这不能很好地扩展,因为您需要有足够的CPU,但确实最小化了处理IO的延迟。我建议您也绑定隔离的CPU以最小化抖动。

您将希望避免使用选择器,因为它们会阻塞和/或创建相当多的垃圾,从而增加GC暂停。

此外,为了最大限度地减少延迟,您需要使用低延迟、绕过内核的网络适配器,如Solarflare。

您将希望使用推式解析器,以便可以在下载消息时对其进行解码/解析。也就是说,在开始之前,你不会想要等到整个消息都收到了。

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

Netty是一个更好的可伸缩性解决方案,即更高的网络吞吐量,但延迟成本很小,正如大多数基于支持web服务的框架所做的那样,这些框架可以容忍毫秒级的延迟。

票数 22
EN

Stack Overflow用户

发布于 2014-05-28 16:44:11

如果您至少可以使用一些Scala,那么Spray是Netty的一个很好的替代品。例如,从长远来看,Play框架打算从Netty迁移到Spray。Spray提供了不同级别的TCP抽象。它们是:

Chunk

  • level

  • Request level (HttpRequest /

object level

你越深入堆栈,传递的信息就越原始。在块级别API中,您非常接近原始的字节缓冲区。我自己从来没有使用过这种低抽象级别,但我听到了一些好的东西。

Spray构建在Akka IO之上,Akka IO同样构建在Java NIO之上。所有的功能都围绕着Actor抽象,这使得使用Spray构建并行应用程序变得很容易。我认为聊天服务器将是一个完美的用例。由于Akka提供了一个Java API,因此您应该能够在此API中主要使用Spray。但是,您可能需要时不时地阅读一些Scala源代码。最终,Spray将完全并入Akka。

编辑:引用Spray网站的话:"Spray不再维护,已经被Akka HTTP取代。Playframework从Play 2.4.X开始实验性地支持Akka HTTP Server后端。在Play 2.6.X版本中,play完全迁移到Akka HTTP server后端。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23839437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档