dubbo-go框架介绍

框架介绍

什么是 dubbo-go

Dubbo-go 是 Apache Dubbo 的 go 语言实现,它完全遵循 Apache Dubbo 设计原则与目标,是 go 语言领域的一款优秀微服务开发框架。dubbo-go 提供:

  • API 与 RPC 协议:帮助解决组件之间的 RPC 通信问题,提供基于 HTTP/1/2 的通信协议、streaming流式通信模型。
  • 丰富的微服务治理能力:解决地址发现、流量管控、可观测性、全链路追踪、日志等微服务整体解决方案。

概念与架构

以下是 dubbo-go 的整体架构图: 

c0adf5809bcc4727ac4d73c58bca057a.png

dubbo-go 总体上遵循 框架内核+插件 的的设计理念,左侧的 框架内核 定义了 dubbo-go 作为微服务框架的一些核心概念,右侧的 插件 部分则提供了核心概念扩展实现。

框架内核 可分为 4 个层次,从上到下依次为:

  • API 层:dubbo-go 同时支持基于 IDL、interface/struct 的服务契约定义,兼顾跨语言与易用性诉求;支持基于纯 yaml 文件的微服务配置模式;提供了同步、异步、单次(unary)、流式(streaming) 等 RPC 通信与编码模型。

  • 服务治理层:dubbo-go 内置了多维度的服务治理能力抽象,确保满足微服务开发与集群治理的核心诉求,这包括地址发现(Service Discovery)、负载均衡(Load Balancing)、可观测指标(Metrics)、流量管控(Traffic Management)、全链路追踪(Tracing)等。

  • RPC 协议层:dubbo-go 实现的最核心的 RPC 协议是 - triple 协议,triple 可同时工作在 http1/2 之上 (支持 CURL 直接访问),兼容 gRPC;从设计上,dubbo-go 还提供了多协议发布服务的支持,你可以在一个进程内同时发布 triple、dubbo2、rest、jsonRPC 等多种不同通信协议的服务。

  • 传输层:支持 HTTP1/2、TCP 传输层,兼顾性能与通用性,同时支持多种序列化方式。

插件 体系极大的丰富了 dubbo-go 功能与生态,社区内置提供了大量的内置扩展实现,同时,开发者可以非常容易的根据需求增加扩展实现。以下是一些典型的插件定义:

  • Protocol:dubbo-go 基于 protocol 插件内置提供了 triple、dubbo2、rest 等协议支持,通过扩展 protocol 可以为 dubbo-go 扩展更多协议
  • Service Discovery:支持 Nacos、Zookeeper、Polaris 等主流注册中心集成
  • Traffic Management:dubbo-go 支持 Dubbo 体系定义的流量规则,可以实现在运行期动态的调整服务行为如超时时间、重试次数、限流参数等,通过控制流量分布可以实现 A/B 测试、金丝雀发布、多版本按比例流量分配、条件匹配路由、黑白名单等
  • Metrics:提供 RPC 调用(RT、QPS、调用量、请求成功数、请求失败数、并发请求数等)、注册中心、元数据中心、配置中心交互统计等丰富的内置采集埋点,支持多维度的指标聚合
  • Logging:提供通用的日志采集接口定义,内置 Zap、Logrus 支持
  • Tracing:提供分布式链路追踪能力,通过此插件扩展可接入 Zipkin、Jaeger、Skywalking 等链路追踪系统。

下图是从内核源码视角,给出的框架核心组件以及组件之间的关联关系:

3d022a182b5448ae92378bf13deadc7b.png

RPC

Triple

基于 Dubbo 定义的 triple 协议,你可以轻松编写浏览器、gRPC 兼容的 RPC 服务,并让这些服务同时运行在 HTTP/1 和 HTTP/2 上。作为 Apache Dubbo 多语言 RPC体系的一环,dubbo-go 提供了 triple 协议的完整实现,支持使用 IDL 或编程语言特有的方式定义服务,并提供一套轻量的 API 来发布或调用这些服务。triple 协议让 dubbo-go 可以:

  • 作为后端服务与 Dubbo 其他语言实现互通
  • 接收浏览器等标准 http 工具发起的请求
  • 与标准的 gRPC 体系互通

17fa7efd538242f4812a4be6f3e08c8c.png

请参考以下链接了解更多 dubbo-go 跨语言或跨产品的互通细节:

  • 与 Dubbo 其他多语言体系互通 - 基于 triple+protobuf
  • 与 Dubbo2 Java互通 - 基于 dubbo2+hessian2
  • 与 gRPC 体系互通

多协议支持

除了 triple 协议之外,dubbo-go 支持更多的 RPC 协议和序列化方式:

