简介:Dubbo-go 是常新的,每年都在一直进化。介绍 Dubbo-go 3.0 工作之前,先回顾其过往 6 年的倒退历程,以清晰将来的方向。

作者 | 李志信
起源 | 阿里技术公众号

作者介绍:

李志信(github @laurencelizhixin),dubbo-go 3.0 负责人,Apache Dubbo PMC,来自阿里云中间件团队,从事 Go 语言中间件的研发和开源工作。
于雨 (github @AlexStocks),dubbo-go 社区负责人,Apache Dubbo PMC,蚂蚁团体可信原生部【TNT】基础设施和中间件研发一线程序员。工作十一年来陆续参加和改良过 Redis/Pika/Pika-Port/etcd/Muduo/Dubbo/dubbo-go/Sentinel-golang/Seata-golang 等出名我的项目。

牛学蔚(github @justxuewei),Apache Dubbo Committer,北邮计算机学院二年级研究生,对中间件、云原生畛域有着浓重的趣味。

董剑辉(github @Mulavar),Apache Dubbo Committer,目前次要关注的开源方向为 Dubbo、Flink、Calcite。

Go 语言作为最风行的云原生语言,近些年领有很高的热度,一度备受国内开源生态的关注,据笔者理解,泛滥企业也在近年来从本身传统技术栈转型 Go 语言技术栈。Go 以其开发麻利、易用性高、入门较为容易的劣势深受宽广开发者青眼。而在 Go 语言生态成日益蓬勃发展之势下,其生态的齐备性,相比于饱经考验的 Java 生态仍然有着很大的 Gap,对中小型企业来说,仍然须要相似于 Spring 的 Go 框架来撑持日常业务开发,渴望具备 Dubbo 生态的易用性和稳定性,在这样的诉求之下,初衷为 “Bridging The Gap Between Java And Go” 的 Dubbo-go 服务框架在 2016 年应运而生,倒退至今。

咱们在往年下半年的云计算基础架构大会上理解到了“基础架构能力下沉”的重大意义,从单体架构到云原生架构的一步步倒退,都在致力将业务代码与中间件解耦,尽可能提供对立的编程接口,通过AOP的思路将服务调用抽象化,将接口标准化,将基础设施的实现下沉化。而 Dubbo-go 正是在原有保障网络通信的高可用、稳定性的前提下,整合了一批罕用开源组件,提供统一的编程接口可供扩大和调用。在此之上,对齐 Dubbo 生态支流管制面,尝试与云原生联合,朝向 Proxyless Service Mesh 方向倒退,是咱们整个生态我的项目的统一的愿景。

在 3.0 时代,咱们的“野心” 不会止步于已有的用户应用场景和根底框架能力,咱们抉择谋求高可用、多语言、跨生态的长处,打造新一代微服务基础设施,实现 “Bridging The Gap Between X And Go”,在扩大 Go 生态的同时,也实现各种基础设施的云原生化。

一 Dubbo-go 简介

Dubbo-go 是常新的,每年都在一直进化。介绍 Dubbo-go 3.0 工作之前,先回顾其过往 6 年的倒退历程,以清晰将来的方向。

1 什么是 Dubbo-go

github.com/apache/dubbo-go 是一款高性能 Go 语言微服务 RPC 框架,在 Dubbo 多语言生态中表演重要角色,是编写 go 语言微服务的最佳抉择之一。

开发者能够应用 Dubbo-go 框架高效地编写 RPC 服务,并反对与 Dubbo、gRPC 服务跨语言互通;您能够应用 Dubbo 生态弱小的服务治理能力和运维能力,例如服务注册发现、负载平衡、配置核心、可视化等性能;您也能够应用 Dubbo-go 生态的 pixiu 网关将服务裸露给集群内部拜访。

Dubbo-go 我的项目因为雨于 2016 年创建,2018 年开始组建开源社区,2019 年我的项目正式进入 Apache 软件基金会,经验三年多一直地迭代和优化,2021 年底 dubbogo 社区正式推出集成 新通信协议、新序列化协定、新利用注册模型、新路由以及新的服务治理能力的 v3.0 版本,该版本在后期研发阶段曾经领有了泛滥生产用户的关注和应用。

