Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【XDS】Dubbo xds 分享-1 #273

Open
huajiao-hjyp opened this issue Dec 31, 2023 · 1 comment
Open

【XDS】Dubbo xds 分享-1 #273

huajiao-hjyp opened this issue Dec 31, 2023 · 1 comment

Comments

@huajiao-hjyp
Copy link

概述

服务治理分为两种模式,有sidecar和无sidecar
两者都分为控制面和数据面,控制面负责收集并下发xds资源,数据面负责解析资源,根据资源进行服务治理。
sidecar为代表的是envoy,无sidecar需要框架自己实现。
image-20231230181806241

Envoy

资源类型

  • LDS: 服务或程序的监听器,当监听到请求时,通过Filter Chain对请求进行处理。
  • RDS: Route规则规定请求如何路由到哪个Cluster
  • CDS: 可以理解应用集群,对应提供相同服务的一个或多个Endpoint, 类似K8sService概念,一个CDS包含一组EDS
  • EDS: 具体的应用实例,类似于K8s中的一个Pod

通信过程

V代表版本号,R代表资源名称,T代表资源类型。
image-20231230175754952
ADS: 通过Stream流实现,全双工的。当配置更新后,控制面可以动态获取并推送配置到数据面,数据面更新路由规则

资源使用

用户请求整体流程
image-20231230180204806
RDS资源格式:最终会找到ClusterName
image-20231230180255382

参考链接

xDS REST and gRPC protocol

实现

原理

主要包括两步:
1、资源(xds)的获取与更新。
2、根据资源进行服务治理(将请求发送到对应的provider)。

Dubbo实现

AdsObserver: 观察者,服务端响应后负责调用对应的资源Protocol解析。
XdsRouter.doRoute() -> PilotExchanger -> xxxProtocol -> AdsObserver
XdsChannel(建立连接) -> Bootstrap(从文件中获取启动信息)
dubbo-xds-flow

gRPC实现

功能

流量管理

  • 金丝雀发布(流量按比例转发:将不同版本的服务pod打上不同的标签部署在同一个Service中;VirtualService中定义通过destination.subsetweight指定该subsetpod分配的流量比例;DestinationRule负责划分pod中的标签划分subset
  • 流量路由(将流量转发到不同的服务)
    • 参数路由:根据参数指定
    • 条件路由:
    • 标签路由:
  • 负载均衡
  • 超时
  • 重试
  • 熔断
  • 故障注入

可观测性

  • 指标
  • 分布式追踪
  • 访问日志

安全

其他链接

@songxiaosheng songxiaosheng pinned this issue Jan 3, 2024
@songxiaosheng
Copy link
Member

good job

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants