quarkus_Quarkus –轻量级Java框架的下一步是什么?

quarkus

随着Quarkus 0.20.0的发布,我们决定与Red Hat的JAX London发言人 ,Java Champion和开发人员体验总监Alex Soto联系。 他很友好地回答了我们有关Quarkus的过去,现在和未来的所有问题。 似乎我们对这个令人兴奋的轻量级框架非常期待!

JAXenter:Quarkus是一个相对较新的框架,它承诺用Java进行容器优先应用程序的轻量级开发。 “容器优先”是什么意思?

亚历克斯:容器优先意味着从一开始就可以在容器内完美地工作,而不会出现与我们的应用程序无关的问题。 我们在两个方向上工作:

首先,通过提供一种将企业应用程序编译为本地代码的方法。 这非常重要,因为Java社区众所周知,容器内运行的JVM程序最终可能会突然爆炸而没有任何明显的原因。 导致崩溃的真正原因与Java(和JVM)是​​在Linux(和Docker)容器进入现场很长时间之前创建的事实有关。 当时的JVM没有容器的概念,因此该进程尝试使用硬件机器能够提供的尽可能多的内存和CPU。 因此,当您将Java程序(尤其是Java 8)放入容器时,它会尝试获取尽可能多的资源,超出容器的范围。 发生这种情况时,Linux内核将停止该容器,从而也停止在其中运行的进程。

尽管此后对此进行了改进,使Java 11可以在容器中使用,但是您仍然需要知道如何做。 Quarkus通过提供一种使用Graal VM生成企业Java应用程序的本机可执行文件的方式来解决该问题,因此当它们在容器中运行时,您可以获得与其他用Go或C ++编写的本机编译程序相同的行为。

Quarkus备忘单
如果您对Alex Soto的发言感兴趣,请查看Alex Soto撰写的Quarkus备忘单 ! 它涵盖了您需要了解的所有内容,从启动和基础到高级用例。 包括代码示例和猫-您还想要什么?

第二个方向是不创建大的uber-jar,而是创建小的uber-jar以提供快速的构建时间。 如果您不是在构建本地可执行文件,而是使用Java(11)在JVM模式下运行Quarkus应用程序(或服务),则此功能很有用。 那里的其他框架具有uber-jar的概念,其中将应用程序本身和所需的库捆绑到输出JAR中。 如果您不是要构建一个容器来运行该应用程序,那么这本身就不是问题,但是如果您使用容器技术(Docker),事情就会变得更加有趣。 创建Docker容器时,该容器是分层生成的,因此用于构建该容器的每个步骤都存储在一个层中,该层可用于其他构建。

…在容器中创建了两层,一层用于您的代码,另一层用于依赖​​项,因此,代码中的任何更改都意味着只有一个很小的新层,并且只有可运行的代码…

使用沉重的uber-jar意味着对于代码中的任何更改(仅几位),您都将创建十分之几兆字节的新层,因为您的应用程序层是应用程序和所有依赖项。 但是Quarkus使用不同的方法–我们产生两个工件,一个包含可运行代码的JAR,另一个包含依赖项的(目录)。 这实际上意味着在容器中创建了两层,一层用于您的代码,另一层用于依赖​​项,因此,代码中的任何更改都意味着只有一小层新的层具有可运行的代码,因为依赖项可以从中重用以前的执行。

JAXenter:这个项目是如何产生的? 谁在支持它-它的发展动机和目标是什么?

Alex: Quarkus是一个由Red Hat赞助的开源项目,但由与Red Hat无关的其他几个人贡献。 它具有两个主要目标:改善开发微服务时的开发人员体验,并使Java成为微服务和无服务器架构的语言选择。

JAXenter:Quarkus有什么优势?

亚历克斯:嗯,这个问题的答案可能会根据读者的角色而有所不同,但是Quarkus的优点之一是它可以帮助您省钱。 过去,每个公司都拥有运行应用程序的硬件,因此您花了一些钱来购买它。 如今,我们处于云时代。 我们不再购买硬件,但我们为使用费用付费。 我们需要的CPU和RAM内存越多,我们支付的费用就越多。 因此,这些天CPU和RAM的使用很重要。 与其他传统Java框架相比,Quarkus在其纯模式下可以减少CPU使用率(减少启动时间和每个请求的时间),并将内存需求减少10倍。 但是这种减少不仅在纯模式下,在使用JVM的情况下,内存使用量减少了2。

