• EDS(端点发现服务)
    • 参考

    EDS(端点发现服务)

    EDS 只是 Envoy 中众多的服务发现方式的一种。要想了解 EDS 首先我们需要先知道什么是 Endpoint。

    Endpoint

    Endpoint 即上游主机标识。它的数据结构如下:

    1. {
    2. "address": "{...}",
    3. "health_check_config": "{...}"
    4. }

    其中包括端点的地址和健康检查配置。详情请参考 endpoint.Endpoint。

    终端发现服务(EDS)是一个基于 gRPC 或 REST-JSON API 服务器的 xDS 管理服务,在 Envoy 中用来获取集群成员。集群成员在 Envoy 的术语中被称为“终端”。对于每个集群,Envoy 都会通过发现服务来获取成员的终端。由于以下几个原因,EDS 是首选的服务发现机制:

    • Envoy 对每个上游主机都有明确的了解(与通过 DNS 解析的负载均衡进行路由相比而言),并可以做出更智能的负载均衡决策。
    • 在每个主机的发现 API 响应中携带的额外属性通知 Envoy 负载均衡权重、金丝雀状态、区域等。这些附加属性在负载均衡、统计信息收集等过程中会被 Envoy 网格全局使用。

    Envoy 提供了 Java 和 Go 语言版本的 EDS 和其他发现服务的参考 gRPC 实现。

    通常,主动健康检查与最终一致的服务发现服务数据结合使用,以进行负载均衡和路由决策。

    参考

    • Service Mesh深度学习系列part3—istio源码分析之pilot-discovery模块分析(续)- servicemesher.com
    • EDS - envoyproxy.io
    • endpoint.Endpoint - envoyproxy.io