《系统设计》课程学习笔记—服务发现

120 阅读2分钟

服务发现用来检测计算机网络中的服务。服务发现协议(Service Discovery Protocol ,SDP)是通过识别资源来实现网络检测的网络标准。

为什么我们需要服务发现?

在单体应用程序中,服务通过语言级方法或过程调用相互调用。然而,基于微服务的现代应用程序通常在虚拟化或容器化环境中运行,其中服务实例的数量及其位置动态变化。因此,我们需要一种机制,使服务的客户端能够向一组动态变化的短暂服务实例发出请求。

实现

有两种主要的服务发现模式:

客户端发现

client-side-service-discovery.webp

在这种方法中,客户端通过查询负责管理和存储所有服务的网络位置的服务注册表来获得另一服务的位置。

服务器端发现

server-side-service-discovery.webp

在这种方法中,我们使用一个中间组件,如负载均衡器。客户端通过负载均衡器向服务发出请求,然后将请求转发到可用的服务实例。

服务注册中心

服务注册中心一般是一个数据库,包含客户端可以访问的服务实例的网络位置。服务注册中心必须是高度可用和实施更新的。

服务注册

我们还需要一种获取服务信息的方法,通常称为服务注册。让我们看看两种常用的服务注册方法:

自注册

当使用自注册模型时,服务实例负责在服务注册中心注册和注销自身的服务。此外,如果需要,服务实例会发送心跳请求以保持其注册处于活跃状态。

第三方注册

注册中心通过轮询部署环境或订阅事件来跟踪运行实例的更改。当它检测到一个新的可用服务实例时,它将其记录在数据库中。服务注册中心还会注销终止的服务实例。

服务网格

服务到服务通信在分布式应用程序中至关重要,但随着服务数量的增加,在应用程序集群内和跨应用程序集群路由这种通信变得越来越复杂。服务网格(Service mesh)支持服务之间的管理、可观察和安全通信。它使用服务发现协议来检测服务。Istio 和 envoy是一些最常用的服务网格技术。

例子

以下是一些常用的服务发现基础工具: