Dubbo-go-Mesh 开启新一代 Go 微服务形态

简介:Proxyless Service Mesh 能力将跟随 Dubbo-go 下一版本发布,稳定的性能需要社区成员们共同的关注与建设。在此基础之上,我们还会进一步探索轻量级 sdk + sidecar的模型;探索基于第三方流量治理组件的金丝雀发布能力;探索基于 dubbo 服务框架的多语言 sevice mesh、与更丰富的 mesh 生态组件兼容。

作者 | 李志信
来源 | 阿里开发者公众号

一 什么是 Proxyless Service-Mesh (无代理服务网格) ?

1 Service Mesh 简析

Istio 是当今最流行的开源服务网格。它由控制平面和数据平面构成,其架构如下(图片摘自 Istio官网)。

位于图中下半部分的控制平面负责配置、服务信息、证书等资源的下发。位于上半部分的数据平面关注业务之间的通信流量;传统服务网格通过代理的方式拦截所有的业务网络流量,代理需要感知到控制平面下发的配置资源,从而按照要求控制网络流量的走向。

在 Istio 环境中,其控制平面是一个名为 istiod 的进程,网络代理是 envoy 。istiod 通过监听 K8S 资源 例如Service、Endpoint 等,获取服务信息,并将这些资源统一通过 XDS 协议下发给位于数据平面的网络代理。envoy 是一个独立的进程,以 sidecar(边车)的形式伴随业务应用 Pod 运行,他与应用进程共用同一个主机网络,并通过修改路由表的方式,劫持业务应用的网络流量。

Service Mesh 可以解决微服务场景下的众多问题,随着集群规模的扩大与业务复杂度的增长,基于原生 k8s 的容器编排方案将会难以应付,开发人员不得不面对巨大的服务治理挑战。而 Service Mesh 很好地解决了这一问题,它将服务治理需求封装在了控制平面与代理中,业务开发人员只需要关注于业务逻辑。在应用部署之后,只需要运维人员通过修改配置,即可实现例如故障恢复、负载均衡、灰度发布等功能,这极大地提高了研发和迭代效率。

Istio 的 sidecar 通过容器注入的形式伴随业务应用进程的整个生命周期,对于业务应用是毫无侵入的,这解决了业务应用可迁移、多语言、基础架构耦合等问题。但这也带来了高资源消耗、请求时延增长的问题。

Service 为服务治理提供了一个很好的思路,将基础架构与业务逻辑解耦,让应用开发人员只需关注业务。另一方面,由于 sidecar 的弊端,我们可以考虑使用 sdk 的形式,来替代 sidecar 支撑起数据平面。

2 Proxyless Service-Mesh

无代理服务网格,是2018年谷歌提出的一个新的概念,Isito、gRPC、brpc 等开源社区都在这一方向进行了探索和实践。无代理服务网格框架以 SDK 的形式被业务应用引入,负责服务之间的通信、治理。来自控制平面的配置直接下发至服务框架,由服务框架代替上述 sidecar 的功能。

在无代理服务网格场景下,服务框架(SDK)的主要能力可以概括为以下三点:

  1. 对接控制平面,监听配置资源。
  2. 对接应用,为开发者提供方便的接口。
  3. 对接网络,根据资源变动,响应流量规则。

3 Proxyless 的优缺点

我认为优点如下:

  • 性能:无代理模式的网络调用为点对点的直接通信,网络时延会比代理模式小很多。
  • 稳定性:proxyless 的模式是单进程,拓扑简单,便于调试,稳定性高。
  • 框架集成:市面上已有众多 sdk 模式的服务框架,切换至 mesh 后便于复用框架已有能力
  • 资源消耗:没有 sidecar,资源消耗低。

当然,缺点也有很多:

  • 语言绑定:需要开发多种语言的 sdk
  • 可迁移性低:无法通过切换 sidecar 的形式来无侵入地升级基础设施。

总体来讲,我认为 Proxyless 架构以其高性能、高稳定性的特点,更适合与生产环境使用。

二 Dubbo-go 与 Proxyless Service-Mesh

1 Dubbo-go 的能力

Apache/Dubbo-go (github.com/apache/dubbo-go),是一款分布式 RPC 框架,是 Apache/Dubbo 的 Go 语言实现。旨在为开发者提供便利的微服务应用开发体验。Dubbo-go 生态为 Go 开发者提供了敏捷的微服务编程接口、配置管理方案、服务治理方案、以及一系列工具与脚手架,开发人员可以使用框架提供的能力快速开发自己的微服务应用。

2 Dubbo-go 在 Proxyless Service-Mesh 场景的设计

服务注册发现

Dubbo-go 本身拥有可扩展的服务注册发现能力,我们为 service mesh 场景适配了注册中心的实现。开发人员可以将 dubbo-go 应用的信息注册在 istiod 控制平面上。客户端应用可以查询已经注册的接口数据,完成服务发现过程。

