【问题标题】:Microservices - What is the exact difference between service discovery and Service Gateway?微服务 - 服务发现和服务网关之间的确切区别是什么?
【发布时间】:2019-03-21 22:47:15
【问题描述】:

我读过类似的文章:What is the difference between an API-Gateway and an Edge Service?,但仍然不清楚服务发现(比如 Eureka)和服务网关(Zuul)之间的确切区别是什么?有什么指点吗?

【问题讨论】:

    标签: microservices netflix-zuul netflix-eureka


    【解决方案1】:

    服务网关(也称为 API 网关)正在接收来自客户端的请求。它是客户看到的(单一)服务。但是它自己不知道如何做客户想要的,所以它必须将请求转发给另一个服务。它检查 URL 并提取实际为请求提供服务的服务的名称,即后端服务。该后端服务可能位于不同的机器上。它可能有一个动态地址或端口,可能会因不同的原因(节点故障、新节点添加到网络等)不时更改。

    因此,网关不知道将请求转发到哪里。这是服务发现服务 (Eureka) 的工作。 Eureka 知道每个服务位于哪个节点以及在哪个地址和端口上侦听请求。网关询问 Eureka 在哪​​里可以找到后端服务(仅发送其名称)。在 Eureka 响应后,网关将请求转发到该地址。

    【讨论】:

      【解决方案2】:

      如果您同时关注 Zuul 和 Eureka 的责任,这些差异会更容易理解。正如您在下面看到的,每个人都有特定的任务。这就是主要区别。

      【讨论】:

      • @Ebert Toribio - 请发表理论来支持您的回答。
      【解决方案3】:

      API 网关

      在 Api Gateway 中,我们必须使用其 URL 和匹配模式注册服务

      像这样:

       id: order-service
          uri: http://localhost:9003/
          predicates:
            - Path=/order/**
      

      但这里的问题是我们可以在不同的端口上有多个实例。像这样

       uri: http://localhost:9003/
       uri: http://localhost:9004/
       uri: http://localhost:9005/
      

      在这种情况下,网关将无法路由到其他实例。

      服务发现

      在服务发现的情况下,我们必须将客户端服务注册到服务发现(这是另一个服务)。像这样

       eureka:
        client:
          register-with-eureka: true
          fetch-registry: true
          service-url:
           defaultZone: http://localhost:8761/eureka/
      

      现在所有客户端都会自动注册到服务发现,所以即使有多个实例,服务注册也会处理它。

      【讨论】:

        【解决方案4】:

        服务网关在网络第 7 层 (HTTP) 运行,服务发现在网络第 4 层运行。

        Zuul 在第 7 层工作,Eureka 在第 4 层工作

        请参考Kong Gateway which provides a uniform solution

        【讨论】:

          猜你喜欢
          • 2017-11-16
          • 2018-09-01
          • 2018-01-09
          • 2018-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-29
          • 1970-01-01
          相关资源
          最近更新 更多