微服务-服务发现和服务网关之间的确切区别是什么?

时间:2018-10-17 09:41:08

标签: microservices netflix-zuul netflix-eureka

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

enter image description here

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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/

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

答案 2 :(得分:0)

如果您专注于Zuul和Eureka的职责,则差异是可以理解的。如下所示,每个任务都有特定的任务。那就是主要区别。

enter image description here

答案 3 :(得分:0)

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

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

请参考Kong Gateway which provides a uniform solution