作为Java程序员,您在使用Java进行微服务和云原生开发时,是否考虑过该采用哪些框架、库和技术,来协助创建下一代的Java应用呢?虽然您可能已经知道了Spring Boot和Spring Cloud是用Java开发微服务应用的领先框架,但实际上我们还有着诸如MicroNaut、DropWizard、以及Quarkus IO等更多的选择。我将和您讨论六种适合Java开发者的微服务框架。
由于这些框架大多数比较新,而且除了配套的文档和教程外,没有太多有关如何使用它们,进行产品级别微服务开发的资源,因此我也会分享一些诸如在线课程、教程、以及书籍等资源,来协助您理解和运用这些框架。
什么是微服务?
在讨论微服务之前,让我们试着了解一下应用架构的演变,以及是什么导致了微服务在软件开发领域的发展。
很久以前,我们只需要维护一个应用程序、一个基于代码的应用程序、一个被部署到每台机器上的应用程序。例如,跑在Windows上的Word软件、以及其他PC游戏等。当我们需要更多的功能时,只能不断地将新的功能组件添加到源代码中。此举不但会使得代码库变得臃肿和庞大,而且一旦要添加或更改某项功能时,就需要进行大量的回归测试。显然,这不仅拖慢了软件产品的交付时间,而且增加了开发的工作量。
对此,人们开始将代码划分为不同的模块,以便程序员可以独立地开发、测试和部署每一个模块。Web应用就此诞生。Web应用的好处在于,我们不需要将整个应用程序部署到客户端的主机上,而只需要有一个浏览器,客户端就可以连接到服务器上,以获取所需的任何功能。至此,我们不再需要在同一台机器上部署客户端和服务器端了。
当然,这种演变还在服务器端继续进行。人们开始将一个大型的单体应用程序(Monolithic application),分解为多个独立的小型应用程序。这就产生了微应用。各个微应用可以分别专注于授权、身份验证、服务发现、以及负载均衡等服务。我们也可以将它们称为微服务。
当我们将多个提供不同服务的微应用,连接到每个应用上,以便作为某个应用程序执行时,此类架构便称为微服务架构。那么它有什么好处呢?显然,与单体应用相比,这些微服务非常小巧,可以便捷地被快速且独立地开发、测试和部署,进而改进了产品的交付和发布周期。
同时,它还构建了一个分布式的架构,您可以在其中将微服务部署在不同的主机(当然也可以是同一主机)上,以便更好地利用服务器端的CPU、内存和存储等资源。此外,它还有助于提高可扩展性,以满足快速增加并生成新的服务实例的需求。
我们可以参考一下亚马逊的Prime Day。当有大量客户同时在线购物,并导致亚马逊网站的流量激增时,您需要通过创建新的实例,来处置这些并发的请求。当然,您并不需要扩展诸如产品索引等,与主要结算业务无关的其他服务。
下图展示了微服务和单体架构之间的主要区别:
图片来源-https://www.educative.io/courses/introduction-microservice-principles-concepts?affiliate_id=5073518643380224
了解了什么是微服务、以及它的优势之后,让我们来讨论六种可用于微服务和云原生开发的Java框架。
1.Spring Boot + Spring Cloud
毋庸置疑,Spring Boot与Spring Cloud的结合使用,是通过Java来开发微服务的最佳选择之一。Spring Cloud提供了许多开箱即用的特性,例如:服务发现和负载均衡等,都是微服务架构中必需的。同时,它还能够遵循Netflix的微服务架构。而作为成熟且经过反复测试的框架,当您遇到困难时,可以通过其对应的大型技术社区,来寻求支持与帮助。
除了其自带的、最新且全面的文档,您还可以通过各种在线资源,例如Udemy上的Spring Boot微服务相关课程等,来深入学习Spring Boot和Spring Cloud,进而实现产品的快速交付。在此,我强烈推荐您使用在In28Minutes(一个GitHub站点)上由Ranga Karnam提供的《用Spring Boot和Spring Cloud玩转微服务》课程。这个19.5小时的课程是学习如何使用Spring Boot去构建微服务的绝佳资源,非常适合初学者和中级Java开发人员。
还有我们51CTO学堂的这门《Spring Boot教程:开发小而完整Web项目》课程,非常值得推荐!
2.Quarkus
作为一个全栈式的Kubernetes原生Java框架,Quarkus专为Java虚拟机(JVM)和原生编译而设计。通过提供针对容器优化的Java,它已经成为了无服务器、云服务和Kubernetes环境的高效服务平台。
由于得到了Redhat的支持,因此Quarkus在创建高性能、可扩展的Java应用程序方面,正在迅速地取得进展。基于Quarkus的应用通常能够快速启动,这是一个普遍的关键特性。
许多Java程序员正在尝试着将Quarkus运用到快速和反应式微服务中。如果您想着手学习Quarkus,我强烈建议您查看由Udemy上的Quarkus先驱之一--Antonio Goncalves提供的《Quarkus入门》课程。对于任何愿意学习Quarkus的Java开发人员来说,这个3.5小时的课程是一个绝好的起点。
3.MicroNaut
这是另一个基于JVM的现代化全栈框架,可用于构建模块化、易于测试的微服务和无服务器应用。MicroNaut是由OCI创建的。值得一提的是,这家公司创建的另一款产品是Grails,是一个备受Groovy开发人员喜爱的流行Web开发框架。目前,Micronaut得到了Java社区的广泛认可。而随着Oracle和JetBrains等大公司的持续支持,MicroNaut可能在不久的将来,成为Spring Boot和Spring Cloud的有力竞争者。
在技术方面,MicroaNaut和Spring Framework有着本质上的区别。Spring完全依赖运行时(runtime)的反射和各种代理,而Micronaut使用编译时(compile-time)的数据来实现依赖性注入。
MicroNaut的目前版本为2.5。它支持Gradle 6.5和增量编译,并为微服务提供更好的响应式代码库。如果您想学习MicroNaut并需要相关资源的话,我建议您在Udemy上查看由Daniel Prinz提供的《学习使用Micronaut构建Java类型的云原生微服务》课程。这个6.5小时的课程会引导您从头开始学习MicroNaut的各种丰富资源。
4.DropWizard
作为另一个可用于创建RESTful Web服务和微服务的强大框架,DropWizard使用诸如Jetty、Jackson和Jersey等流行Java库,来更快捷、更轻松地创建高性能的Java应用。DropWizard的优势在于它为配置、监控各项指标和操作任务,提供了内置的支持。
不过,目前可供学习DropWizard的书籍和在线课程并不多。您往往需要查看其配套文档。在此,我给您推荐Udemy上的《Dropwizard入门》课程。该教程虽然不是最好的,但足以让您熟悉和上手DropWizard。
5.MicroProfile
Eclipse的MicroProfile是一项针对微服务架构,优化JavaEE的举措。它旨在提供一种独立于任何供应商的规范,并通过利用JavaEE来创建微服务架构。由于该规范是由专家创建的,并得到了IBM、RedHat和Oracle等组织的支持,因此非常适合于微服务的开发和部署。
6.EclipseVert.x
同样由Eclipse提供的Vert.x,是另一个用于开发反应式微服务的轻量级框架。它不但支持非阻塞(non-blocking)和异步式开发模型,而且允许用户在Java虚拟机上运行分布式应用程序。
与提供单一解决方案的Spring Boot不同,Vert.x并不提供一体化的解决方案,而是提供工具包和构建块,来方便用户自行构建组件。也正是因为它是一个工具包,因此它提供了既可以被独立使用,又能够被嵌入到Spring本身的灵活性。
事实上,以QuarkusIO为代表的许多微服务框架,都会使用Vert.x来满足TCP和HTTP等低端不安全的调用需求。如果您想学习Vertx并查找其相关资源的话,那么我还是建议您在Udemy上的查看由Daniel Prinz提供的《学习使用Vert.x来构建反应式Java微服务》课程。这个9.5小时的课程资源会从Vert.x的基本概念开始,引导您进行反应式微服务的开发与实践。
小结
综上所述,虽然大多数组织都会选择使用Spring Boot和Spring Cloud,来创建他们的RESTful Web服务和微服务,但您也可以根据自己的实际项目需求,选用并学习诸如QuarkusIO和Micronaut等更新的替代方案。如您所见,上文也针对每一种框架,为您提供了学习它们的实用在线资源。最后,我既欢迎您通过发表评论的方式,添加更多您认为更为实用的Java微服务框架,也请与朋友和同事分享本文,并留下宝贵意见。
原文标题:Top 6 Java Frameworks for Microservices and Cloud-Native Development,作者:Javin Paul
原文地址:https://developer.51cto.com/article/701406.html