2017-08-30 75 views
0

假设我们有5个服务(用户和授权,产品,订单,库存,历史记录)公开基于REST的API,并通过这些暴露的API在内部服务之间进行内部通信。现在,在Microeservice架构模式中开发这些应用程序时,这些将是不同的单独服务,它们将自我依赖并通过REST /队列相互通信。将请求路由到微服务架构中的相关服务的方法

首先让我们考虑一下,我们正在单个节点上部署它,但现在所有5个服务都只部署在这个单一节点上。因此,一种方法是

  1. (理想)若要通过Netflix的工具链(尤里卡)服务发现和注册机制或通过Zookeper认证和授权例如:/ API/V1 /后请求定向到相关服务产品/ {id}被定向到产品服务,/ api/v1/order/{id}被定向到定购服务等等。
  2. 另一个(虽然不是服务分布在多个节点上的场景的正确选择,但考虑如果我们在单个节点上拥有所有服务并计划快速上线,然后在下一个阶段进行下去对微服务的发现/注册,API网关,断路器方法),其中我们开发所有服务作为单独的Web应用程序部署为在tomcat(基于Spring的应用程序)中的单个战争,并让tomcat处理基于URL的重定向,例如https://ip:port/产品服务/api/v1/products/{id}由tomcat重定向到productservice webapp等。

请问选项2将是一个可行的选择与发展作为一个单独的Web应用程序不同的服务现场去,自力更生与部署在一个Tomcat实例它自己的架构和UI层被消耗和再下一阶段使用个人和单独服务的基本代码,并转向发现/注册方法。

,但我在选项2其中每个服务是一个独立的战争(没有发现/注册表)预见的挑战是路由 - 为每个请求如主入口https://ip:port/productservice/API/v1/products/{id}在去productservice webapp需要通过一个“认证服务”应用程序,然后被路由到适当的服务,并在单独的战争机制中处理此路由(尽管在单个实例中)具有以下选项

  1. 每个请求都需要登录到认证服务应用程序(如何?可以是URL重定向),然后编写一些路由逻辑将认证请求发送到基于REST的所需应用(服务)。此路由可以是基于骆驼的或基于数据库的 - 分析字符串并调用所需服务的REST API。认证应用程序将作为一个API网关。
  2. 其他是你提到的那个(队列丢失)。所有请求都登录到身份验证服务应用程序(如何?可以是URL重定向),然后写入专用于每个服务的单个队列,其中每个服务都订阅了它的特定队列。

回答

0

选项2,所以在每个节点的单个tomcat实例上运行所有独立的webapps是朝着全面的微服务架构迈出的非常好的第一步。实际上你无论如何都需要这一步来稍后实现服务发现/注册。正如你写的 - 它已经给你一定程度的隔离和执行独立迁移的能力(单独的战争)。

只要确保将用于获取服务URL的代码包装到类中,以便只有在添加服务发现(与应用中多个位置的服务的硬编码URL)时才能在一处进行更改。

在选项2上停留一段时间的缺点是您将失去在每个服务级别上扩展的能力。您需要回答这个问题,在您的特定情况下它有多重要。

我在你的文章中没有看到你使用队列的方法。老实说,如果你的解决方案可以使用异步通信,我会强烈鼓励它(请注意,Netflix堆栈主要针对直接REST通信)。

+0

同意你的观点,在未经服务发现的情况下在单独的应用程序中预见的挑战更新帖子是如何在每个请求通过“身份验证服务”应用程序进行身份验证后路由到适当的服务 –