在后端编程领域中,Java语言仍然占据非常重要的地位. 虽然近些年来,一些新兴的语言出现并在某些方面有其优点与特色,但基本都无法撼动Java在后端的地位,特别是企业级开发领域.
自1995年发布以来, 过了28年, Java几乎是长盛不衰的, 关于这个,可以阅读我去年的文章: 27年后,为什么Java仍然能够长盛不衰
而在Java开发中,以使用Spring Boot为主流, Spring Boot几乎提供了完整的,可靠的,易于使用的一整套技术解决方案, 使得它非常受到欢迎.
Spring Boot虽然受到欢迎与使用广泛, 但也因为不灵活,封装过多等一些缺点受到指责. 与此同时,也有新兴的框架出现, 试图在Spring Boot之外提供另一种选择.
做为架构师, 不管你持有何种观点, 了解这些替代选择, 总归是件好事.
1. Dropwizard
https://www.dropwizard.io/
特色: 轻量, NO Spring
事实上,很早以前,在其它一些框架还没有出现之前,我就知道Dropwizard的存在. 如果需要给Dropwizard给个定义,最好的定义就是: 一个完全没有Spring框架存在的替代选择
它迎合了那些不喜欢Spring的程序员(有相当一部分程序员持有这种观点), 它提供Spring Boot类似的功能,但把Spring的框架都替换掉了
它使用Jersey
而不是Spring MVC
来提供REST能力; 它使用Jetty
而不是Spring Boot默认的Tomcat
来做Web服器; 它使用Eclipse基金会的HK2
而不是Spring Boot的Spring IOC
来做依赖流入;
当然,这不意味着没有与Spring Boot使用相同的类库, 它只是替换了Spring的那些自有框架, 选择了一些更灵活,更轻量的实现,组合而搭配实现的一个框架. 它与Spring Boot也依赖了一些共有的框架, 比如Jackson实现JSON能力, Log4j来做日志等, 使用Hibernate来做JPA (Spring Data JPA也是依赖Hibernate之上的一种抽象,并非是与Hibnerat可相比的实现)
但是Dropwizard在工具集的完整度上比不上Spring Boot, 而且近些年在响应式编程, 云原生等方面,Dropwizard也未有见过跟上, 没有提供特别的支持. 而Spring Boot有它的响应式编程解决方案WebFlux, 还有Spring Native等更适合云原生的方案支持.
如果你仅仅是想开发一个REST服务的能力, 又不喜欢Spring Boot, 那Dropwizard仍然是你可以考虑的选择.
2. Vert.x
https://vertx.io/
特色: 响应式编程, 性能优势
响应式编程(也叫反应式编程), 是近些年非常流行的一个理念. 响应式编程在性能上具有非常大的优势,特别能很好的处理大并发场景.
早些年Node.JS受到吹捧时,其中一个重要的原因就在于Node.js是一个基于事件驱动的响应式实现,而非传统Java诸如同步式编程的线程模式.
不过, Java也有自己的响应式框架可以选择. Vert.x就是其中一个杰出的候选者.Vert.x官网的给自己的slogan就是“Eclipse Vert.x™ Reactive applications on the JVM”.
在谈到响应式编程中, 很多Java程序员下意识到想到RXJava这个框架. 但Vert.x与RXjava不同之处在于, RXJava只是一个响应式框架,而Vert.x是响应式的一套整体解决方案.
什么意思? 就是, 编码不是一个响应式框架能解决问题的,我们需要与HTTP打交道, 我们需要与数据库打交道, 如果是响应式编程, 那当然我们需要一整套框架来支持对吧.
Vert.x就是这样一个优秀的响应式整体解决方案, 它不仅仅是提供一个支持响应式编程的框架, 如果你需要与数据库打交道,使用Vert.x MySQL Client,它是一个异步的数据库客户端; 如果你需要与HTTP打交道, 使用Web Client为实现异步HTTP请求吧; 等等;
说起Java的响应式编程,更多的可能听说过Spring WebFlux, 但相比起来, Vert.x的性能更佳, 优于Spring WebFlux.
当然,它和Spring Boot没有半毛钱关系. 你可以使用它替换掉你的Spring Boot.
3. Micronaut
特点: 微服务 + 云原生
2017才出现的一个新兴工具集. 它出现的目标就是为了Java的微服务与云原生,特别是把Cloud Native当作第一目标与支持.
这意味着,它的解决方案更多的是站在云原生, Serverless等这些解决来考量与实现的.
它在很多方面与Spring Boot提供同样的能力与解决方案, 比如使用Jetty或Tomcat来做为Web服务器, 都支持Java,Kotlin,以及Scala等JVM语言; 都提供了OAuth的一些权限控制能力等;
区别在于,Micronaut对云原生环境提供了原生的支持, 在distributed configuration
, service discovery
, client-side load balancing
, distributed tracing
,以及serverless
等方面几乎提供了内置的支持.
当然,这不是说Spring Boot不能做上面这些事,但你得使用一些第三方框架来集成实现, 与原生就支持还是有点差距的.
如果你希望有一个云原生的Java解决方案,也许Micronaut是你不错的选择.
4. Quarkus
https://quarkus.io/
特色: 容器优先, K8S云原生, 支持响应式编程
Quarkus是2019年才出现的框架. 因此它在流行度上远不能与Spring Boot相比. 但是从它的初衷也是能更好的支持与适应云原生时代.
因此,从一开始, 它就具有几个明显的特点, 比如容器优先, K8S云原生支持,Java Native原生支持, 以及响应式编程支持等.
与Spring Boot不同之处在于, Spring Boot不仅仅是把各种框架搭配起来形成一个解决方案, Spring本身有很多能力,比如IOC,Spring Data等. 但是Quarkus更多的是把各种流行的框架搭建起来,形成一个更适合时代的解决方案.
比如它使用GraalVM来支持Native Image构建, 使用Mutiny来做响应式编程支持 (一个类似RXJava的响应式框架)等 . 它在性能上当然也优于Spring Boot.
Quarkus是由Red Hat出品, 大公司支撑的东西相比较来说更值得考虑.
5. Helidon
https://helidon.io/
特色: 云原生, 响应式, 多模式支持
Helidon是由Oracle公司出品的, 轻量,快速,为微服务而优化的框架.
当然, 框架看多了你就会发现, 新的东西来来去去都是围绕几个重要的特性来实现, 比如云原生, 容器, Java Native Image, 响应式支持等. Helidon也不例外.
Helidon包括两种Helidon SE与Helidon MP两种风味. Helidon MP可能与Spring Boot传统风格更相似,而Helidon SE则可能与Node.js风格更相似.
并且它推出了Helidon Níma
,号称JVM领域中第一个支持Java Virtural Thread 虚拟线程的框架. 这是事实, Java Virtual Thread事实上还没有真正发布, 但Helidon就支持了,尤为难得.
Helidon具有以下一些优点:
-
完全支持GraalVM Native Image -
开箱即用的gRPC支持 (gRPC相比REST更适合云原生) -
响应式DB与HTTP客户端支持 -
内置了对REST, GraphQL, 健康检查, 度量, 链路追踪等的集成与支持
考虑到Oracle的支持(Oralce同时也是Java的所有者)及其在技术上的前沿性, 相比较而言, Helidon是云原生时代你可以考虑的一个很好的框架.
终
现在你知道了,Java的世界, 并不只是Spring Boot. 虽然可能Spring Boot仍然会在未来很长一段时间占据主要的地位. 但是这些新兴的替代选择都独具特色.
考虑到团队学习能力, 工程师的招聘的容易度, 框架的成熟度与可靠性等因素来考量, Spring Boot可能仍然会是很多团队的架构的第一选择.
但做为架构师的你要知道, Java的世界, 仍然有其它选择, 当情况适合的时候 ,你就可以把它们纳入考虑.
对架构来说, 最重要的工作就是选择, 架构并无最好,只有最适合而已.
当然,这也从另一个角度证明了Java生态的强大与魅力. Java仍然是企业级开发最优的语言.
原文始发于微信公众号(微言码道):不只是Spring Boot, 下一代企业级开发的那些可选项
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/248672.html