微服务是不固定的,但必须是可寻址的。消费者需要能够在不事先知道其确切位置的情况下与微服务进行通信,特别是由于这个位置可能随着时间而改变。位置透明性提供了可伸缩性和动态性:消费者可以使用轮询策略调用微服务的不同实例,而在两个调用之间,微服务可能被移动或更新。

位置透明性可以通过称为服务发现的模式来解决。每个微服务都应该宣布/声明如何调用它,以及它的特性,包括它的位置,以及其他元数据,比如安全策略或版本。这些宣布/声明存储在服务发现基础设施中,通常是由执行环境提供的服务注册中心。微服务还可以决定从注册中心撤回服务。寻找另一个服务的微服务也可以搜索这个服务注册表来查找匹配的服务,选择最好的服务(使用任何类型的标准),并开始使用它。图4-1描述了这些交互。

图4-1 :与服务注册中心的交互

可以使用两种类型的模式来消费服务。在使用客户端服务发现(client-side service discovery)时,消费者服务根据它们在服务注册中心的名称和元数据查找服务,选择匹配的服务并使用它。从服务注册中心检索的引用包含指向微服务的直接链接。由于微服务是动态实体,服务发现基础设施(service discovery infrastructure)不仅必须允许提供者发布服务以及消费者来查找服务,还必须提供关于服务的“入境”和“出境”的信息。在使用客户端服务发现时,服务注册中心可以采取各种形式,例如分布式数据结构、专用的基础设施(如Consul),或者存储在一个目录服务中,例如Apache Zookeeper或Redis。

或者,您可以使用服务器端服务发现(server-side service discovery)并使用一个负载均衡器、路由器、代理或API网关管理您的发现(图4-2)。消费者仍然根据其名称和元数据查找服务,但检索到的是一个虚拟地址。当消费者调用服务时,请求被路由到实际的实现。您将在Kubernetes或使用AWS可伸缩负载均衡器时使用该机制。

图4 - 2:服务器端服务发现

results matching ""

    No results matching ""