许多企业在不断努力加快开发速度,减少客户遇到的宕机时间 。微服务架构是更快地迭代、更高效地扩展和创建适应能力更强的应用程序的唯一途径。使用微服务构建的应用程序由各种各样的服务组成,这些服务执行不同的功能,而且通常是使用不同语言编写的。
Java 是一种历史悠久的语言,一些人会问它在微服务环境中是否有用。这篇文章将给出 Java 对现代应用程序(包括微服务)仍有很大价值的一些理由。
以下是您应该知道的关于微服务和 Java 的 5 件事:
1.为什么我应该用 Java 编写微服务?
Java 成为一种流行的语言选择是有其充分理由的。它是一种强大的语言,拥有多年的运行任务关键型应用程序的经验,并随着新编程模式的出现而不断改进。Java 在企业应用程序中得到普遍应用,培养了一大批拥有 Java 技能的软件开发人员。利用现有技能很有意义,甚至从头创建新应用程序时也是如此。微服务为他们提供了陡峭的学习曲线,而且添加一种新编程语言可能增加风险。它给创建、部署和在生产中管理微服务应用程序的过程引入了更多未知因素。
应用程序的前端通常是使用 JavaScript 创建的(尤其是基于 Web 的应用程序)。后端中常常会使用到 Java,用于获得经得起实践检验的数据管理。整个编程领域仍有很大的变化空间,但毫无疑问,Java 非常适合编写微服务。
2.Java EE 在微服务领域为我提供了什么?
Java Platform, Enterprise Edition 或 Java EE 是由社区推动的企业 Java 应用程序标准。它提供了各种各样的规范,受到大量供应商的支持。Java EE 中的许多标准非常适合微服务应用程序:使用 JAX-RS 提供 API,使用 JPA 处理数据,使用 CDI 执行依赖注入和生命周期管理,以便能够更轻松地在应用程序中执行测试。
3.我应该如何打包 Java 微服务?
微服务应用程序应包含部署所需的一切资源。在不更改代码或部署包的情况下,单个不可变的部署包应该能够从开发环境迁移到生产环境,这明显背离了传统 Java EE 应用程序的标准。 创建一个 war 文件,然后将它交给运营团队,让他们添加应用服务器,这显然不是微服务最佳实践。相反,有两种选择:已打包服务器或容器。已打包服务器可以是可执行的 JAR 或 zip 文件,这无关紧要。该数据包应包含应用程序、任何依赖项和应用服务器。WebSphere Application Server Liberty、Wildfly Swarm 和 Spring Boot 都提供了此选项。第二个选项 是创建一个容器,通常是 Docker 容器。使用 Docker 容器会创建一个将应用程序分离的额外层。它们可部署到本地和云中,在开发和生产环境之间实现最大的平等性。
4.用于 Java 开发中的基于微服务的工具是否存在?
是,在 Java 中开发微服务时,有许多工具可简化开发工作。服务发现解决方案(比如 Netflix Eureka、Consul 或 Amalgam8)很容易与 Java 微服务关联起来。为了提高恢复和容错能力,Netflix Hystrix 使用了一个 Java 客户端提供了隔板和断路器功能。还有其他一些可帮助测试新微服务的不错工具。您会发现,在测试微服务时使用模拟对象非常有用,JMockit 和 Mockito 简化了模拟对象的创建。
5.我是否需要在 Java 中编写所有应用程序?
不需要,您不应该为了使用它而使用它。如果您已经掌握了一些 Java 技能,或者确定微服务的一些功能使用 Java 更容易完成,那么您可以使用 Java。否则,可以挑选适合自己状况的语言。请保守一点,您应该不想维护一个使用了 10 种不同语言的微服务系统,但也不要害怕使用多种语言。要让您的工作更轻松,可以采用一种通用数据结构(比如 JSON)和 API 文档工具(比如 Swagger)。您的微服务应采用一种与语言无关的协议(比如 REST)进行通信,所以它们应始终能完美地协同工作。
更多信息
如您所见,Java 非常适合微服务是有诸多原因的(本文仅介绍了其中一小部分原因)。 如果您想了解有关的更多信息,或者掌握一些最佳实践技巧,请持续关注我们后续推出的一系列关于 Java 和微服务的文章。