Dubbo-go 是阿里开源我的项目中最沉闷的开源社区之一,多年的倒退使社区积攒了泛滥酷爱开源的沉闷贡献者、 Apache Committer/PMC 成员。不仅给 Dubbo 以及其余 Dubbo 生态我的项目示范了通过社区的组织经营帮忙我的项目倒退,而且帮忙了晋升了整个 Dubbo 大社区的活跃度:

  • 包含 Apache/Dubbo 与 Apache/Dubbo-go 在内的 Dubbo 生态被评为 2021 年中国 20 大最沉闷社区之一,位居阿里所有开源我的项目第二【第一是蚂蚁团体的 AntD】
  • Dubbo-go 曾经胜利申报中国科学技术协会主办的「 2021“科创中国”开源翻新榜评比 」
  • Dubbo-go 开源社区被 OSCHINA 评为“2021 年度 OSCHINA 优良开源技术团队”

2 性能介绍

Dubbo-go 目前曾经达成了其初始使命 “Bridging The Gap Between Java And Go” ,具备了弱小的互联互通能力,并在云原生方向获得了长足的停顿。

  • 互联互通能力

Dubbo-go 生态笼罩多种网络协议:Triple、Dubbo、JSONRPC、gRPC、HTTP、HTTP2等。

其中 Triple 协定是 Dubbo3 生态主推的协定,是基于 gRPC 的扩大协定,底层为HTTP2,可与 gRPC 服务互通。相当于在 gRPC 牢靠的传输根底上,减少了 Dubbo 的服务治理能力。

Dubbo-go 生态整体曾经与 Dubbo、gRPC、Spring Cloud 等生态互联互通,把东西向和南北向数据面流量对立于一体:既能够通过 Dubbo-go 进行货色方向服务调用,也能够在 Dubbo-go-pixiu 中进行南北向流量治理。

  • Devops 能力

在服务注册发现方面,反对 Nacos 、Zookeeper、ETCD、Consul、Polaris-mesh(腾讯开源) 等服务注册中间件,并领有可扩大能力。咱们也会依据用户应用状况,进一步扩大出用户须要的实现。

在配置核心方面,开发者能够应用Nacos、Apollo(携程开源)、Zookeeper 进行框架/用户的配置的公布和拉取。

在流量管制方面,咱们内置实现了固定窗口、滑动窗口等出名的限流算法,同时也反对与第三方成熟的限流熔断框架 Hystrix,Sentinel-golang 等集成提供治理性能。

在分布式事务方面,咱们反对 Seata-golang,实现了 TCC 模式分布式事务的调用。

在链路追踪方面,咱们反对基于 Jaeger、ZipKin 的链路追踪能力。

在指标可视化方面,咱们反对应用 Prometheus 收集框架指标和用户指标。

3 指标用户

Dubbo-go 从开始即是面向生产环境基于用户的理论需要构建开发的,其指标用户如下。

  • 宽广 Go 语言微服务开发者

如果您是 Go 语言微服务开发者,心愿基于轻量级微服务框架疾速开发本人的服务,那么 Dubbo-go 3.0 将是您很好的一个抉择。

  • Dubbo 生态多语言使用者

如果您是 Dubbo 生态使用者,或者在语言切换的过程中面对兼容性问题,Dubbo-go 在多协定跨语言互通的场景下会祝您一臂之力。

  • gRPC 使用者

如果您心愿在 gRPC 生态中减少服务治理能力,Dubbo-go 可帮忙您很容易地从 gRPC 接入 Dubbo 生态,在不扭转业务代码的状况下提供服务治理能力的反对。

  • 云原生架构师

如果你在为公司抉择云原生解决方案,dubbogo 3.0 提供的 proxyless service mesh 也是一个很好的抉择,它能够帮忙你以最低的老本助你从微服务体系接入 istio 管制面。当然,dubbogo 的管制面能力还须要进一步增强,在将来的 3.1 版本中提供 proxyless 和 proxy 两套 service mesh 计划。