协议协议名 (用于配置)序列化方式默认序列化方式
Triple 【推荐】tripb/json/自定义pb
Dubbodubbohessian2hessian2
jsonRPCjsonrpcjsonjson
RESTrestjsonjson

Filter

如下图所示,filter 是一个类似 AOP 的请求拦截机制,每一次 RPC 请求都会被 filter 拦截

c06675cddd1340b0a183f0883e22401f.png

我们可以在 filter 实现中完成比如请求拦截、记录、预处理、后处理的事情。dubbo-go 的一些核心能力,比如超时时间、访问日志(ccesslog)、metrtics 等都是基于内置 filter 实现的。

Streaming

f73d2856d5784ff0a2ec22eaac2c617c.png

  • Server streaming RPC:一次 server-streaming RPC 请求与 unary RPC 非常类似,不同之处在于,对于单次 client 请求 server 会返回一系列的流式响应。

  • Client streaming RPC:一次 client-streaming RPC 请求与 unary RPC 非常类似,不同之处在于,client 会发送一系列的流式请求到 server,最终 server 针对所有收到的请求返回一条响应信息。

  • Bidirectional streaming RPC:在双向流式 RPC 请求中,请求首先由 client 端发起,server 在收到请求信息(方法名、metadata等)后,可以选择立即发送 metadata 作为响应,或者一直等到 client 进一步发起流式请求数据。

服务治理

dubbo-go 提供了完善的服务治理能力,包括地址发现、可观测、全链路追踪、流量管控等。你可以使用 dubbo-go 开发与管理微服务集群并实现与 Apache Dubbo 其他语言体系的互通。

地址发现

2c3c36ae24c748f8a5a12f5cb656f42d.png

Dubbo-go 支持的注册中心类型如下,具体配置方式请参考使用教程 地址发现:

注册中心注册中心名(用于配置)
Zookeeperzookeeper
Nacosnacos
Etcdetcd
Polarispolaris

可观测

dubbo-go 的可视化指标采集遵循 Apache Dubbo 定义的 metrics 指标规范。在实现 metrics 指标采集后,接下来就是如何可视化展示的问题,当前最常用的式导出到 Prometheus 并通过 Grafana 实现数据可视化展示。

具体启用方式请参考使用手册中的 可视化观测。

全链路追踪

dubbo-go 支持通过 Open Telemetry 接入 Zipkin、Jaeger、Skywalking 等全链路追踪系统。

具体启用方式请参考使用手册中的 全链路追踪。

流量管控

dubbo-go 实现的流量治理规则完全遵循 Dubbo 框架设计的流量治理能力,可以通过以下链接了解更多详情:

  • Dubbo 流量治理规则设计
  • Dubbo 流量治理示例任务

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DataGear 5.2.0 发布,数据可视化分析平台

DataGear 企业版 1.3.0 已发布,欢迎体验! http://datagear.tech/pro/ DataGear 5.2.0 发布,图表插件支持定义依赖库、严重 BUG 修复、功能改进、安全增强,具体更新内容如下: 重构:各模块管理功能访问路径…

2023年3月GESPC++一级真题解析

一、单选题(每题2分,共30分) 题目123456789101112131415答案BAACBDDAADBCDBC 1.以下不属于计算机输入设备的有( )。 A .键盘 B .音箱 C .鼠标 D .传感器 【答案】 …

RabbitMQ2:介绍、安装、快速入门、数据隔离

欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…

vue2.0 luoyi框架 代码漏洞检查问题

