什么是Java MicroService

时间:2015-11-12 20:16:11

标签: java microservices

我一直在网上搜索,但我对Java微服务究竟是什么感到困惑。我的意思是我知道什么是Web服务,并且我告诉每个维基的微服务如下:

  

在计算领域,微服务是一种软件架构风格,其中复杂的应用程序由使用与语言无关的API相互通信的小型独立进程组成。

和微服务的属性是:

  

微服务架构的属性:

     

它是一种架构服务很容易取代服务   围绕能力组织,例如用户界面前端,   推荐,后勤,计费等服务可以实施   使用不同的编程语言,数据库,硬件和   软件环境,取决于最适合的架构   对称而不是等级(生产者 - 消费者)

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

3 个答案:

答案 0 :(得分:8)

微服务就像它的名字所暗示的那样。它是一项服务非常简单的小型服务。

所以是的,就代码而言,您可能正在寻找REST服务。请注意,任何其他API样式都可以。它不一定是REST,但它必须语言无关才能吸引所有的好处。

但这个想法比那更重要。它背后的想法是,它们非常专业,并且没有大的业务工作流程。例如,如果您有一个处理付款的服务,则写入审核日志,然后通知客户。我不认为这是一个微服务。编写审计日志,可能是微服务,也通知客户,也处理信用卡。您的系统将通过调用3个必要的微服务来协调该业务工作流程(上述3个步骤)。因此,您的系统是协调员,您不必担心实施业务功能。

微服务不要试图想太多,他们只是按照他们的说法去做,但他们很快就会这么做。

所以简而言之。采用一个非常简单的业务功能,在它前面放置一个REST API。你有一个微服务。

微服务有几个有趣的属性

  1. 它们可以独立部署。这很不错,因为您可以部署应用程序的各个部分,而无需一次性完成所有操作。
  2. 他们可以在自己的孤岛中奔跑。因此,如果您的微服务非常耗费内存,则可以将其部署在单独的服务器上,这样就不会影响系统的其他部分。
  3. 他们可以使用不同的技术。你可能有Java的微服务,有些是.Net
  4. 他们保持依赖关系。当开发人员生活在一起时,他们倾向于将依赖关系从一个组件流向另一个组件。在这里你可以
  5. 但你也应该考虑一些缺点

    1. 在所有这些调用中维护一致的事务要困难得多。如果需要回滚,则需要JTA回滚所有REST调用。这可能是一种痛苦,并且在我的经历中表现不佳。

    2. 如果您没有一致的记录和一致的交易ID,那么通过系统跟踪交易以进行故障排除可能非常粗略

    3. 如果由于可能产生副作用的部署导致地面不断变化,找到缺陷的位置可能会很棘手。

    4. 显然,所有这些REST调用都可能非常昂贵。我不一定在谈论传输,因为它可能所有的微服务都存在于同一个数据中心。但是每次通过网络拨打电话时,你都必须整理/解组你的数据,这可能会很快降低CPU的成本。

答案 1 :(得分:2)

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

此示例基于以下服务:

Netflix Eureka:

Eureka是一种基于REST(Representational State Transfer)的服务,主要用于AWS云,用于定位服务,以实现中间层服务器的负载平衡和故障转移。

Eureka只是一个Service Registry,包含所有已启动的服务实例severname和端口详细信息。

Netflix Zuul:

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

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

Netflix功能区:

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

功能区与Zuul结合使用,在N个微服务实例运行时,使用大量算法选择性能最佳的服务节点来处理请求。

简单来说,Zuul拦截客户端请求,并根据请求URL Zuul通过使用Eureka服务发现找到Microservice实例的ip和端口。功能区选择最佳服务节点来为请求提供服务,然后从Zuul请求路由到相应的微服务实例。

从我的项目角度看优势:

我们可以添加或删除' N'基于网络流量的服务节点数。

答案 2 :(得分:0)

以下是一些用Java编写的微服务的具体示例。这些微服务在设计上具有教育意义,因此希望这意味着您应该能够继续学习。

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

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

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

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