二 Dubbo-go 3.0 有哪些不同

Apache 软件基金会顶级我的项目 Dubbo 开源至今已有十年工夫,而作为第三个里程碑,也是云原生时代的全新版本,Dubbo 3.0 的研发工作最早能够追溯到2018年,作为 Dubbo 多语言生态的重要一环,Dubbo-go 社区也在2020年年底,将 3.0 版本作为主推方向。

在官网新个性反对(Triple 协定、利用级服务发现、路由规定、柔性服务等等)的根底之上,Dubbo-go 社区针对应用敌对性,多语言多生态的兼容性,用户编程和应用习惯等方面重点进行了优化,与其说 Go 社区的 3.0 是一次版本对齐的迭代,不如说是一个富裕生命力的新开始。

1 新配置计划

  • 配置构造

在 3.0 时代,咱们更清晰地标准出了利用层级配置和接口层级配置的概念,相比于之前版本,在配置构造上进行了重构和精简化。例如开发者在微服务场景之下,会关注注册核心地址、协定、接口名等信息。只须要在配置文件中制订好:

dubbo:  registries:     ZKRegistry: # 注册核心配置      protocol: zookeeper # 注册核心类型      address: 127.0.0.1:2181 # 注册核心配置  protocols:    triple: # 协定配置      name: tri # 协定名      port: 20000 # 服务端监听端口  provider:     services:      GreeterProvider: # 服务提供者类名        interface: com.dubbogo.sample.DemoServiceName # 接口 ID
  • 配置核心

在 Dubbo-go 3.0 中,能够将上述框架配置或用户配置搁置在配置核心内便于管理。在容器内只须要搁置配置核心相干信息即可基于该配置启动框架。

dubbo:  config-center: # 配置核心信息    protocol: nacos    address: 127.0.0.1:8848    data-id: dubbo-go-samples-configcenter-nacos-server
  • 配置API

开发者能够在代码内通过配置 API 生成配置实例构造,代码中生成的配置与从文件内读取的配置等价。参考于 Java Builder 的设计来自于社区同学们,也代表了开发者对于接口易用性的诉求。

// 1. 通过 Builder 模式创立配置核心的配置configCenterConfig := config.NewConfigCenterConfigBuilder().      SetProtocol("nacos").SetAddress("127.0.0.1:8848").      SetDataID("dubbo-go-samples-configcenter-nacos-server").      SetGroup("dubbogo").      Build()// 2. 通过 Builder 模式创立根配置rootConfig := config.NewRootConfigBuilder().    SetConfigCenter(configCenterConfig).    Build()// 3. 加载配置并启动框架rootConfig.Load()

2 Triple + PB 协定

Dubbo-go 在上半年首次公布的 3.0.0-rc1 版本内曾经反对 Triple 协定。在此期间,由合作方钉钉部门相干同学提出了较多针对响应时延、稳定性等优化倡议。时至今日,在性能、用户应用体验、泛化调用、异样回传、PB反射等方面都进行了大量的优化工作。

  • 性能优化

将旧版本基于 net/http2 的实现切换为基于 grpc 的 http2 层实现计划。加强了底层传输的稳定性和性能。通过压测,4c8g 单机 Provider 能够解决 7万 tps 的简略申请。

咱们应用了 3 台雷同规格机器,一台作为Server(运行一个 triple-server),一台作为Client(运行一个triple-server 和triple client) ,一台作为施压机向 Client 发动针对整个链路的调用施压,并进行数据记录,记录rt、实在 tps 以及client 和 server 的 CPU 占比数据。

通过压测后果咱们能够看到,咱们在多跳链路和单机上万级别tps的试验环境下,能够保障毫秒级申请时延,并维持正当的 CPU 资源占用率。

  • 反射反对

Triple 默认开启 proto 反射,用户能够应用 grpc_cli 针对 Triple 协定裸露的pb序列化服务进行展现和调试。

