微服务,客户端发现
Micro-services, client-side discovery
我是微服务的新手,所以在阅读它时,我无法理解下面一段在谈论负载平衡时,客户端如何做这样的事情?
"When using client‑side discovery, the client is responsible for determining the network locations of available service instances and load balancing requests across them."
the client is responsible for determining the network locations of
available service instances and load balancing requests across them.
我不确定您在哪里读到的,但是服务消费者被迫实施负载平衡的整个概念是荒谬的。
客户端发现模式实际上只是另一种说法,即通过服务注册表将调用路由(有时还包括通道构建)延迟到 运行 时间。正如 Richardson says 在他的模式页面中:
When making a request to a service, the client obtains the location of
a service instance by querying a Service Registry, which knows the
locations of all service instances.
负载平衡是一个完全不同的问题,并且总是会被委托,理想情况下是委托给实际的负载均衡器,尽管根据您使用的服务平台,您可能可以访问某种进程内分发器。
微服务架构涉及许多可能具有层次依赖性的服务。例如,服务 A 依赖于服务 B,服务 B 又依赖于服务 C,依此类推。同样,每个服务可以有多个实例,并且它们的部署位置可能会动态变化。例如,服务 C 的点击率过多,您可以动态扩展 up/down 此服务。
通常,最终用户无法直接访问任何这些微服务。它只能通过位置固定的边缘服务访问,比如 www.microservice.com/apis,并将负责进行身份验证、速率限制等。因此,所有服务调用都将通过边缘-现阶段的服务和负载均衡主要使用硬件负载均衡器或Amazon ELBs来实现。
现在,假设用户想要访问服务 A。他必须通过边缘服务将请求委托给服务 A。服务 A 必须调用服务 B 以获取一些信息。在这种情况下,服务 A 是服务 B 的客户端,服务 A 需要找到 B 的所有可用实例,然后调用其中一个实例。这就是 Consul,Eureka 等微服务注册表的用武之地。每个服务实例将不断更新其状态(IP、端口、Up/Down 等)到注册中心。边缘服务也将使用此注册表来查找服务 A 的实例位置。
服务 A 还应确保对服务 B 的所有调用都是负载平衡的。这里用ELB做负载均衡是不可行的,因为这意味着如果你有50个服务,你就需要有50个ELB。有一些软件负载平衡器可以更有效地做到这一点。例如:Ribbon 是一个很好的 Http 客户端库,具有负载平衡器支持,用 Java 编写。
我是微服务的新手,所以在阅读它时,我无法理解下面一段在谈论负载平衡时,客户端如何做这样的事情?
"When using client‑side discovery, the client is responsible for determining the network locations of available service instances and load balancing requests across them."
the client is responsible for determining the network locations of available service instances and load balancing requests across them.
我不确定您在哪里读到的,但是服务消费者被迫实施负载平衡的整个概念是荒谬的。
客户端发现模式实际上只是另一种说法,即通过服务注册表将调用路由(有时还包括通道构建)延迟到 运行 时间。正如 Richardson says 在他的模式页面中:
When making a request to a service, the client obtains the location of a service instance by querying a Service Registry, which knows the locations of all service instances.
负载平衡是一个完全不同的问题,并且总是会被委托,理想情况下是委托给实际的负载均衡器,尽管根据您使用的服务平台,您可能可以访问某种进程内分发器。
微服务架构涉及许多可能具有层次依赖性的服务。例如,服务 A 依赖于服务 B,服务 B 又依赖于服务 C,依此类推。同样,每个服务可以有多个实例,并且它们的部署位置可能会动态变化。例如,服务 C 的点击率过多,您可以动态扩展 up/down 此服务。
通常,最终用户无法直接访问任何这些微服务。它只能通过位置固定的边缘服务访问,比如 www.microservice.com/apis,并将负责进行身份验证、速率限制等。因此,所有服务调用都将通过边缘-现阶段的服务和负载均衡主要使用硬件负载均衡器或Amazon ELBs来实现。
现在,假设用户想要访问服务 A。他必须通过边缘服务将请求委托给服务 A。服务 A 必须调用服务 B 以获取一些信息。在这种情况下,服务 A 是服务 B 的客户端,服务 A 需要找到 B 的所有可用实例,然后调用其中一个实例。这就是 Consul,Eureka 等微服务注册表的用武之地。每个服务实例将不断更新其状态(IP、端口、Up/Down 等)到注册中心。边缘服务也将使用此注册表来查找服务 A 的实例位置。
服务 A 还应确保对服务 B 的所有调用都是负载平衡的。这里用ELB做负载均衡是不可行的,因为这意味着如果你有50个服务,你就需要有50个ELB。有一些软件负载平衡器可以更有效地做到这一点。例如:Ribbon 是一个很好的 Http 客户端库,具有负载平衡器支持,用 Java 编写。