`
OneAPM_Official
  • 浏览: 24940 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

如何使用 Java 构建微服务?

阅读更多

【编者按】微服务背后的大理念是将大型、复杂且历时长久的应用在架构上设计为内聚的服务,这些服务能够随着时间的流逝而演化。本文主要介绍了利用 Java 生态系统构建微服务的多种方法,并分析了每种方法的利弊。

 

快速预览

  1. 在 Java 生态系统中构建微服务的策略主要有:container-less, self-contained 和 in-container;
  2. Container-less 微服务把应用程序及其所有依赖打包成单一的 jar 文件;
  3. Self-contained 微服务也会将应用及其依赖打包成单一的Jar文件,但它还包含可能含有第三方库的嵌入式框架;
  4. In-container 微服务会打包一个完整的 Java EE 容器,并且它的服务是在 Docker image 中实现。

基于微服务的架构设计是架构师和程序员们面临的一项新挑战。然而,随着语言及工具的不断更新,架构师们完全有能力征服这样的挑战。 Java 也不例外,本文探讨了使用Java生态系统来构建微服务的几种不同方式。

 

介绍

本文不会讨论微服务的好与坏,也不会建议你提前为微服务设计应用程序,或当它们出现在你庞大的应用中时,是否应该剥离这些微服务。

本文介绍的方法并不是唯一的,但应该可以达到抛砖引玉的效果。尽管本文的重点是使用 Java 生态系统来构建微服务,但这些概念同样可以转移到其它语言和技术中。

笔者把本文用到的方法命名为 container-less、self-contained 和 in-containe。这些名称或许不是非常正式,但足以区分相互间的差别。接下来,笔者会详细描述每种方法。

 

Container-less

在此方法中,开发者会将 JVM 之上的任何事物视为应用程序的一部分。

container-less 方法会启用所谓的单 jar 部署(也可称作“fat jar部署”),这也就意味着,应用程序及其所有依赖都会被打包成单一的jar文件,并且作为独立的Java进程运行。

 

 

$ java -jar myservice.jar

 

该方法的第一个优点就是当对应用的规模进行伸缩时,服务很容易按需求快速启动和停止;另一优点是方便部署,你只需要传递一个 jar 文件即可。

该方法的缺点就是库的兼容性。对于事务支持这类问题,你需要自己来实现,或必须引入第三方库才能实现。而后,如果你需要更多支持,例如持续性问题的支持,你就需要解决第三方库之间的兼容性问题。

 

Self-contained

另一种单 jar 部署就是使用一个嵌入式框架来构建服务。在此方法中,框架提供了所需服务的实现方法,开发者可以选择在项目中包括哪些服务。

你可能会认为这个方法与 container-less 完全一样,但笔者认为,两者的区别在于,self-contained 方法会提供一套相互兼容的第三方库。所以,该方法不存在库兼容性问题。

 

 

该方法可能涉及 Spring Boot、Wildfly Swarm 之类的工具。

 

Spring Boot

在Java中,Spring Boot 和 Spring Cloud Netflix 项目对构建微服务提供了很好的支持。 Spring Boot 允许你选择各种 Spring 工具和其它流行的工具,然后把它们和你的应用打包成一个 jar 文件。Spring Initializr 提供了一个简单的复选框列表来完成上面这些事。一个简单的Hello World服务示例如下: Gist Snippet

 

Wildfly Swarm

在 Java EE 中,和 Spring Boot 相对应是 Wildfly Swarm 。它允许你根据自己的需求挑选 Java EE 规范,然后把它们和你的应用程序打包成一个 jar 文件。这里有一个简单的 Hello World 示例:Gist Snippet

self-contained 方法的优点是你可以自主选择用于服务运行的项目。

这种方法的缺点是配置更加复杂,由于它在实际的服务中构建所需的容器功能,由此产生的 jar 文件也会稍大一些。

 

In-container

虽然在 Java EE 容器中部署微服务的开销似乎很大,然而,一些开发者认为,微服务中的“微”并不表示该服务的小或者简单。

 

 

在这些案例中,将 Java EE 容器作为所需平台似乎是合适的。因此,你唯一需要的依赖就是 Java EE API 。注意,由于该依赖的实现是由容器提供的,因此该依赖项已经满足了,这也就意味着所产生的 war 文件是非常精简的,该服务的实现与上面 Wildfly Swarm 的例子是一样的:Gist Snippet

该方法的优点是,容器通过标准 API 提供了经过测试和验证的标准功能的实现。因此,开发者可以完全聚焦于业务功能,并在应用代码之外维护底层代码。

另一个优点是,应用程序代码不依赖 Java EE 应用服务器,无论该应用部署到GlassFishWildFlyWebLogicWebSphere 还是任何与 Java EE 兼容的其他实现系统。

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

 

Docker

现在来谈谈 Docker 。通过把 Java EE 容器和服务实现打包到 Docker 镜像,你可以得到与单一 jar 部署相似的结果。唯一的不同是服务打包在 Docker 镜像中,而不是在 jar 文件中。

 

Dockerfile
FROM jboss/wildfly:9.0.1.Final
ADD myservice.war /opt/jboss/wildfly/standalone/deployments

 

在 Docker 引擎中启动 Docker 镜像可以唤醒服务:

 

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

 

Snoop

细心的读者可能已经在先前的 Spring Boot 代码段中注意到了 @EnableEurekaClient 注解。该注解在 Eureka 中注册服务,使其能够被服务消费者发现。 Eureka 是 Spring Cloud Netflix 包的一部分,并且是一个极易使用和配置服务发现的解决方案。

Java EE 在外部并没有提供这样的功能,但是有一些开源解决方案可以使用,其中一个就是 Snoop它的功能与Eureka相似。要使 Java EE 微服务支持任务查找,唯一要做的是使用 @EnableSnoopClient 注解,如本例所示:Gist Snippet

 

总结

在构建微服务时, Java 是一个非常好的选择。本文中介绍的任何一种方法都可以实现微服务。当然,最好的方法还是根据服务需求而定。对于简单的服务, container-less 或者 self-contained 服务就是不错的选择。不过,借助 in-container ,开发者可以更快更简单地实现更高级的服务。无论针对哪种服务,Java 生态系统都能提供行之有效的实现方法。

(编译自:https://dzone.com/articles/building-microservices-with-java )

OneAPM 为您提供端到端的 Java 应用性能解决方案,我们支持所有常见的 Java 框架及应用服务器,助您快速发现系统瓶颈,定位异常根本原因。分钟级部署,即刻体验,Java 监控从来没有如此简单。想阅读更多技术文章,请访问 OneAPM 官方技术博客

本文转自 OneAPM 官方博客

分享到:
评论

相关推荐

    Java构建微服务指南.pdf

    【Java构建微服务指南】这篇文档探讨了在Java生态系统中构建微服务的三种策略:无容器、自成容器和外置容器。每种方法都有其优缺点,适用于不同场景。 **无容器方案**指的是将整个应用程序及其所有依赖打包成一个...

    Java构建微服务指南.docx

    Java构建微服务是一种常见的实践,尤其在互联网行业中。在Java生态系统中,有三种主要的构建微服务的策略:无容器、自成容器和外置容器。 1. **无容器方案**: 这种方法是将整个应用及其所有依赖打包成一个fat JAR...

    读书笔记:java构建微服务常用方法集合.zip

    读书笔记:java构建微服务常用方法集合

    Apache ServiceComb Java Chassis 给开发者提供一个快速构建微服务的JAVA SDK.rar

    Apache ServiceComb Java Chassis 给开发者提供一个快速构建微服务的JAVA SDK。它包含如下特性: 多种开发风格,REST(JAX-RS、Spring MVC)和RPC 多种通信协议, HTTP over Vert.x、Http Over Servlet、Highway等 统...

    Java-micro一个用于构建微服务的轻量级Java框架

    Java-micro是一个专门为构建微服务设计的轻量级Java框架,它旨在简化微服务的开发过程,提高开发效率,同时保持高性能和可扩展性。在Java开发领域,REST(Representational State Transfer)框架已经成为构建分布式...

    Apache ServiceComb Java Chassis 给开发者提供一个快速构建微服务的JAVA SDK.zip

    Apache ServiceComb Java Chassis 是一个由 Apache 软件基金会维护的开源项目,它为 Java 开发者提供了一个快速构建微服务的 SDK。这个 SDK 主要面向那些希望利用微服务架构来构建分布式系统的开发人员。Java ...

    SpringBoot揭秘快速构建微服务体系

    SpringBoot揭秘快速构建微服务体系,非常不错springboot书籍。

    使用Spring-Cloud构建微服务.pptx

    使用Spring Cloud构建微服务 Spring Cloud是一个相对比较新的微服务框架,2016年才推出1.0的release版本。虽然Spring Cloud时间最短,但是相比Dubbo等RPC框架,Spring Cloud提供的全套的分布式系统解决方案。 ...

    构建微服务云原生应用——介绍.pdf

    该文件标题为“构建微服务云原生应用——介绍.pdf”,顾名思义,该文档涉及的主题和知识点围绕微服务架构、云原生应用以及与之相关的开发、运维实践。 **微服务架构**: 微服务架构是一种设计方法,它将一个复杂的...

    SpringBoot构建微服务

    SpringBoot快速构建微服务。java开发。

    Java是什么意思?什么是java?

    Java是一种广泛使用的高级编程语言,由詹姆斯·高斯林(James Gosling)等人在1990年代初在Sun Microsystems公司开发。最初,这门语言被称为Oak,但后来为了更好地反映其特性,以及与互联网的紧密关系,在1995年更名...

    蚂蚁课堂-第四期-基于SpringCloud构建微服务电商项目

    蚂蚁课堂-第四期-基于SpringCloud构建微服务电商项目 (无密) |____035-自动化运维-基于Docker+Jenkins实现自动化部署.rar |____034-秒杀系统设计-基于责任链设计模式与网关实现限流.rar |____033-秒杀系统设计-基于...

    SpringBoot快速构建微服务

    在"SpringBoot快速构建微服务"这个主题中,我们可以深入探讨以下几个关键知识点: 1. **Spring Boot核心特性**: - 自动配置:Spring Boot根据类路径中的jar文件自动配置相应的bean。 - 内嵌Servlet容器:如...

    docker构建微服务视频教程.txt

    由于资源被csdn自动分配积分,如果没有积分想要学习的同学可以关注我的csdn 私信我 你想要看的视频教程,我会直接分享给你连接地址 https://me.csdn.net/download/weixin_43876824 我才是李先生

    用JAVA实现微型超市系统 java+mysql 案例

    另外,可能使用了构建工具(如Maven或Gradle)来自动化构建、测试和打包过程,确保项目的可重复性和可靠性。 总的来说,这个微型超市系统案例涵盖了JAVA编程、MySQL数据库使用、MVC设计模式、数据库设计与管理、...

    Java服务器高级编程

    8. **微服务架构**:随着微服务理念的流行,开发者需要理解如何使用Docker、Kubernetes等工具部署和管理分布式Java应用,以及使用Spring Cloud构建微服务系统。 9. **数据库交互**:JDBC(Java Database ...

    springcloud快速构建微服务应用

    根据提供的标题、描述以及部分内容,我们可以总结出关于“Spring Cloud快速构建微服务应用”的一系列重要知识点。接下来将详细解析这些内容。 ### Spring Cloud快速构建微服务应用 #### 一、Spring Cloud简介 ...

    springboot构建微服务(-)

    标题中的“Springboot构建微服务”指的是使用Spring Boot框架来开发微服务应用的过程。Spring Boot是Spring框架的一个扩展,旨在简化Spring应用的初始搭建以及开发过程。它通过提供开箱即用的设置,如内嵌的HTTP...

Global site tag (gtag.js) - Google Analytics