在 proto 反射反对的前提下,dubbo-go-pixiu 提供了网关层协定转换调用 triple 服务的反对。

$ grpc_cli ls localhost:20000org.apache.dubbogo.samples.api.Greetergrpc.reflection.v1alpha.ServerReflection
  • 用户编程形式

新 PB 编译插件,新版本 dubbo-go 举荐 go 用户应用 proto 文件定义接口,与 gRPC-go 的应用形式相似。

$ go install github.com/dubbogo/tools/cmd/protoc-gen-go-triple@v1.0.5$ protoc --go_out=. --go-triple_out=. ./helloworld.proto

对于 Triple 协定,最早是阿里云中间件团队在 Dubbo3 造成概念的时候就提出的。它相比于上一代 Dubbo 协定,解决了 Dubbo 生态与其余云原生架构生态不互通的特点,并且用户很难了解位于传输层的上一代二进制协定。基于 HTTP2 协定的 gRPC 扩大协定就很好滴解决了这一问题。第二是点是对 Mesh 等网关型组件不够敌对,在 3.0 时代,咱们能够间接通过解析协定头来获取必要的元数据,并很天然地适配网关对于 HTTP 协定的转发实现。

从咱们社区所对接的 Go 语言开发者思考,PB 序列化更能适配与他们的开发习惯,不便从已有 gRPC 服务迁徙业务代码,还解决了降级过程中跨协定通信的兼容性问题,而在应用 Triple 协定后,跨语言互通的劣势将进一步体现,从“可互通” 转变为基于成熟序列化计划的“稳定性互通”,不便用户业务更宽泛的扩大,简略来说,在 Dubbo 时代,用户进行跨语言互通须要依赖多语言生态的 Dubbo 协定实现,而在3.0 时代,您能够应用任意语言的 gRPC 实现来与 Dubbo 服务间接进行互通,并共享 gRPC 生态的一系列组件,例如链路追踪、可视化、cli 工具等等。

因而,咱们认为 Triple 的意义并不是一个简略的扩大协定,而是一个跨语言、跨生态概念的实现,也是 Dubbo3 的外围 Feature 所在。

3 柔性服务

大规模分布式系统承载的用户流量呈指数级增长,须要应用负载平衡算法将流量平均地扩散到各个机器中,晋升集群的吞吐率和资源利用率。

传统负载平衡算法大多是基于消费者视角,它们独特的局限性是无奈依据服务提供者的以后状态动静调整分流策略,如 RR、hash 等算法。这些算法总是以尽可能偏心的概率调配流量,但在实践中偏心不等于负载平衡。

咱们冀望的平衡分流策略是:

  • 动静性能评估:用户不须要当时设置机器权重,框架在运行时主动评估零碎性能,性能好的机器承当更多流量,性能有余的机器承当更少的流量;
  • 故障自愈能力:负载平衡算法可能主动摘除故障的节点,并具备故障自愈能力;
  • 适当限流策略:防止服务雪崩问题。

柔性服务作为新一代负载平衡策略被引入 Dubbo-go 3.0 中,外围能力包含容量评估和智能分流。

容量评估是评估以后服务提供者状态以放弃最优申请队列长度。容量评估关注的两个外围指标是 TPS 和提早,TPS 评估零碎的每秒解决事物的速度,提早反映用户等待时间。在评估服务端容量时,要均衡零碎吞吐率和用户等待时间两者之间的关系,现实状态下在零碎吞吐率尽可能大的状况下用户提早尽可能小。

实在容量受到硬件和上游依赖的限度,一次性预测实在容量难度较高。如上图所示,TPS 在达到最佳值之前,与申请数呈枯燥递增的关系。在 Dubbo-go 3.0.0 版本中,咱们引入了爬山算法(HillClimbing),在调用过程中逐渐迫近零碎的最佳承载量。

HillClimbing 算法作用于服务提供者,周期性地断定以后是否处于最佳状态并动静更新零碎容量。