归因于 Java 的编程习惯,Dubbo-go 生态框架的服务注册方式都是接口级别的。即客户端只需要引入接口,即可发起调用,而无需关心下游的应用名、主机名、IP 地址等信息。与之相对的是应用级别的服务注册发现,主流微服务框架更多这种形式的服务调用方式,例如 gRPC、K8S、Istio,应用级服务发现对应到 mesh 场景下,我认为叫 “主机级别服务发现”更合适,这种调用方式需要客户端在引入接口的同时,还需引入下游的主机名和端口号。熟悉 gRPC-go 的同学一定很清楚,除了引入 pb 接口,还需要在创建客户端时调用 gRPC.Dial("xxx") 建立网络连接。而这里的 xxx 就是下游的主机名和端口号,这种服务发现的类型和用户编程习惯,导致了 gRPC 较为轻松地实践了 Proxyless Service Mesh。

关于应用级服务发现与接口级服务发现的区别和 dubbo 生态的解决方案,本文中不多赘述,可以参考刘军前辈写的文章文章《Dubbo 迈出云原生重要一步 应用级服务发现解析》
简单来说,应用级服务发现需要开发者关心接口之外还要关心应用名,注册中心的冗余信息较少;接口级服务发现开发者只需要引入接口名,但注册中心的冗余信息较多。

熟悉 Dubbo-go、Dubbo 生态的用户,不习惯于在编程的过程中指定下游主机名,更希望以接口引入的方式,直接发起 RPC 调用,而不需关心究竟这个接口被哪个应用实现,运行在哪台主机、哪个虚拟集群上。

Dubbo-go 为了融入 Istio 体系,将扩展出来的注册发现流程进行了特殊改造。在复用 Istio 提供的 EDS、CDS 主机发现的能力之外,增加了接口名到主机名的映射,作为源数据注册在了控制平面上。客户端在发起调用前持有接口名,通过查询istiod 上的元数据信息,拿到接口名到主机名到映射,转换为主机名;再通过EDS、CDS和路由,完成主机名到下游端点实例的转换。完成服务发现流程。

下面用一个更详细的例子来说明服务发现过程:

  1. 开发人员使用 dubbogo-cli 工具创建应用模板,发布 Deployment / Service pair 到集群中。
  2. 服务端拉取全量 CDS 和 EDS 数据,比对本机 IP,拿到当前应用的的主机名。并将本应用的所有接口名到主机名的映射,注册在 Istiod 上面。
  3. 客户端从 istiod 拉取全量接口名到主机名的映射,缓存在本地。当需要发起调用时,查询本地缓存,将接口名转换为主机名,再通过CDS 和 EDS 拉取到当前 cluster 所对应的全量端点。
  4. 全量端点经过 Dubbo-go 内置的 Mesh Router,筛选出最终的端点子集,并按照配置的负载均衡策略进行请求。
  5. 开发人员或者第三方组件,通过操作 K8S 资源,控制 Dubbo-go 流量。

纵观这一过程,开发人员全程只需要关注接口即可,完全无需关心主机名和端口信息。即服务端开发者只需要实现pb接口,使用框架暴露出来;客户端开发者只需要引入pb接口,直接发起调用即可,可以跟随本文第四部分的教程来动手实验一下。

流量治理

Dubbo-go 拥有路由能力,通过 xds 协议客户端从 istiod 订阅路由配置,并实时更新至本地路由规则,从而实现服务的管理。Dubbo-go 兼容 Istio 生态的流量治理规则,可以通过配置 Virtual Service 和 Destination Rule,将打标的流量路由至指定子集,也可以在灰度发布、切流等场景进行更深入地使用。

云原生脚手架

dubbogo-cli 是 Apach/dubbo-go 生态的子项目,为开发者提供便利的应用模板创建、工具安装、接口调试等功能,以提高用户的研发效率。

可以执行以下指令安装dubbogo-cli 至 $GOPATH/bin

go install github.com/dubbogo/dubbogo-cli@latest

dubbogo-cli 支持以下能力

  • 应用模板创建
  • Demo 创建
  • 编译、调试工具安装
  • 查看 dubbo-go 应用注册信息
  • 调试 dubbo-go 应用接口

使用应用模板的开发流程

  1. 通过 dubbogo-cli 生成模板
  2. 修改api/api.proto
  3. make proto-gen
  4. 开发接口
  5. 修改 makefile 内镜像名和发布名
  6. 打镜像并推送
  7. 修改chart/app/values 内与部署相关的value配置
  8. make deploy, 使用 helm 发布应用。

详情可以参阅 dubbogo-cli 文档[1]。

三 Dubbo-go-Mesh 的优势

