java - 什么是 Java 微服务

标签 java microservices

我一直在网上搜索,但对什么是 Java 微服务有点困惑。我的意思是我知道 Web 服务是什么,我告诉我微服务是每个 wiki 的以下内容:

In computing, microservices is a software architecture style in which complex applications are composed of small, independent processes communicating with each other using language-agnostic APIs.

微服务的属性是:

Properties of microservices architecture:

It's a kind of architecture The services are easy to replace Services are organized around capabilities, e.g. user interface front-end, recommendation, logistics, billing, etc Services can be implemented using different programming languages, databases, hardware and software environment, depending on what fits best Architectures are symmetrical rather than hierarchical (producer - consumer)

但我需要一个具体的 Java 示例来了解我如何制作微服务。有没有人可以提供示例?

最佳答案

微服务顾名思义。这是一项执行非常简单功能的微型服务。

是的,就代码而言,您可能正在查看 REST 服务。请注意,任何其他 API 样式都可以。它不一定是 REST,但它必须语言不可知才能让您获得所有好处。

但这个想法远不止于此。其背后的想法是它们非常专业,并且没有附加到它们的大型业务工作流程。例如,如果您有一项处理付款的服务,然后写入审计日志,然后通知客户。我不会将其视为微服务。写一个审计日志,这可能是一个微服务,也通知客户,处理信用卡。您的系统将通过调用 3 个必要的微服务来协调该业务工作流(上述 3 个步骤)。因此,您的系统是一个协调器,您不必担心业务功能的实现。

微服务不会想太多,它们只是按照指令执行,但它们执行的很快。

简而言之。拿一个很简单的业务功能,在它前面放一个REST API。你有一个微服务。

微服务有几个有趣的属性:

  1. 它们可以独立部署。这很好,因为您可以部署您的应用程序的各个部分,而无需一次关闭所有内容。
  2. 他们可以在自己的孤岛中运行。因此,如果您有一个非常需要内存的微服务,它可以部署在单独的服务器上,这样就不会影响系统的其余部分。
  3. 他们可以使用不同的技术。您可能有 Java 微服务,一些在 .Net 上
  4. 他们控制依赖关系。当开发人员住在一起时,他们倾向于将一个组件的依赖关系转移到下一个组件。在这里你不能。

但是你也应该考虑一些缺点

  1. 在所有这些调用中保持一致的事务要困难得多。如果需要回滚,则需要 JTA 来回滚所有 REST 调用。这可能会很痛苦,而且根据我的经验,效果不是很好。

  2. 如果您没有一致的日志记录和一致的交易 ID,通过系统跟踪交易以进行故障排除可能会非常困难

  3. 如果由于部署可能会产生副作用而不断发生变化,则可能很难找到引入缺陷的位置。

  4. 显然,所有这些 REST 调用累积起来都会非常昂贵。我不一定要谈论传输,因为您的所有微服务很可能都位于同一个数据中心。但是每次通过网络进行调用时,您都必须编码/解码数据,这可能会很快导致 CPU 开销过大。

关于java - 什么是 Java 微服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33680497/

相关文章:

java - Twitter4j 中 Twitter 用户的电子邮件

spring-data-rest - 如何在基于 Spring Data REST/Spring HATEOAS 的(微)服务之间建立关系?

java - 如何在所有微服务中维护相同的 Spring Boot 版本?

node.js - 如何正确使用快速网关对 Web 应用程序进行身份验证?

spring - 如何为 Spring Boot 配置服务器设置超时值

angular - 在微服务环境中使用Angular 2+

java - 如何使用 EWS JAVA api 搜索重定向的电子邮件?

java - 是否有一个 java8 标准库类表示 "possibly with exception"与 java.util.Optional 表示 "possibly null"的方式相同?

java - Neo4j 中的原语计数

java - Datastax Cassandra java 驱动程序 RetryPolicy for Statement with paging