什么是 Java 微服务

What is a Java MicroService

我一直在网上搜索,但我对 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 个步骤)。所以你的系统是一个协调者,你不用担心实现业务功能。

微服务不会想太多,他们只是按照他们被告知的去做,但他们做的很快。

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

微服务有几个有趣的属性

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

但你也应该考虑一些缺点

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

  2. 如果您没有一致的日志记录和一致的交易 ID

  3. ,通过系统跟踪交易以进行故障排除可能会非常困难
  4. 如果由于部署可能会产生副作用而不断变化,可能很难找到引入缺陷的位置。

  5. 显然,所有这些 REST 调用叠加起来会非常昂贵。我不一定要谈论传输,因为您的所有微服务很可能都位于同一个数据中心。但是每次通过网络拨打电话时,您都必须 marshal/unmarshal 您的数据,这可能很快就会变得昂贵 CPU-wise。

你可以检查这个: https://spring.io/blog/2015/01/20/microservice-registration-and-discovery-with-spring-cloud-and-netflix-s-eureka

此示例基于以下服务:

Netflix尤里卡:

Eureka 是一种基于 REST(表述性状态传输)的服务,主要用于 AWS 云中定位服务,以实现 middle-tier 服务器的负载平衡和故障转移。

Eureka 只是一个服务注册表,包含所有已启动的服务实例服务器名和端口详细信息。

Netflix 祖尔:

Zuul 是一种边缘服务,可提供动态路由、监控、弹性、安全性等。

它是微服务客户端的端点。所有其他服务实例都在安全箱中受到保护,而 Zuul 暴露给拦截所有客户端请求的客户端。

Netflix 功能区:

Ribbon 是一个带有内置软件负载平衡器的进程间通信(远程过程调用)库。主要使用模型涉及具有各种序列化方案支持的 REST 调用。

Ribbon 与 Zuul 结合使用,当 N 个微服务实例为 运行.

时,使用大量算法选择性能最佳的服务节点来服务请求

简单来说,Zuul拦截客户端请求,根据请求URLZuul通过Eureka服务发现找到微服务实例的ip和端口。 Ribbon 选择最好的服务节点来为请求提供服务,然后将来自 Zuul 的请求路由到相应的微服务实例。

我的项目优势:

我们可以根据网络流量添加或删除 'N' 个服务节点。

这里有一些用Java编写的微服务的具体例子。这些微服务的设计具有教育意义,因此希望这意味着您应该能够跟进。

不建议从头开始编写 Java 微服务,因为有很多框架可以加速您的开发。两个最流行的 Java 微服务开发框架是 Spring Boot 和 Dropwizard。

feed3 project 使用 Dropwizard 实现了一个基本的多语言持久新闻提要微服务。

feed8 project 使用 Spring Boot 实现相同功能的相同微服务。

甚至还有一个Spring Boot vs Dropwizard article分析差异