1 接口级服务发现

前文介绍到了通过接口级服务注册发现的优势,即开发人员无需关心下游主机名和端口号,只需要引入接口存根,或实现接口,通过框架启动即可。

2 高性能

我们在 k8s 集群内部署 Istio 环境,分别测试了 sidecar 模式的 gRPC 服务调用和 Proxyless 模式的 dubbo-go 应用服务调用。发现 proxyless 在请求耗时方面比 sidecar 模式少一个数量级,即性能提升十倍左右。

3 跨生态

Dubbo-go 是一个横跨多个生态的服务框架。

  • mesh 生态

    • 开发人员可以使用 Dubbo-go 进行应用开发的同时,使用 Istio 生态所提供的强大能力。
  • gRPC 生态

    • Dubbo-go 支持与 gRPC 服务互通,HTTP2 协议栈。
    • Dubbo-go 默认使用 pb 序列化方式,高性能。
  • Dubbo 生态

    • 多语言优势,可以实现 go-java 应用互通。
    • 兼容 pixiu 网关,方便地进行服务的暴露和协议转换。
    • 使用 Dubbo-go 生态组件。

四 动手体验 Dubbo-go-Mesh

Dubbo-go 目前已支持兼容 Istio 的服务治理能力。支持基于 Istio 的接口级服务发现能力,兼容 Istio 生态的流量控制和管理能力,并且提供了脚手架和应用模板以提高 Go 应用开发效率。

您可参考文档 【Dubbo-go 文档 - Mesh 任务】[2],动手搭建一组 Dubbo-go Mesh 应用。

在这组任务中,开发者会从部署 Istio 环境开始,到创建应用模板、构建应用、发布应用、实现服务发现和 RPC、到最终完成流量规则动态配置,观察流量切换。对框架用户有较高的参考意义。

五 展望

Proxyless Service Mesh 能力将跟随 Dubbo-go 下一版本发布,稳定的性能需要社区成员们共同的关注与建设。在此基础之上,我们还会进一步探索轻量级 sdk + sidecar的模型;探索基于第三方流量治理组件的金丝雀发布能力;探索基于 dubbo 服务框架的多语言 sevice mesh、与更丰富的 mesh 生态组件兼容。

Dubbo-go 也将继续在云原生的方向前进,继续发掘云计算时代技术红利,与开发者同在。原文链接

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511005.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2022数据安全技术大会举办

9月6日,2022数据安全技术大会暨中国信息协会信息安全专业委员会年会在北京举行。本届大会由中国信息协会信息安全专业委员会主办、中国信息协会信息安全专业委员会数据安全技术工作部和天空卫士联合承办,逾3000家企业线上参与。 国家信息中心副主任周民…

css默认样式以及解决办法

display:inline-block元素之间存在缝隙如何解决? 父级添加font-size:0; 解决前 解决后 vertical-align是干嘛的? 属性设置元素的垂直对齐方式 场景:垂直对齐一幅图像 属性: baseline 默认。元素放置在父元素的基线…

如何发起 MQTT 亿级连接和千万消息吞吐性能测试

简介:MQTT 协议凭借简单易实现、支持 QoS、报文小等特点,占据了物联网协议的半壁江山。 作者:亦炎 随着 5G 时代的来临,万物互联的伟大构想正在成为现实。联网的物联网设备 在 2021 年已经达到了 120 亿,在未来两年&…

阿里云云原生应用平台总经理丁宇:“连接、合作、赋能”,携手加速器伙伴助力企业云上创新

简介:阿里巴巴研究员、阿里云智能云原生应用平台总经理丁宇表示,如果用三个词来形容我们希望达到的效果,就是连接、合作、赋能。 云原生加速器路演导师评委 进入数智化时代,云上创新是企业加速数字化转型、提升竞争力的必经之路。…

聚焦业务价值:分众传媒在 Serverless 上的探索和实践

