Open Skylark-hjyp opened 10 months ago
服务治理分为两种模式,有sidecar和无sidecar。 两者都分为控制面和数据面,控制面负责收集并下发xds资源,数据面负责解析资源,根据资源进行服务治理。 有sidecar为代表的是envoy,无sidecar需要框架自己实现。
sidecar
xds
envoy
LDS
Filter Chain
RDS
Route
Cluster
CDS
应用集群
Endpoint
K8s
Service
EDS
Pod
V代表版本号,R代表资源名称,T代表资源类型。 ADS: 通过Stream流实现,全双工的。当配置更新后,控制面可以动态获取并推送配置到数据面,数据面更新路由规则。
ADS
Stream流
推送配置
更新路由规则
用户请求整体流程 RDS资源格式:最终会找到ClusterName
ClusterName
xDS REST and gRPC protocol
主要包括两步: 1、资源(xds)的获取与更新。 2、根据资源进行服务治理(将请求发送到对应的provider)。
AdsObserver: 观察者,服务端响应后负责调用对应的资源Protocol解析。 XdsRouter.doRoute() -> PilotExchanger -> xxxProtocol -> AdsObserver XdsChannel(建立连接) -> Bootstrap(从文件中获取启动信息)
资源Protocol
pod
VirtualService
destination.subset
weight
subset
DestinationRule
grpc-xds
dubbo-xds
envoy server
Java
Go
good job
概述
服务治理分为两种模式,有
sidecar
和无sidecar
。 两者都分为控制面和数据面,控制面负责收集并下发xds
资源,数据面负责解析资源,根据资源进行服务治理。 有sidecar
为代表的是envoy
,无sidecar
需要框架自己实现。Envoy
资源类型
LDS
: 服务或程序的监听器,当监听到请求时,通过Filter Chain
对请求进行处理。RDS
:Route
规则规定请求如何路由到哪个Cluster
。CDS
: 可以理解应用集群
,对应提供相同服务的一个或多个Endpoint
, 类似K8s
中Service
概念,一个CDS
包含一组EDS
。EDS
: 具体的应用实例,类似于K8s
中的一个Pod
。通信过程
V代表版本号,R代表资源名称,T代表资源类型。
ADS
: 通过Stream流
实现,全双工的。当配置更新后,控制面可以动态获取并推送配置
到数据面,数据面更新路由规则
。资源使用
用户请求整体流程
RDS
资源格式:最终会找到ClusterName
参考链接
xDS REST and gRPC protocol
实现
原理
主要包括两步: 1、资源(
xds
)的获取与更新。 2、根据资源进行服务治理(将请求发送到对应的provider)。Dubbo实现
AdsObserver: 观察者,服务端响应后负责调用对应的
资源Protocol
解析。 XdsRouter.doRoute() -> PilotExchanger -> xxxProtocol -> AdsObserver XdsChannel(建立连接) -> Bootstrap(从文件中获取启动信息)gRPC实现
功能
流量管理
pod
打上不同的标签部署在同一个Service
中;VirtualService
中定义通过destination.subset
和weight
指定该subset
下pod
分配的流量比例;DestinationRule
负责划分pod
中的标签划分subset
)可观测性
安全
其他链接
grpc-xds
实现proposal:https://github.com/grpc/proposal/tree/mastergrpc-xds
概述:https://istio.io/v1.15/blog/2021/proxyless-grpc/dubbo-xds
实现源码:https://github.com/apache/dubbo-spi-extensions/tree/master/dubbo-xdsenvoy server
端Java
实现:https://github.com/envoyproxy/java-control-planeenvoy server
端Go
实现:https://github.com/grpc/grpc-go/blob/master/test/xds/xds_server_integration_test.go