QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

甲骨文新微服务框架 Helidon Níma:使用虚拟线程实现高性能

作者:A N M Bazlur Rahman

  • 2022-09-25
    北京
  • 本文字数:1032 字

    阅读完需:约 3 分钟

甲骨文新微服务框架Helidon Níma:使用虚拟线程实现高性能

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 版本支持如下的协议:

  • 支持 pipelining 的HTTP/1.1:客户端和服务器端。

  • HTTP/2服务器端(原型状态,包含已知的问题)

  • gRPC服务器端(原型状态,包含已知的问题)

  • WebSocket服务器端(原型状态)


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

  • 跟踪:使用现有的 Helidon 跟踪实现,比如JaegerZipkin

  • 静态内容:来自类路径或文件系统

  • 跨域资源共享(CORS)

  • 访问日志

  • 可观测性端点(健康状态、应用信息、配置)

  • 容错(舱壁、断路器、重试和超时特性)

  • HTTP/1.1 客户端

  • 测试


在这些特性之上,它还使用了新的 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


相关阅读:

JDK 19 最新动态和 JDK 20 新特性预测

2022-09-25 08:0012793

评论

发布
暂无评论
发现更多内容

druid 源码阅读 10—— 过一下流程图中的getConnectionDirect

张大彪

【中国信通院 x ShardingSphere 金融用户社区】成立,多家知名金融机构正式入驻

SphereEx

Apache 数据库 开源 ShardingSphere SphereEx

区块链技术已站上真正意义的风口,如何把握?

CECBC

深入剖析 | snowflake算法

九叔(高翔龙)

算法 雪花算法 uuid 全局唯一ID snowflake

滑动窗口

工程师日月

算法 5月月更

druid 源码阅读(十一)maxWait 参数

爱晒太阳的大白

5月月更

设计者模式之装饰者模式

乌龟哥哥

5月月更

SAP UI5 OData V4 模型的构造方式

汪子熙

JavaScript 前端 SAP ui5 5月月更

大模型走向产业的一小步,AI走向普惠的一大步

脑极体

Linux环境编译多个C程序文件

Loken

音视频 5月月更

零基础学Java第四节(字符串相关类)

编程攻略

java编程

Druid 连接池源码阅读 10

石小天

Docker下Java文件上传服务三部曲之三

程序员欣宸

Java Docker 5月月更

druid源码学习十

Nick

Apache Druid

实现compact table command

Asha

Kitex 源码解析活动发布!

baiyutang

Go 字节跳动 微服务 5月月更

【刷题第15天】剑指 Offer 09. 用两个栈实现队列

白日梦

5月月更

如何在你的 wordpress 网站中添加搜索框?

海拥(haiyong.site)

WordPress 5月月更

Kubectl-ice 插件展示集群容器配置信息更强大、更便捷

Marionxue

kubectl插件 kubectl-ice 容器配置

【Meetup 预告】OpenMLDB x DolphinScheduler 链接特征工程与调度环节,打造端到端 MLOps 工作流

第四范式开发者社区

人工智能 机器学习 数据库 调度 特征工程

程序员如何保证自己开发的正确性——测试开发有感

Bruce Talk

技术 敏捷 TDD Agile

后端开发【一大波干货知识】Redis中的IO多线程(线程池)

C++后台开发

redis 多线程 线程池 后端开发 C++后台开发

跨平台应用开发进阶(九) :uni-app 实现Android原生APP-本地打包集成极光推送(JG-JPUSH)详细教程

No Silver Bullet

uni-app Andriod 极光推送 5月月更 本地打包

Amazon MSK Serverless 现已正式推出,无需再为托管式 Kafka 集群进行容量规划

亚马逊云科技 (Amazon Web Services)

kafka Serverless

Amazon Personalize 个性化效果评估,从准确性到多样性、新颖性和偶然性

亚马逊云科技 (Amazon Web Services)

Amazon 模型

【LeetCode】在长度 2N 的数组中找出重复 N 次的元素Java题解

Albert

LeetCode 5月月更

单片机上常用-GB2312、GBK汉字取模与字库偏移地址的计算与汉字描点

DS小龙哥

5月月更

模块六:作业

本人法海

「架构实战营」

Tech Talk 活动回顾|化“被动”为“主动”,如何构建安全合规的智能产品

亚马逊云科技 (Amazon Web Services)

产品 安全 解决方案

百尺竿头更进一步丨拓展 Amazon Aurora 的读写能力之 Gaea 篇

亚马逊云科技 (Amazon Web Services)

Amazon 环境搭建

跨平台应用开发进阶(十) :uni-app 实现数据存储、获取和删除

No Silver Bullet

uni-app 数据存储 5月月更 全局

甲骨文新微服务框架Helidon Níma:使用虚拟线程实现高性能_语言 & 开发_InfoQ精选文章