dubbo-go框架介绍

news2024/11/26 8:35:49

框架介绍

什么是 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 流量治理示例任务

 

 

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

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

相关文章

不只是请求和响应:使用Fiddler抓包URL和Method全指南(中)

欢迎浏览高耳机的博客 希望我们彼此都有更好的收获 感谢三连支持! 不只是请求和响应:使用Fiddler抓包HTTP协议全指南(上)-CSDN博客https://blog.csdn.net/Chunfeng6yugan/article/details/144005872?spm1001.2014.3001.5502 🙉在(上)篇博客中&#xf…

Linux操作系统学习---初识环境变量

目录 ​编辑 环境变量的概念: 小插曲:main函数的第一、二个参数 获取环境变量信息: 1.main函数的第三个参数 2.查看单个环境变量 3.c语言库函数getenv() 和环境变量相关的操作指令: 1.export---导出环境变量: 2.unse…

跨平台应用开发框架(1)----Qt(组件篇)

目录 1.Qt 1.Qt 的主要特点 2.Qt的使用场景 3.Qt的版本 2.QtSDK 1.Qt SDK 的组成部分 2.安装 Qt SDK 3.Qt SDK 的优势 3.Qt初识 1.快速上手 widget.cpp mian.cpp widget.h Helloworld.pro 2.对象树 3.坐标系 4.信号和槽 1. 信号和槽的基本概念 2. 信号和槽的…

mysql索引失效的五种情况

第一种 违反最左前缀法则 这个是针对联合索引的。 假设有个tb_seller表,现在给三个字段建立联合索引,建立的时候字段顺序不可随便设置,字段顺序: name, status, address。下图Seq_in_index对应的是联合索引顺序。 判断索引失效用…

H3C OSPF 多区域实验

目录 前言 实验拓扑 实验需求 实验解析 路由器配置 测试 前言 此篇文章为 OSPF多区域试验,建议先食用OSPF单区域实验,理解实验原理 学习基本配置,再来使用此篇,效果更佳!(当然如果你已经了解原理与基…

算法 Java实现

一.查找算法 1.分块查找 二.排序算法 1.冒泡排序

优先算法 —— 双指针系列 - 快乐数

1. 快乐数 题目链接: 202. 快乐数 - 力扣(LeetCode)https://leetcode.cn/problems/happy-number/description/ 2. 题目解析 示例1: 示例2: 3. 算法原理 两种情况:我们可以把两种情况都看作为循环&#xff0…

【机器学习】——卷积与循环的交响曲:神经网络模型在现代科技中的协奏

🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大二学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL&#xff0…

php 导出excel 一个单元格 多张图片

public function dumpData(){error_reporting(0); // 禁止错误信息输出ini_set(display_errors, 0); // 不显示错误$limit $this->request->post(limit, 20, intval);$offset $this->request->post(offset, 0, intval);$page floor($offset / $limit) 1 ;$wh…

几天游记啊

绿灯常亮,黄灯闪,就是没有上线状态 一 2024.11.24 青浦圆通信息中心:vsphere client IDC运维专员可能就这项技能稀缺 二 2024.11.25 1 字节服务器外包单位有孚网路 什么互联网交换中心 不了解的人还以为是国家火炬计划呢!实际…

【C++动态规划 子集状态压缩】2002. 两个回文子序列长度的最大乘积|1869

本文涉及知识点 C动态规划 位运算、状态压缩、枚举子集汇总 LeetCode2002. 两个回文子序列长度的最大乘积 给你一个字符串 s ,请你找到 s 中两个 不相交回文子序列 ,使得它们长度的 乘积最大 。两个子序列在原字符串中如果没有任何相同下标的字符&…

记录:从.Net程序的内存转储文件中提取内存数据过程

1.准备材料:xxx.dump转储文件,VS2022 2.提取过程 使用VS打开xxx.dump文件VS中点击 调试托管内存 按钮查找需要导出的变量,注:通过类型查找时基础变量类型跟原类型不一样,如string对应String,bool对应Bool…

Nacos学习文档

目录 1、Nacos是什么2、Nacos名词介绍3、Nacos中的data id是如何组装的?4、Nacos 融合 Spring Cloud,成为注册配置中心4.1、Maven依赖作用4.2、启动配置管理4.2.1、添加依赖4.2.2、在 bootstrap.yml(也支持properties格式) 中添加…

QT简易项目 数据库可视化界面 数据库编程SQLITE QT5.12.3环境 C++实现

案例需求&#xff1a; 完成数据库插入&#xff0c;删除&#xff0c;修改&#xff0c;查看操作。 分为 插入&#xff0c;删除&#xff0c;修改&#xff0c;查看&#xff0c;查询 几个模块。 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget…

【Linux学习】【Ubuntu入门】2-3 make工具和makefile引入

1.使用命令新建三个.c文件vi main.c&#xff0c;vi input.c&#xff0c;vi caclcu.c&#xff0c;两个.h文件vi input.h&#xff0c;vi caclcu.h 2.vi Makefile&#xff1a;新建Makefile文件&#xff0c;输入一下内容 注意&#xff1a;命令列表中每条命令前用TAB键&#xff0c;不…

Gazebo仿真实现无人机+Apriltag码动态跟踪

目录 演示 一、环境 二、配置 创建模型 首先相机创建 添加相机 Apriltag创建 地图添加apriltag码 Apriltag_ros配置 三、代码运行 四、问题 修改相机模型的参数 演示 一、环境 ROSgazebo配置 Px4Mavros Apriltag_ros编译 二、配置 在默认的mavros_posix_sitl.l…

H.265流媒体播放器EasyPlayer.js播放器提示MSE不支持H.265解码可能的原因

随着人工智能和机器学习技术的应用&#xff0c;流媒体播放器将变得更加智能&#xff0c;能够根据用户行为和偏好提供个性化的内容推荐。总体而言&#xff0c;流媒体播放器的未来发展将更加注重技术创新和用户互动&#xff0c;以适应不断变化的市场需求和技术进步。 提示MSE不支…

加菲工具 - 好用免费的在线工具集合

加菲工具 https://orcc.online AI 工具 集合了目前主流的&#xff0c;免费可用的ai工具 文档处理 pdf转word、office与pdf互转等等工具都有链接 图片图标 统计了好用免费的在线工具 编码解码 base64编码解码、url编码解码、md5计算、进制转换等等 其它 还有其他好用的…

【linux学习指南】初识Linux进程信号与使用

文章目录 &#x1f4dd;信号快速认识&#x1f4f6;⽣活⻆度的信号&#x1f4f6; 技术应⽤⻆度的信号&#x1f309; 前台进程&#xff08;键盘&#xff09;&#x1f309;⼀个系统函数 &#x1f4f6;信号概念&#x1f4f6;查看信号 &#x1f320; 信号处理&#x1f309; 忽略此信…

今天你学C++了吗?——C++中的类与对象(第二集)

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…