微服务——服务发现和服务网关之间的确切区别是什么?
Microservices - What is the exact difference between service discovery and Service Gateway?
我阅读了类似 What is the difference between an API-Gateway and an Edge Service? 的文章,但仍然不清楚服务发现(比如 Eureka)和服务网关 (Zuul) 之间的确切区别是什么?有什么指点吗?
服务网关(a.k.a。API 网关)正在接收来自客户端的请求。这是客户看到的(单一)服务。但它自己并不知道如何做客户想要的,所以它必须将请求转发给另一个服务。它检查 URL 并提取实际服务请求的服务名称,即后端服务。该后端服务可能位于不同的机器上。它可能有一个动态地址或端口,可能会因不同原因(节点故障、新节点添加到网络等)不时更改。
因此,网关不知道将请求转发到哪里。这是服务发现服务 (Eureka) 的工作。 Eureka 知道位于哪个节点以及每个服务正在侦听请求的地址和端口。网关询问 Eureka 在哪里可以找到后端服务(通过只发送它的名字)。 Eureka 响应后,网关将请求转发到该地址。
如果您关注 Zuul 和 Eureka 的职责,那么差异就更容易理解了。正如您在下面看到的,每个人都有特定的任务。这是主要区别。
服务网关在第 7 层网络 (HTTP) 运行,准确地说,服务发现在第 4 层网络运行。
Zuul 工作在第 7 层,Eureka 工作在第 4 层
API 网关
在 Api 网关中,我们必须使用其 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/
现在所有客户端都会自动注册到服务发现,因此即使有多个实例,服务注册也会处理。
我阅读了类似 What is the difference between an API-Gateway and an Edge Service? 的文章,但仍然不清楚服务发现(比如 Eureka)和服务网关 (Zuul) 之间的确切区别是什么?有什么指点吗?
服务网关(a.k.a。API 网关)正在接收来自客户端的请求。这是客户看到的(单一)服务。但它自己并不知道如何做客户想要的,所以它必须将请求转发给另一个服务。它检查 URL 并提取实际服务请求的服务名称,即后端服务。该后端服务可能位于不同的机器上。它可能有一个动态地址或端口,可能会因不同原因(节点故障、新节点添加到网络等)不时更改。
因此,网关不知道将请求转发到哪里。这是服务发现服务 (Eureka) 的工作。 Eureka 知道位于哪个节点以及每个服务正在侦听请求的地址和端口。网关询问 Eureka 在哪里可以找到后端服务(通过只发送它的名字)。 Eureka 响应后,网关将请求转发到该地址。
如果您关注 Zuul 和 Eureka 的职责,那么差异就更容易理解了。正如您在下面看到的,每个人都有特定的任务。这是主要区别。
服务网关在第 7 层网络 (HTTP) 运行,准确地说,服务发现在第 4 层网络运行。
Zuul 工作在第 7 层,Eureka 工作在第 4 层
API 网关
在 Api 网关中,我们必须使用其 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/
现在所有客户端都会自动注册到服务发现,因此即使有多个实例,服务注册也会处理。