探测距离随着工夫逐渐拉长,直至趋势稳固。刚启动时没有历史数据,此时须要频繁更新容量评估值,保证系统以尽可能快的速度探测到最优容量。咱们假设最优容量短时间内不会再强烈稳定,且容量评估也会额定耗费资源,因而当趋势稳固的时候,算法将逐渐缩短探测周期。

容量更新策略与 TCP 拥塞管制类似。上面公示示意 HillClimbing 算法预设的两种增量类型:

其中,lim 示意以后容量,itv 示意以后探测距离。

在初期采纳慢启动策略,取一个较低水平的值作为容量初始值,然而以较高增量(alpha)向最优容量迫近。如果以后容量曾经增长到 TPS 升高的状况,则应用较低增量(beta)以更精准的形式向最优容量挪动。

在每次调用过程完结后,服务提供者会通过 Dubbo-go 的附件(attachment)个性将最新的预估容量返回给服务消费者,消费者将信息缓存至本地并应用 P2C 算法实现智能分流。

P2C(Pick Two Random Choices)算法作用于服务消费者,它有着更迷信的负载平衡策略并宽泛的利用在多个出名开源我的项目中,如 Linkerd、Rsocket 等。该算法首先随机抉择两个节点,而后比照节点的残余容量,抉择其中一个残余容量较多的节点作为本次调用的服务提供者。

柔性服务将在后续版本中继续优化,与 Dubbo 社区独特摸索出一套适宜微服务场景的柔性服务最佳实际。

4 Pixiu 网关

Dubbo-go-pixiu 网关反对调用 GO/Java 的 Dubbo 集群。在 Dubbo-go 3.0 的场景下,咱们能够通过 Pixiu 网关,在集群外以 HTTP 协定申请 pixiu 网关,在网关层进行协定转换,进一步调用集群内的Dubbo-go 服务。

用户调用 Dubbo-go 服务的 path 为http://$(app_name)/$(service_name)/$(method)。

例如一个proto文件内有如下定义:

package org.apache.dubbo.quickstart.samples;service UserProvider {  rpc SayHello (HelloRequest) returns (User) {}}message HelloRequest {  string name = 1;}

并在dubbo-go 服务启动时在dubbogo.yml 内配置利用名为my-dubbogo-app:

dubbo:  application:    name: my-dubbogo-app

pixiu 网关即可解析 path 为 my-dubbogo-app/org.apache.dubbo.quickstart.samples.UserProvider/SayHello 的路由,并转发至对应服务。来自内部HTTP 申请的 body 为 json 序列化的申请参数,例如 {"name":"test"}。

咱们目前举荐应用 Nacos 作为注册核心。

用户能够在本人的集群里部署咱们的demo,集群最好领有裸露 lb 类型 service 的能力,从而能够在公网拜访至集群内的服务,您也能够间接集群内进行申请。

针对您的集群,执行:

$ kubectl apply -f https://raw.githubusercontent.com/dubbogo/triple-pixiu-demo/master/deploy/pixiu-triple-demo.yml

会在 dubbogo-triple-nacos 命名空间下创立如下资源,蕴含三个 triple-server,一个pixiu网关,一个 nacos server。并通过 Servcie 将服务裸露至公网。

namespace/dubbogo-triple-nacos createdservice/dubbo-go-nacos createddeployment.apps/dubbogo-nacos-deployment createddeployment.apps/pixiu createddeployment.apps/server createdservice/pixiu created

获取 pixiu 公网 ip 并进行调用

$ kubectl get svc -n dubbogo-triple-nacosNAME             TYPE           CLUSTER-IP        EXTERNAL-IP     PORT(S)          AGEdubbo-go-nacos   ClusterIP      192.168.123.204   <none>          8848/TCP         32spixiu            LoadBalancer   192.168.156.175   30.XXX.XXX.XX   8881:30173/TCP   32s

通过curl 调用 demo 服务,并取得响应后果。

$ curl -X POST -d '{"name":"laurence"}' http://30.XXX.XXX.XX:8881/dubbogoDemoServer/org.apache.dubbo.laurence.samples.UserProvider/SayHello{"name":"Hello laurence","id":"12345","age":21}

