我一直在网上搜索,但我对Java微服务到底是什么有点困惑。我的意思是我知道什么是Web服务,我被告知微服务是每个wiki的以下内容:
微服务(英语:Microservices)是一种软件架构风格,其中复杂的应用程序由小型、独立的进程组成,这些进程使用与语言无关的API相互通信。
微服务的属性为:
微服务架构的属性:
它是一种体系结构服务易于替换服务围绕功能进行组织,例如用户界面前端、推荐、物流、计费等服务可以使用不同的编程语言、数据库、硬件和软件环境来实现,具体取决于哪种最适合体系结构是对称的,而不是分层的(生产者-消费者)
我需要一个具体的Java例子来理解我如何制作一个微服务。有人可以提供一个例子吗?
4条答案
按热度按时间vyswwuz21#
微服务就像它的名字所暗示的那样,它是一个执行非常简单功能的微小服务。
所以,就代码而言,你可能正在考虑REST服务。注意,任何其他API风格都可以。它不一定是REST,但是它必须是语言不可知的,这样你才能获得所有的好处。
但它的理念远不止于此。它背后的理念是,这些服务非常专业,没有大的业务流程。例如,如果你有一个处理付款的服务,然后写一个审计日志,然后通知客户。我不认为这是一个微服务。写一个审计日志,这可能是一个微服务,也通知客户。处理信用卡。您的系统将通过调用3个必要的微服务来协调业务工作流(上面提到的3个步骤)。因此,您的系统是一个协调者,您不必担心实现业务功能。
微服务不会去想太多,他们只是按照吩咐去做,但他们做得很快。
简而言之,取一个非常简单的业务函数,在它前面放一个REST API,你就有了一个微服务。
微服务有几个有趣的属性:
1.它们可以独立部署,这很好,因为你可以部署你的应用程序的各个部分,而不必一次把所有的东西都拿下来。
1.它们可以在自己的筒仓中运行,所以如果你有一个非常需要内存的微服务,它可以部署在一个单独的服务器上,这样就不会影响你系统的其他部分。
1.它们可以使用不同的技术。您可以使用Java中的微服务,也可以使用.Net中的微服务
1.他们保持依赖性在检查中。开发人员有一种倾向,出血依赖性从一个组件到下一个当他们生活在一起。在这里你不能。
但您也应该考虑一些缺点
1.在所有这些调用中维护一致的事务要困难得多。如果您需要回滚,您将需要JTA回滚所有REST调用。这可能是一个痛苦的过程,并且在我的经验中执行得不是很好。
1.如果您没有一致的日志记录和一致的事务ID,那么通过系统跟踪事务以进行故障排除可能会非常粗略
1.如果由于可能有副作用的部署而导致地面不断移动,那么找到缺陷引入的位置可能会变得很棘手。
1.显然,所有这些REST调用的开销会非常大。我不一定要谈论传输,因为很可能所有的微服务都位于同一个数据中心。但每次通过网络进行调用时,都必须整理/解组数据,这会很快导致CPU开销增加。
w7t8yxp52#
您可以检查以下内容:https://spring.io/blog/2015/01/20/microservice-registration-and-discovery-with-spring-cloud-and-netflix-s-eureka
此示例基于以下服务:
Eureka是一个基于REST(表述性状态转移)的服务,主要用于AWS云中,用于定位服务,以实现中间层服务器的负载平衡和故障转移。
Eureka只是一个服务注册表,它保存了所有已启动的服务示例的服务器名和端口详细信息。
Zuul是一个边缘服务,提供动态路由、监控、弹性、安全性等。
它是微服务客户端的端点,所有其他服务示例都在secured box中保护,而Zuul则暴露给客户端,客户端拦截所有客户端请求。
Ribbon是一个内置软件负载平衡器的进程间通信(远程过程调用)库。主要使用模型涉及具有各种序列化方案支持的REST调用。
Ribbon与Zuul结合使用,当运行N个微服务示例时,使用大量算法来选择性能最佳的服务节点来服务请求。
简单地说,Zuul拦截客户端请求,并根据请求URL Zuul通过使用Eureka服务发现找到微服务示例的IP和端口。Ribbon选择最佳服务节点来服务请求,然后从Zuul将请求路由到相应的微服务示例。
我们可以根据网络流量添加或删除"N"个服务节点。
ubby3x7f3#
下面是一些用Java编写的微服务的具体示例。这些微服务的设计是有教育意义的,所以希望这意味着你应该能够沿着。
不建议从头开始编写Java微服务,因为有很多框架可以加速您的开发。两个最流行的微服务开发Java框架是Sping Boot 和Dropwizard。
feed3 project使用Dropwizard实现了一个基本的多国语言持久新闻提要微服务。
feed8 project使用Sping Boot 实现相同功能的微服务。
甚至还有一个Spring Boot vs Dropwizard article可以分析差异。
juud5qan4#