背景

Java并不是为了Web而诞生,但似乎B/S架构让Java生机无限,Spring全家桶的助推也使得Java在Web更为强大,微服务体系Spring Cloud更是顺风顺水,不得不说的Spring应用的痛点就是启动过慢,内存占用偏高,对服务器资源占用较大,而且JVM的本身就难逃离内存的过度依赖。

随着容器化技术Docker、Kubernetes,让云原生似乎成为了未来的发展方向,云原生(Cloud-Native)这个概念最早由Pivotal公司的Matt Stine于2013年首次提出,提到云原生首先想到的关键词可能就是容器化、微服务、Lambda,服务网格等,当然这些是必要元素,但是不代表拥有这些元素就是云原生应用,很多应用的部署只能说是基于云来完成,比如私有云、公有云,这也是未来的趋势。云原生本质上不是部署,而是以什么方式来构建应用,云原生的最终目的是为了提高开发效率,提升业务敏捷度、扩容性、可用性、资源利用率,降低成本。

Go语言作为一种云原生语言也体现出了强大的生命力,Java也在变化,2018年Java出现了大量轻量级微服务框架,来面对未来的云原生趋势,Red Hat推出的Quarkus、Oracle的Helidon以及Spring Native都在快速发展,拥抱云原生。

什么是Quarkus

传统的Java技术栈是为了单机应用设计的,需要耗费大量的内存和CPU,并且启动速度慢,当然也不存在云、容器、k8s等技术体系,在云原生时代,Java技术需要一个变革去迎接这个新世界的挑战。
Quarkus就是为了应对云原生而设计,并且是针对HotSpot、GraalVM定制化的k8s native框架,目标是使 Java 成为 Kubernetes 和serverless环境中的领先平台,同时为开发人员提供一个框架来解决更广泛的分布式应用程序架构。这也反应在官方对Quarkus的介绍Supersonic Subatomic Java。

Quarkus有哪些特殊的地方,官方列举了以下特点。
image.png
这些特点里面最过于吸引人的应该就是:

Quarkus提供了k8s扩展支持,可以让开发人员不用关心k8s底层复杂的框架设计,也可以很好的使用其进行应用部署。此外还提供了native镜像的能力,大大提高了应用的启动时间和减小了内存的占用,同时对命令式和反应式编程的支持,也加大了容错性,反应式可以提高应用对大量请求的响应速度。
quarkus_metrics_graphic_bootmem_wide.png