检查出在element ui存在漏洞 经过在elemen-ui.common.js文件中查找没发现eval函数 后发现是打包之后生成的产物 解决方法 在vue.config.js文件中进行打包配置 configureWebpack: {devtool: source-map, // 禁用 eval,使用 source-map 进行源码映射},

管家婆财贸ERP BR035.回款利润明细表

最低适用版本: 财贸系列 23.5 插件简要功能说明: 报表统计销售单/销售退货单/销售发票回款情况更多细节描述见下方详细文档插件操作视频: 进销存类定制插件--回款利润明细表 插件详细功能文档: 1. 应用中心增加报表【回款利润明细表】 a. b. 查询条件: ⅰ. 日期区间:…

学习QT第二天

QT6示例运行 运行一个Widgets程序运行一个QT Quick示例 工作太忙了,难得抽空学点东西。-_-||| 博客中有错误的地方,请各位道友及时指正,感谢! 运行一个Widgets程序 在QT Creator的欢迎界面中,点击左侧的示例&#xf…

【图像检测】深度学习与传统算法的区别(识别逻辑、学习能力、泛化能力)

识别逻辑 深度学习 使用了端到端的学习策略,直接学习从图像到检测结果的映射关系,自动提取特征,并且根据特征与特征之间的关系,计算出检测结果。 传统算法 则是人工提取特征,比如边缘特征,直线特征&#x…

2024数学建模亚太赛【C题】赛题详细解析

目录 📑一、竞赛时间 🗝️二、奖项设置 ✏️三、选题思路 🔍阶段一:【数据预处理与探索性分析】 1.【数据清洗与预处理】 2.【探索性数据分析(EDA)】 🔍阶段二:【时间序列建模…

移远通信推出全新5G RedCap模组RG255AA系列,以更高性价比加速5G轻量化大规模商用

11月20,全球领先的物联网整体解决方案供应商移远通信宣布,正式推出其全新5G RedCap模组RG255AA系列。该系列模组支持5G NR独立组网(SA)和LTE Cat 4双模通信,具有高性能高集成度、低功耗、小尺寸、高性价比等优势&#…

任务中断的两套API函数(改进FormISR的实时性)资源管理_互斥操作的本质(解决DH11经常出错的问题)

任务中断的两套API函数 为什么需要两套 API 在任务函数中,我们可以调用各类 API 函数,比如队列操作函数:xQueueSendToBack。 但是在 ISR 中使用这个函数会导致问题,应该使用另一个函数:xQueueSendToBackFromISR&…

基于SpringBoot+Vue的高校社团管理系统

摘要 随着高校社团活动日益丰富多样,传统人工管理模式弊端凸显,迫切需要信息化的社团管理系统。本文介绍了基于 SpringBoot Vue 开发的高校社团管理系统。在技术选型方面,SpringBoot 作为后端框架,凭借其强大的自动配置功能&…

vscode插件Todo tree

# 需求 : 将注释形成可视化列表 快速找到相关代码位置 免搜索 # 使用步骤 1. 安装todo tree 插件 2. 使用 todo tree 按快捷键 ctrlshiftp 输入 todo tree:add tag 添加你打注释的开头关键字 比如 // 这是一条注释 示例可以添加搜索tag为 //空格 3. t…

Windows Server 2022 Web2

载入靶机,看到相关描述: 进入虚拟机发现桌面有phpstudy和解题两个软件: 先点击“解题.exe”: 1.攻击者的IP地址(两个)? 2.攻击者的webshell文件名? 3.攻击者的webshell密码&#x…

学习Prompt Turning

传统的微调因为代价很高,而且一旦权重很大,这种fine 微微的意思是调不动模型的,所以需要这种提示词调 mindnlp直接有 peft config peft_config PromptTuningConfig(task_type“SEQ_CLS”, num_virtual_tokens10) 方便我们进行prompt tunin…

分类算法——基于heart数据集实现

1 heart数据集——描述性统计分析 import matplotlib.pyplot as plt import pandas as pd# Load the dataset heart pd.read_csv(r"heart.csv", sep,)# Check the columns in the DataFrame print(heart.columns)aheart.loc[:, y].value_counts() print(a) heart.l…

POA-CNN-SVM鹈鹕算法优化卷积神经网络结合支持向量机多特征分类预测

分类预测 | Matlab实现POA-CNN-SVM鹈鹕算法优化卷积神经网络结合支持向量机多特征分类预测 目录 分类预测 | Matlab实现POA-CNN-SVM鹈鹕算法优化卷积神经网络结合支持向量机多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现POA-CNN-SVM鹈鹕算法…

【SVN和GIT】版本控制系统详细下载使用教程

文章目录 ** 参考文章一、什么是SVN和GIT二、软件使用介绍1 SVN安装1.1 服务端SVN下载地址1.2 客户端SVN下载地址2 SVN使用2.1 服务端SVN基础使用2.1.1 创建存储库和用户成员2.1.2 为存储库添加访问人员2.2 客户端SVN基础使用2.2.1 在本地下载库中的内容2.2.2 版本文件操作--更…

设计模式:7、策略模式(政策)

目录 0、定义 1、策略模式的三种角色 2、策略模式的UML类图 3、示例代码 0、定义 定义一系列算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。 1、策略模式的三种角色 策略(Strategy&…

3、集线器、交换机、路由器、ip的关系。

集线器、交换机、路由器三者的关系 1、集线器2、交换机(每个交换机是不同的广播域,ip地址起到划分广播域的作用)3、 路由器4、ip地址 1、集线器 一开始两台电脑通信就需要网线就可以,但是三台或者更多主机通信时,就需…

mfc100u.dll是什么?分享几种mfc100u.dll丢失的解决方法

mfc100u.dll 是一个动态链接库(DLL)文件,属于 Microsoft Foundation Classes (MFC) 库的一部分。MFC 是微软公司开发的一套用于快速开发 Windows 应用程序的 C 类库。mfc100u.dll 文件包含了 MFC 库中一些常用的函数和类的定义,这…