简介:随着业务规模的增长,业务方对后台服务的弹性诉求越来越强怎么办?云原生峰会前线最佳落地实践心得分享:看分众传媒如何借助 Serverless 函数计算提升 80% 开发运维效率,有效降低计算成本~ 作者 | 吴松(…

当Unity实时3D引擎遇上AI虚实交互,Unity要成为元宇宙时代的新引擎

游戏引擎巨头Unity,还在为蔚来、小鹏、理想等14家车厂提供智能座舱等解决方案,以及为香港机场、北京城建、海尔卡奥斯提供数字孪生方案。实时3D引擎,也将是元宇宙时代的核心支撑。 编辑 | 宋慧 出品 | CSDN AI 领域的年度盛会——2022世界人…

告警运维中心|构建高效精准的告警协同处理体系

简介:基于报告,ARMS 能快速的整合上下文,包括 Prometheus 监控进行监控。还有前端监控的相关数据,都会整合到报告里面,进行全方位检测来收敛相关问题。 作者:延福 在开始正式内容前,我想跟大家…

数字人技术在直播场景下的应用

作者 | 薄志浩本文介绍了在数字人AI技术发展迅猛,整体AI数字人市场呈现高速增长的趋势下,与强调高实时性互动的直播业务场景的结合与应用,通过数字人渲染技术、强大的AI全栈能力、算力为虚拟主播赋能,在面部表情、肢体动作、问答对…

如何帮助业务丝滑配置?阿里巴巴用了 11 年的“功能开关” 是什么?

简介:AHAS 功能开关是一个轻量级的动态配置框架,通过功能开关可以动态管理代码中的配置项,根据需求为某个应用开启或关闭部分功能,或设置某个性能指标的阈值。功能开关通常用于设置黑白名单、运行时动态调整日志级别、降级业务功能…

摆脱 AI 生产“小作坊”:如何基于 Kubernetes 构建云原生 AI 平台

简介:本文将介绍和梳理我们对云原生 AI 这个新领域的思考和定位,介绍云原生 AI 套件产品的核心场景、架构和主要能力。 作者:张凯 前言 云原生(Cloud Native)[1]是云计算领域过去 5 年发展最快、关注度最高的方向之一…

Node 之父斥责 Oracle:你们也不用,那请交出 JavaScript 商标!

整理 | 苏宓出品 | CSDN(ID:CSDNnews)也许 13 年前,Oracle 以 74 亿美元收购 Sun Microsystems 公司时,也不会想到自己后续要牵扯到诸多的版权诉讼与投诉的漩涡之中。众所周知,Oracle 在收购 Sun 之后&…

OPLG:新一代云原生可观测最佳实践

简介:OPLG 体系拥有成熟且富有活力的开源社区生态,同时也经过了大量企业生产环境的实践检验,是当下建设新一代云原生统一可观测平台的热门选择。但是,OPLG 只是提供了一个技术体系,如何灵活运用,解决实际问…

EventBridge 集成云服务实践

简介:本篇文章主要向大家分享了通过 EventBridge 如何集成云产品事件源,如何集成云产品事件目标以及通过事件流如何集成消息产品。 作者:李凯(凯易) EvenBridge 集成概述 EventBridge 是阿里云所推出了一款无服务器…

云原生微服务的下一站,微服务引擎 MSE 升级

简介:管好微服务,成为云原生时代的新难题。 管好微服务,成为云原生时代的新难题。 从建好微服务到管好微服务,差的虽是一个字,连接起两边的却需要大量的微服务落地经验。因为软件架构的核心挑战是解决业务快速增长带…

火爆全网的“数字人”,到底是个啥?

作者 | 小枣君来源 | 鲜枣课堂庄子他老人家说过:“人生,就是一场游戏。”对于这场游戏,有些人玩得很嗨,到了结尾不肯退场,总希望无限期玩下去。例如秦始皇,总想着灵丹妙药、长生不死。还有些人呢&#xff0…

阿里云RemoteShuffleService新功能:AQE和流控

简介:阿里云EMR自2020年推出Remote Shuffle Service(RSS)以来,帮助了诸多客户解决Spark作业的性能、稳定性问题,并使得存算分离架构得以实施。为了更方便大家使用和扩展,RSS在2022年初开源,欢迎各路开发者共建。本文将…

OpenSergo 正式开源,多家厂商共建微服务治理规范和实现

简介 OpenSergo,Open 是开放的意思,Sergo 则是取了服务治理两个英文单词 Service Governance 的前部分字母 Ser 和 Go,合起来即是一个开放的服务治理项目。 该项目由阿里云、bilibili、字节跳动,以及 Spring Cloud Alibaba、Nacos…

Linux中常见的网络端口号

在使用计算机或智能手机时,我们使用各种硬件端口,如用于音频、HDMI、Type-c 等的 3.5mm 端口,其用于与硬件外围设备通信。同样,网络端口可以让我们在一台计算机上访问各种网络服务来达到通信的目的。因此,端口被认为是…

如何在云原生混部场景下利用资源配额高效分配集群资源?

简介:由于混部是一个复杂的技术及运维体系,包括 K8s 调度、OS 隔离、可观测性等等各种技术,之前的一篇文章《历经 7 年双 11 实战,阿里巴巴是如何定义云原生混部调度优先级及服务质量的?》,主要聚焦在调度优…

稳定性与高可用保障的工作思路

简介:稳定性与高可用性是老生常谈的两个词。凭借经验和感受我们知道,提高系统的这两项指标,系统会更加健康,产品也会有更好的用户体验。但是如果要给稳定性和高可用性下一个定义该如何表述?稳定性和高可用性这二者又有…