使用Quarkus&GraalVM实现高性能和低内存消耗的Web服务

PresentationWeb 应用开发 (Web Application Development)
🕒 ~
  • 王智创
    • 王智创
    • 中科院软件所
    • 软件开发工程师
    • 中科院软件研究所软件研发工程师,AO.space 开源项目 Maintainer,开源之夏导师

观众评分

基于 Java 传统命令式(Imperative)技术栈实现的 Web 服务曾经风光一时,在业界广泛使用,即使是现在,仍然有不少的服务跑在这样的模式下面。但反观其性能,现已被各种基于非阻塞 I/O 的并发编程模式所超越,例如最有代表性的:nodejs 的响应式编程(reactive programming)和 golang 的轻量级协程(goroutines)。而且由于 Java 服务需要运行在 JVM 之上,其内存消耗与其他语言的往往不在一个数量级,从笔者实现使用情况来看一般要超出 10 倍以上。虽然 Java 生态中很早就引入了 Netty 这样优秀的非阻塞 I/O 框架,但由于其学习转换成本相对较高,一般的 Web 服务很少直接采用。当下 JVM 生态里兴起的一些基于非阻塞 I/O 的 Reactive 编程框架和 GraalVM 的 Native Image 技术让这一局面有了大大的改善。这其中较新的 Quarkus 框架结合 GraalVM 的组合是一个不错的选择。不同于传统 Spring 的解决方案,Quarkus 在框架层面融合了 Imperative 和 Reactive 两种编程模式,让它们都运行在 Netty 的非阻塞网络库之上。再加上其构建之初就将与 GraalVM 的结合设为主要目标,所以两者可以几乎无缝的使用。从实际项目使用情况来看,其性能和内存消耗已经和以上提到的其他主流语言和模型不相上下,有时甚至要更好。

资料下载

  1. 使用Quarkus&GraalVM实现高性能和低内存消耗的Web服务-COSCon'23.pptx