使用 Java 构建微服务

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介:

快速浏览

  1. 在Java生态中,构建微服务的策略包括Container-less,Self-contained,以及In-container等。
  2. Container-less微服务将应用及其依赖打包成一个单一的jar文件。
  3. Self-contained微服务也是打包成一个单一的Jar文件,但它还包括一个嵌入式框架,这个框架含有可选的第三方lib,当然这些lib是兼容的。
  4. 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程序运行。

image

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

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

Self-contained

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

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

image

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

Spring Boot

Spring Boot和Spring 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

虽然要求一个完整的Java EE容器能够部署一个微服务,似乎需要很大的开销,但是,需要记住的是:一些开发者主张微服务的“微”不意味着这个服务要微小或简单。

image

在这些案例中,将Java EE容器视为所需平台似乎是合适的,因为你所需的唯一依赖是Java EE API。注意:由于其实现是由容器提供,因此该依赖项已经满足了。这意味着由此产生的WAR文件是极其精实的,该服务的实现和上述Wildfly Swarm的例子一样,参考这里,Gist Snippet。

这种方法的优点是该容器通过标准APIs提供了测试和验证标准功能的实现,因此,作为一名开发者,你可以完全集中于业务功能,并且在应用代码之外维护底层代码。

该方法的另一个优点是实际应用程序代码并不依赖于部署该代码的Java EE应用服务器,无论是GlassFish,WildFly,Weblogic,WebSphere,或其他Java EE兼容性实现。

该方法的缺点是你需要将该服务部署在容器中,这增加了部署的复杂性。

Docker

Docker从这里开始。通过将Java EE容器和服务实现打包进Docker镜像,你可以或多或少地取得和单一JAR开发同样效果。不同的是服务现在位于容器内,而不是JAR文件中。

Dockerfile
FROM jboss/wildfly:9.0.0.1.final
ADD myservice.war /opt/jboss/wildfly/standalone/deployments

通过启动Docker引擎中的Docker镜像,唤醒该服务。

docker run -it -p 8081:8080 myorganization/myservice

Snoop

细心的读者可能之前注意到Spring Boot代码段中的@EnableErekaClient注解,该注解在Eureka中进行服务注册,使得它可以被服务请求者所发现。Eureka是 Spring Cloud Netflix包中的一部分,它是一种极其容易使用和配置的服务发现解决方案。

Java EE没有在外部提供这样的机能,但这里有几种开源方案。其中一种就是Snoop,其功能与Eureka类似。为了使一个Java EE微服务可以用于服务查找,唯一需要做的是使用@EnableSnoopClient注解,如本例所示:Gist Snippet。

总结

在构建微服务时,Java是一个很好的选择。这里所描述的方法都可以很好地完成任务。至于你个人的特殊情况,最佳方法取决于其服务 需求。对于简单的服务,一个container-less或者self-contained服务是最佳选择,但借助于in-container的实现,开 发者可以更快,更简单地实现高级服务。总之,对于微服务的实现,Java是一种行之有效的生态系统。

更多关于微服务的见解,JVM语言,以及在Java中的趋势,可以在 DZone Guide to the Java Ecosystem!获取到。

原文链接: Building Microservices With Java(翻译:洪国安)

文章转载自 开源中国社区[https://www.oschina.net]

相关文章
|
10天前
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
38 11
|
1月前
|
监控 网络协议 Nacos
Nacos:构建微服务架构的基石
Nacos:构建微服务架构的基石
103 2
|
28天前
|
XML Java 测试技术
从零开始学 Maven:简化 Java 项目的构建与管理
Maven 是一个由 Apache 软件基金会开发的项目管理和构建自动化工具。它主要用在 Java 项目中,但也可以用于其他类型的项目。
45 1
从零开始学 Maven:简化 Java 项目的构建与管理
|
26天前
|
弹性计算 持续交付 API
构建高效后端服务:微服务架构的深度解析与实践
在当今快速发展的软件行业中,构建高效、可扩展且易于维护的后端服务是每个技术团队的追求。本文将深入探讨微服务架构的核心概念、设计原则及其在实际项目中的应用,通过具体案例分析,展示如何利用微服务架构解决传统单体应用面临的挑战,提升系统的灵活性和响应速度。我们将从微服务的拆分策略、通信机制、服务发现、配置管理、以及持续集成/持续部署(CI/CD)等方面进行全面剖析,旨在为读者提供一套实用的微服务实施指南。
|
24天前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
81 5
|
22天前
|
监控 安全 持续交付
构建高效微服务架构:策略与实践####
在数字化转型的浪潮中,微服务架构凭借其高度解耦、灵活扩展和易于维护的特点,成为现代企业应用开发的首选。本文深入探讨了构建高效微服务架构的关键策略与实战经验,从服务拆分的艺术到通信机制的选择,再到容器化部署与持续集成/持续部署(CI/CD)的实践,旨在为开发者提供一套全面的微服务设计与实现指南。通过具体案例分析,揭示如何避免常见陷阱,优化系统性能,确保系统的高可用性与可扩展性,助力企业在复杂多变的市场环境中保持竞争力。 ####
38 2
|
23天前
|
弹性计算 Kubernetes API
构建高效后端服务:微服务架构的深度剖析与实践####
本文深入探讨了微服务架构的核心理念、设计原则及实现策略,旨在为开发者提供一套系统化的方法论,助力其构建灵活、可扩展且易于维护的后端服务体系。通过案例分析与实战经验分享,揭示了微服务在提升开发效率、优化资源利用及增强系统稳定性方面的关键作用。文章首先概述了微服务架构的基本概念,随后详细阐述了其在后端开发中的应用优势与面临的挑战,最后结合具体实例,展示了如何从零开始规划并实施一个基于微服务的后端项目。 ####
|
27天前
|
监控 持续交付 API
深入理解微服务架构:构建高效、可扩展的系统
深入理解微服务架构:构建高效、可扩展的系统
46 3
|
26天前
|
消息中间件 监控 安全
构建高效微服务架构:最佳实践与挑战
在现代软件开发中,微服务架构因其高度的可扩展性、灵活性和敏捷性而受到青睐。本文深入探讨了构建高效微服务架构的关键策略,包括服务的划分、通信机制、数据管理、部署与监控等方面的最佳实践。同时,文章也分析了在实施过程中可能遇到的挑战,如服务间的依赖管理、数据一致性问题、安全考量及性能优化等,并提出了相应的解决方案。通过实际案例分析,本文旨在为开发者提供一套实用的指南,帮助他们在构建微服务系统时能够有效规避风险,提升系统的健壮性和用户体验。
|
1月前
|
监控 持续交付 数据库
构建高效的后端服务:微服务架构的深度解析
在现代软件开发中,微服务架构已成为提升系统可扩展性、灵活性和维护性的关键。本文深入探讨了微服务架构的核心概念、设计原则和最佳实践,通过案例分析展示了如何在实际项目中有效地实施微服务策略,以及面临的挑战和解决方案。文章旨在为开发者提供一套完整的指导框架,帮助他们构建出更加高效、稳定的后端服务。