使用 Java 构建微服务

【编者的话】本文翻译自Dzone Guide to the Java Ecosystem,Dzone是一个关于Java的优秀网站。文中介绍了几种用Java构建微服务的方法,包括Container-less,Self-contained,以及In-container。翻译经验不足,如有错误,请慷慨指出。

快速浏览

在Java生态中,构建微服务的策略包括Container-less,Self-contained,以及In-container等。

Container-less微服务将应用及其依赖打包成一个单一的jar文件。

Self-contained微服务也是打包成一个单一的Jar文件,但它还包括一个嵌入式框架,这个框架含有可选的第三方lib,当然这些lib是兼容的。

In-container微服务打包成一个完整的Java EE容器,该服务在Docker镜像中实现。
基于微服务的架构给架构师和开发者带来了新的挑战,然而,随着语言的升级和工具数量的增加,开发者和架构师完全有能力应对这样的挑战。Java也不例外,本文探讨了在Java生态系统内构建微服务的不同方法。



介绍

本文不会探讨微服务是好还是坏,也不会建议你应该事先使用微服务设计你的app,或者当他们在monolith应用出现时,就应该提取这些服务。

这里所描述的方法并不是唯一的,但它可以让你对这些可能性有一个良好的纵览。即使Java生态是本文所关注的领域,但这些理念也可传递到其他语言和技术中。

在文中,我将这几种方法分别称为Container-less,Self-contained,以及In-container。这些术语可能尚未被完全确立,但在这里,它们可以达到区分这几种方法的目的。我会在接下来的几个部分中阐述它们的意义。

container-less

在Container-less方法中,开发者要将所有位于JVM顶层的一切事物作为应用的一部分。

Container-less方法使得所谓的单一JAR部署成为可能(也称作“fat JAR”部署),这意味着,应用及其依赖可以打包在一个单一的JAR文件,并作为一个独立的Java程序运行。

container-less.png

$ java -jar myservice.jar


这种方法的优点是:当应用在进行扩展和收缩时,服务的启动和停止是极其轻松的。另一个优点是部署简单,你只需传递一个JAR文件。

该方法的缺点是lib库的兼容性,你需要自己独立解决一些像事务处理之类的事情,或者需要引入第三方lib库为方案提供支持。随后,如果你需要像持久性之类的支持,你可能需要面对lib库兼容性的问题。

Self-contained

另一个单一JAR部署的变形是使用嵌入式框架构建微服务。在该方法中,框架提供了所需服务的实现,同时,开发者可以选择哪一些东西要包含在该服务中。

你可能认为这与Container-less的解决方案一样,但我在这里要区分一下它们,因为self-cotained方法允许你使用第三方lib库,并且你知道这些lib库是兼容的。

self-contained.png


该方法涉及到像Spring Boot和Wild Swarm之类的工具。

Spring Boot

Spring BootSpring Cloud Netflix 项目对使用Java构建微服务有着很好的支持。Spring Boot允许你挑选各种Spring生态系统中的工具,以及流行的第三方工具,并将这些工具和你的应用打包在一起。Spring Initializr使得你可以使用简单复选框列表的方式完全这一工作,这里有一个简单的Hello World服务的例子,Gist Sinppet

Wildfly Swarm

在Java EE中,与Spring Boot相对应的就是Wildfly Swarm。它允许你挑选所需的部分Java EE规范,并将其和应用以JAR文件的形式打包在一起。Hello World的例子,Gist Snippet

Self-contained方法的优点是你可以只挑选足以让服务运行的组件。

该方法的缺点是配置有点复杂,以及由此产生JAR文件有点大,因为它的构建是为了实际服务中所需的容器功能。

In-container

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/9de1da41012de453332ba4e39f82963a.html