5 运维能力与工具

  • 可观测性

相比于上一版本的 Dubbo-go,本次公布在原来Dubbo协定的可观测性的根底上,提供了基于 Triple 协定可观测性反对,适配于 Jaeger 的链路追踪展现。对于数据上报,咱们在框架中为之提供了接口,不便用户实时上报业务埋点数据,并默认开启 promehteus 的拉模式数据收集的反对。

框架对于 RPC调用相干信息,例如申请RT,接口名、办法名等数据,也提供了默认的 metrics 字段,供用户收集和统计。

  • 日志

本次发版对日志模块进行了较大的扭转和更新,用户能够依据需要配置日志打印的级别、分片、文件输入、保留时常等信息,并反对用户自定义日志组件。

  • cli工具

Dubbo-go 3.0 会针对命令行工具进行重点开发,目前社区已提供用于发动 Dubbo RPC 调用的dubbo-go-cli;用于编译 pb 文件的protoc-gen-go-triple 插件;并且 Dubbo-go 曾经适配 grpc_cli 工具的调试,在将来,咱们会在健康检查、服务信息获取、RPC 调用调试、框架代码初始化和接口编译、服务部署等方面,进一步加强命令行工具的能力,以提供更齐备的服务治理和运维生态。

三 用户视角的 Dubbo-go

作为一款站在用户角度设计的框架,咱们更心愿给予宽广用户更简洁,更直观,更“约定大于配置”的应用体验,因而在研发阶段,咱们重点进行了多轮的配置迭代以及 samples 仓库的建设和保护,为用户提供了更为精简的概念和重点突出的 samples 示例。

1 面向接口和配置的开发

Dubbo-go 3.0 为开发者屏蔽掉了底层实现细节,只须要关注几个关键点即可应用本框架进行开发,以 triple 服务为例。

  • 框架配置文件:dubbogo.yaml

框架启动所依赖的配置项。

  • 接口定义

编写 proto 文件,并应用提供的 protoc-gen-go-triple 插件以及官网 protoc-gen-go 插件进行编译。

  • 接口代码实现

编写服务实现,并应用框架进行启动即可。

接口、实现、配置。是常见 go 微服务的根本依赖元素。Dubbo-go 提供一整套微服务的解决方案,并提供丰盛的服务治理能力和可扩大能力,从而能够让用户容易地接入应用。

2 代码示例仓库 dubbo-go-samples

咱们在apache/dubbo-go-samples 仓库的 master 分支保护了丰盛的 dubbo-go 3.0 的代码示例。包含多种协定的 rpc 调用,多种注册核心的反对,多种配置核心的应用,以及泛化调用、配置API、日志、数据上报、链路追踪等运维能力的展现,简直框架领有的全副能力都能够在 samples 仓库中找到对应的常见用例。用户也能够在1.5分支找到适配与dubbo-go 1.5.x 的示例。

通过 3.0 后期阶段对于配置重构和大幅度的用户敌对性优化,目前 samples 仓库内的代码和配置都曾经高度精简化,从而突出单个模块的能力。开发者能够下载仓库后间接依照server 到 client 的程序来游玩一个示例模块的服务,即可体验框架提供的能力。

samples 仓库在迭代过程中也被赋予了更多的性能,社区开发同学都会相熟,咱们将框架仓库、samples 仓库通过 ci 集成测试的形式联合起来,保障框架开发者每次提交的代码都能通过所有用例的 e2e 测试,从而保障开发品质,进步迭代的效率。

四 社区合作

作为一个能力性能十分丰盛的服务平台,dubbogo 社区很器重与各大开源社区特地是阿里系开源产品社区以及各个公司的单干。

  • Nacos 社区

晚期 Dubbo-go 社区就与 Nacos 社区开展密切合作,由多位外围贡献者参加 Dubbo-go 研发反对中,在 3.0.0 版本中,减少了多位 Nacos 社区成员,在社区迭代中作出了许多建设性的倡议和奉献。

  • Polaris 社区

