[关闭]
@levinzhang 2022-09-22T21:11:22.000000Z 字数 1661 阅读 352

Helidon Níma使用虚拟线程实现简洁性和高性能

by

摘要:

在Helidon伞项目下,甲骨文推出了基于虚拟线程(JEP 425)的新微服务框架Helidon Níma。它是完全从头构建的,以实现易于使用的编程模型,并具有出色的性能。该技术的预览版已经伴随Helidon 4.0.0-ALPHA1版本发布,对最新Java技术感兴趣人可以对此进行评估。


Helidon伞项目下,甲骨文推出了基于虚拟线程(JEP 425)的新微服务框架Helidon Níma。它是完全从头构建的,以实现易于使用的编程模型,并具有出色的性能。该技术的预览版已经伴随Helidon 4.0.0-ALPHA1版本发布,对最新Java技术感兴趣人可以对此进行评估。但是,它尚未达到生产环境就绪状态。

开发人员可以通过Helidon MPHelidon SE使用常规的Helidon框架达到一定的吞吐量,但是如果应用需要更高的性能,他们唯一能做的就是采用基于反应式的服务。但值得一提的是,编写、维护和调试基于反应式的服务更具挑战性。

Helidon Níma使用虚拟线程来解决这个问题,因为基于虚拟线程,阻塞的成本是很低的,所以我们可以创建数以百万计的虚拟线程。因此,这提供了一个恒定的、低开销的、高并发的服务器,同时能够保持阻塞式的线程模型。这允许开发人员通过最小的支撑功能就可以编写简单、可调试和易维护的代码。请考虑如下的样例:

阻塞式代码 反应式代码
  1. private void one(ServerRequest req, ServerResponse res) {
  2. String response = callRemote(client());
  3. res.send(response);
  4. }
 
  1. private void one(ServerRequest req, ServerResponse res) {
  2. Single<String> response = client.get()
  3. .request(String.class);
  4. response.forSingle(res::send)
  5. .exceptionally(res::send);
  6. }
 

阻塞式代码和反应式代码都能完成相同的目标,但是,反应式代码对认知的要求更高,学习曲线更陡峭,并且难以维护。正如甲骨文的架构师Tomas Langer在最初的博客文章中所说的那样,在较为复杂的用例中,这一点会更明显。

按照Langer的说法,Heldion Níma主要的关注点是性能,它也的确产生了一定的效果,如下图所示。

这个alpha版本支持如下的协议:

除此之外,它还支持如下的特性:

在这些特性之上,它还使用了新的Java语言特性,如密封类(sealed classes)和增强的switch表达式

Helidon Níma是一个完全开源的框架,是Helidon代码库的一部分。尽管Helidon项目是基于Netty的,但是甲骨文公司的软件开发人员Dmitry Aleksandrov在他的博客文章中提到:

Helidon Níma网络服务器计划在Helidon生态系统中取代Netty。它也可以被其他框架以嵌入式Web服务器组件的形式使用。

希望评估Helidion Níma的开发人员可以参阅Tomas Langer的初始博客文章和托管在GitHub仓库的源代码。

查看英文原文:Introducing Helidon Níma Using Virtual Threads to Achieve Simplicity and High Performance

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注