使用Quarkus和实时重载,您只需要保存更改,此更改几乎立即反映在正在运行的实例中。

开发人员最受好评的功能之一是实时重新加载。 这是其他语言已经拥有的东西,但是对于Java开发人员来说确实是新东西。 实时重载使您可以在应用程序的任何文件(例如,类)中进行更改,而无需重新编译或重新打包它。 这些更改会自动反映在正在运行的应用程序实例中。 请注意,在此之前,要使更改反映到正在运行的实例中,您必须编译和打包应用程序,停止前一个实例并重新启动整个应用程序。 使用Quarkus和实时重载,您只需要保存更改,此更改几乎立即反映在正在运行的实例中。 没有编译,没有重新包装,没有重新启动。

您在Quarkus中了解到的关于这些规范的所有内容都可以在不基于Quarkus的任何其他项目中使用。

另外,与Panache框架的集成对于编写JPA代码的开发人员来说是一个很大的胜利,因为它大大减少了您需要在数据访问层中编写的样板代码的数量。

最后但并非最不重要的一点是,Quarkus基于众所周知的规范,例如JAX-RS,JPA,CDI,Bean验证和MicroProfile规范。 这意味着您已经知道的所有内容都可以在Quarkus中使用。 反之亦然:您在Quarkus中了解到的所有这些规范的知识都可以在不基于Quarkus的任何其他项目中使用。 这是一个非常不错的优势,因为您实际上不需要学习或研究如何在所开发的每个框架中执行操作。

还请参见:

JAXenter:Quarkus的0.20.0版本刚刚发布。 那里的亮点是什么?

Alex:是的,该版本上周发布,但是每2周发布一次新版本。 对于0.20.0版本,我们添加了以下功能:

  • 导入脚本中的Hibernate ORM多行支持
  • 改进了Hibernate Validator与CDI的集成
  • 新的MicroProfile REST客户端实现
  • 升级到MicroProfile Metrics 2.0
  • 配置按方法的事务超时
  • Syslog支持日志记录
  • 支持杰克逊作为封送/拆封者
  • 支持OAuth 2
  • 有关如何在Microsoft Azure中部署Quarkus的指南。

当然,除了这些更改之外,该版本还包含错误修复,增强功能和性能改进。

还请参见:

JAXenter:您现在有什么计划-即将推出哪些新功能和版本?

亚历克斯:好吧,这是一个开源项目,这意味着1.0.0版本准备就绪后就可以使用了,但是我们计划在日历年内发布它。 我们对Quarkus的代码质量非常有信心–如果没有其他要求,运行时代码只会调用坚如磐石的框架(Netty,Vert.x,RESTEasy,Hibernate ORM,Camel等)。 它不在1.0中的原因是我们还没有准备好将某些扩展API完全转换为石头。 我们还正在完善生态系统模型,并希望在1.0发布时出现。

最后,版本号只是一个数字,我们会以生产就绪的方式处理所有发行版。

也就是说,我们知道许多在生产中运行Quarkus的公司。 最后,版本号只是一个数字,我们会以生产就绪的方式处理所有发行版。

我们为Quarkus的下一版本计划了几个新功能。 我们希望不断增强开发人员的体验,提供更多使他们的日常工作充满欢乐的功能。 另外,我们想使用Panache的“概念”,以便可以将其用于其他后端,而不仅仅是JPA。

我们正在重新考虑HTTP堆栈,以在Netty,Vert.x,Undertow和RESTEasy之间进行深度集成。 这是重要的基础工作,将大大改善我们对命令式和React式的统一,并提供非常有用的无服务器开发经验。

同样,我们正在统一安全层,以使其更具发展性并在堆栈中共享它们。

最后,我们可以预期与Vault或JMS等现有框架的集成将越来越多。

翻译自: https://jaxenter.com/quarkus-whats-next-for-the-lightweight-java-framework-160793.html

quarkus

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值