Proxyless Mesh 在 Dubbo 中的实践

本文介绍了Dubbo 3.1引入的Proxyless Mesh特性,直接实现xDS协议,避免Sidecar模式的性能损耗。详细讨论了服务发现、证书管理和案例实践,展示了如何在Kubernetes环境中部署和运行。Dubbo Proxyless Mesh简化了架构,提升了性能,便于遗留系统的平滑迁移和运维部署。
摘要由CSDN通过智能技术生成

背景

随着 Dubbo 3.1 的 release,Dubbo 在云原生的路上又迈出了重要的一步。在这个版本中添加了 Proxyless Mesh 的新特性,Dubbo Proxyless Mesh 直接实现 xDS 协议解析,
实现 Dubbo 与 Control Plane 的直接通信,进而实现控制面对流量管控、服务治理、可观测性、安全等的统一管控,规避 Sidecar 模式带来的性能损耗与部署架构复杂性。

什么是Service Mesh

Service Mesh 又译作 “服务网格”,作为服务间通信的基础设施层。Buoyant 公司的 CEO Willian Morgan 在他的这篇文章 WHAT’S A Service Mesh? AND WHY DO I NEED ONE?
中解释了什么是 Service Mesh,为什么云原生应用需要 Service Mesh。

下面是 Willian Morgan 对 Service Mesh 的解释。

A Service Mesh is a dedicated infrastructure layer for handling service-to-service communication. 
It’s responsible for the reliable delivery of requests through the complex topology of services 
that comprise a modern, cloud native application. In practice, the Service Mesh is typically implemented 
as an array of lightweight network proxies that are deployed alongside application code, without the 
application needing to be aware.

翻译成中文

服务网格(Service Mesh)是处理服务间通信的基础设施层。它负责构成现代云原生应用程序的复杂服务拓扑来可靠地交付请求。
在实践中,Service Mesh 通常以轻量级网络代理阵列的形式实现,这些代理与应用程序代码部署在一起,对应用程序来说无需感知代理的存在。

说到 Service Mesh 一定离不开 Sidecar 经典架构模式。它通过在业务 Pod 中注入 Sidecar 容器,接管业务容器的通信流量,同时 Sidecar 容器与网格平台的控制平面对接,
基于控制平面下发的策略,对代理流量实施治理和管控,将原有服务框架的治理能力下层到 Sidecar 容器中,从而实现了基础框架能力的下沉,与业务系统解耦。

经典的 Sidecar Mesh 部署架构有很多优势,如平滑升级、多语言、业务侵入小等,但也带来了一些额外的问题,比如:

  • Proxy 带来的性能损耗,在复杂拓扑的网络调用中将变得尤其明显
  • 流量拦截带来的架构复杂性
  • Sidecar 生命周期管理
  • 部署环境受限,并不是所有环境都满足 Sidecar 流量拦截条件

针对 Sidecar Mesh 模型的问题,Dubbo 社区自很早之前就做了 Dubbo 直接对接到控制面的设想与思考,并在国内开源社区率先提出了 Proxyless Mesh 的概念,当然就 Proxyless 概念的说法而言,最开始是谷歌提出来的。

Dubbo Proxyless Mesh

Dubbo Proxyless 模式是指 Dubbo 直接与 Istiod通信,通过 xDS协议实现服务发现和服务治理等能力。

Proxyless 模式使得微服务又回到了 2.x 时代的部署架构,同 Dubbo 经典服务治理模式非常相似,所以说这个模式并不新鲜, Dubbo 从最开始就是这样的设计模式。
这样做可以极大的提升应用性能,降低网络延迟。有人说这种做法又回到了原始的基于 SDK 的微服务模式,其实非也,它依然使用了 Envoy 的 xDS API,
但是因为不再需要向应用程序中注入 Sidecar 代理,因此可以减少应用程序性能的损耗。

但相比于 Mesh 架构,Dubbo 经典服务治理模式并没有强调控制面的统一管控,而这点恰好是 Service Mesh 所强调的,强调对流量、可观测性、证书等的标准化管控与治理,也是 Mesh 理念先进的地方。

在 Dubbo Proxyless 架构模式下,Dubbo 进程将直接与控制面通信,Dubbo 进程之间也继续保持直连通信模式,我们可以看出 Proxyless 架构的优势:

  • 没有额外的 Proxy 中转损耗,因此更适用于性能敏感应用
  • 更有利于遗留系统的平滑迁移
  • 架构简单,容易运维部署
  • 适用于几乎所有的部署环境

服务发现

xDS 接入以注册中心的模式对接,节点发现同其他注册中心的服务自省模型一样,对于 xDS 的负载均衡和路由配置通过 ServiceInstance 的动态运行时配置传出,
在构建 Invoker 的时候将配置参数传入配置地址。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在代码层面,可以通过修改 ProxylessNAS 的搜索空间定义和搜索算法来实现搜索空间的修改。下面我以修改搜索空间定义为例,介绍具体的实现方法。 ProxylessNAS 的搜索空间定义在 `models/proxyless_nas/proxyless_nas_builder.py` ,具体来说,是通过 `ProxylessNASNets.search_space` 定义的。我们可以通过修改这个搜索空间来实现搜索空间的修改。 例如,如果我们想要增加搜索空间的操作类型,可以在 `ProxylessNASNets.search_space` 增加对应的操作定义。例如,如果我们想要增加 Squeeze-and-Excitation 操作,可以添加以下代码: ``` # define the Squeeze-and-Excitation operation self._ops['se'] = partial(SEModule, channels=self.C, reduction=4) ``` 其,`SEModule` 是实现 Squeeze-and-Excitation 操作的函数,`reduction` 是减少通道数的比例。 如果我们想要修改搜索空间某个操作的参数范围,可以在对应的操作定义修改。例如,如果我们想要修改卷积核大小的范围,可以修改以下代码: ``` # define the depthwise separable convolution operation self._ops['sep_conv_3x3'] = partial( DepthwiseSeparableConv, kernel_size=3, stride=1, padding=1, affine=True, track_running_stats=True, act_func=self._act_func, use_bn=self._use_bn, bn_momentum=self._bn_momentum, bn_eps=self._bn_eps, se=self._se, width_mult_list=self._width_mult_list, channel_mult_list=self._channel_mult_list, # modify the channel_mult_list parameter ) ``` 其,`channel_mult_list` 是卷积操作通道数比例的范围,可以根据需要进行修改。 除了修改搜索空间定义,还需要修改搜索算法,以使其能够搜索到新的操作类型和参数。例如,如果我们增加了 Squeeze-and-Excitation 操作,就需要修改搜索算法,使其能够选择该操作。具体实现方法可以参考代表性的搜索算法,如 DARTS、ENAS 等。 总之,在代码层面实现搜索空间的修改需要对搜索空间定义和搜索算法进行调整,以满足实际需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值