北极星(Polaris)是腾讯开源的服务发现和治理核心,致力于解决分布式或者微服务架构中的服务可见、故障容错、流量管制和平安问题。在 3.0.0 版本的开发中,Dubbo-go 社区与 Polaris 社区开展单干,实现了把 Polaris 作为 dubbo-go 的注册核心。

  • Sentinel-Golang 社区

Sentinel 是面向分布式服务架构的流量管制组件,在Sentinel-Golang 首个版本 0.1.0 正式公布后,Dubbo-go 社区就与 Sentinel-Golang 社区开展密切合作,在性能上反对 Sentinel-Golang 作为流量管制。

  • Seata-golang 社区

从 dubbogo v1.3 开始, 就集成了 seata-golang,实现了 TCC 模式分布式事务的调用。

两个社区现已单干将 TCC 模式 seata-golang 集成到了 dubbo-go-pixiu 中,只须要简略的配置、就能集成 TCC 模式协调分布式事务的计划,整体流程原理见上图。为了进一步升高大家应用分布式事务的门槛,seata-golang 社区也在思考将 AT 模式做到 DB 代理层,届时在 dubbo-go-pixiu 中应用 seata-golang 会更加不便,敬请期待。

  • 其余公司

dubbogo 自身是一个有着极高生产环境需要的我的项目,在倒退过程中与阿里等很多公司有过单干。这些单干使得单方都有收益,dubbogo 的品质得以保障,性能得以拓展,合作方本身的平台稳定性失去极大晋升。

五 瞻望

后面讲到,Dubbo-go 3.0 对咱们来说是一个新时代的终点,在将来的迭代中,咱们除了持续保护上述流量调度以及服务治理能力之外,还会基于如下几个方向重点发力。

1 流量路由规定

Dubbo-go 3.0 在路由规定方面设计与 dubbo 统一,提供了反对 mesh 形式的路由规定策略并接入了 dubbo-admin 这一控制面板。

在 mesh 路由方面,dubbo-go 将路由规定分为 VirtualService 和 DestinationRule 两局部,其中 DestinationRule 定义了指标地址的规定,通过 subset 和 host 关联到对应的集群,而 VirtualService 则定义了具体的路由匹配规定。当客户端发动一次调用时,首先通过 VirtualService 路由到具体的 subset,而后依据 DestinationRule 中对应 subset 的 labels 信息找到具体的集群。这种设计形式将路由规定和指标地址进行理解耦,反对 VirtualService 和 DestinationRule 的多种组合,实现了更加灵便的路由策略,也能够更加轻易实现 A/B 测试、金丝雀公布、蓝绿公布等能力。

对于接入 dubbo-admin 一块工作,目前 dubbo-go 曾经重构了 zookeeper 配置核心的代码逻辑,并实现了和 dubbo-admin 互通,即用户能够在 dubbo-admin 上动静公布、更新路由来调度集群内流量(目前仅限 zookeeper),而利用能够立刻感知,无需重启。在不久的将来咱们会持续深刻买通这一部分的能力互通,反对 nacos 等其余罕用配置核心、注册核心的互通,彻底实现控制面板与数据面板的拆散。

2 对立管制面与服务架构翻新

咱们将推出兼容 Dubbo-admin 的对立管制面,可在管制面中通过路由配置动静调度集群内流量,将新路由规定以更灵便、更易用的形式落地在生产场景下,运维人员也能够在管制面上高深莫测地理解到集群内 dubbo-go 利用的实时状况,进一步来讲,管制面将会领有服务测试、灰度公布、监控、流量调度等一系列运维能力。

咱们还会在适配于 pixiu 网关协定转换的根底之上,进一步挖掘网关的能力,朝 proxyless service-mesh 的方向摸索新的微服务架构。

3 进一步云原生化

咱们将在 dubbo-go 1.5 版本在 k8s 方向摸索的根底之上,进一步反对云原生能力,打算蕴含探针、配置、资源监听等方面,使得框架在云原生架构下具备更好的应用体验,更多样的服务治理能力。

原文链接
本文为阿里云原创内容,未经容许不得转载。