Apache Dubbo (RPC框架)
本文参考官方文档:Apache Dubbo
1. Dubbo 简介与核心功能
Apache Dubbo 是一个高性能、轻量级的开源Java RPC框架,用于快速开发高性能的服务。它提供了服务的注册、发现、调用、监控等核心功能,以及负载均衡、流量控制、服务降级等高级功能。Dubbo 支持多种协议,包括但不限于 Dubbo 协议、RMI、HTTP、Hessian等,使得开发者可以灵活选择适合自己业务场景的通信协议。
具体功能点描述:
1.1 服务治理:
-
地址发现:Dubbo 提供了高性能的服务发现机制,支持大规模集群,并且可以与多种注册中心(如 Nacos、Zookeeper、Consul)进行适配。
-
负载均衡:Dubbo 默认提供了多种负载均衡策略,包括加权随机、加权轮询、最少活跃请求数优先等。
-
流量路由:Dubbo 支持基于规则的流量路由,可以实现 A/B 测试、金丝雀发布等功能。
1.2 流量管控:
-
Dubbo 提供了丰富的流量管控规则,可以控制服务间的流量走向和 API 调用,实现动态调整服务行为如超时时间、重试次数、限流参数等。
1.3 微服务生态:
-
围绕 Dubbo 构建了完善的微服务治理生态,对于绝大多数服务治理需求,通过简单几行配置即可开启。
1.4 可视化控制台:
-
Dubbo Admin 提供了可视化的 Web 交互控制台,可以实时监测集群流量、服务部署状态、排查诊断问题。
1.5 安全体系:
-
Dubbo 支持基于 TLS 的数据传输通道,并提供认证、鉴权策略,实现细粒度的资源访问控制。
1.6 服务网格:
-
基于 Dubbo 开发的服务可以透明地接入 Istio 等服务网格体系,支持基于 Envoy 的流量拦截方式,也支持 Proxyless Mesh 部署模式。
1.7 高性能通信协议:
-
Dubbo 提供了高性能的通信协议实现,支持流式通信模型,不绑定序列化协议,支持单个服务的多协议暴露。
1.8 云原生支持:
-
Dubbo 完全遵循云原生微服务开发理念,支持 Kubernetes、Service Mesh 等云原生基础设施与部署架构。
1.9 易用性提升:
-
Dubbo 官网大改版体现了对易用性体验的深刻理解和不懈追求,通过简化信息获取、优化内容结构和提升用户交互,为开发者创造一个更加友好和高效的开发环境。
2. Dubbo 的开源故事与发展历程
Dubbo 最初由阿里巴巴开发,用于解决大规模服务化架构下的远程服务调用问题。随着其在业界的广泛应用,Dubbo 在2017年被捐献给 Apache 软件基金会,并在2018年成为 Apache 的顶级项目。Dubbo 的开源之路,不仅推动了微服务架构在国内的发展,也促进了开源社区的繁荣。
3. Dubbo 在云原生时代的演进
随着云原生技术的兴起,Dubbo 也在不断进化。Dubbo3 作为新一代的微服务框架,提供了对云原生架构的全面支持,包括对 Kubernetes 的集成、服务网格(Service Mesh)的适配等。Dubbo3 通过 Proxyless Mesh 架构,减少了对 Sidecar 的依赖,降低了资源消耗,提高了性能。
4. 用户案例与实践
Dubbo 在阿里巴巴、京东、滴滴等大型互联网公司中得到了广泛应用。例如,在阿里巴巴内部,Dubbo3 已经成为统一的服务框架,支撑着数以万计的服务实例。这些实践证明了 Dubbo 在处理高并发、高可用性场景下的强大能力。
5. Dubbo 架构详解

Dubbo 的架构包括以下几个核心组件:
-
Provider:服务提供者。
-
Consumer:服务消费者。
-
Registry:服务注册中心,如 Zookeeper、Nacos。
-
Monitor:服务监控中心,用于统计服务调用次数和时间。
-
Container:服务容器,用于运行服务提供者。
Dubbo 的调用关系遵循发起请求、服务注册、服务发现、服务调用、结果返回的流程。
6. Dubbo3 核心特性与升级
Dubbo3 引入了以下核心特性:
-
全面支持异步调用:提高了服务调用的性能。
-
增强的多语言支持:通过 gRPC 协议,Dubbo3 支持了更多的编程语言。
-
服务网格集成:Dubbo3 可以与 Istio 等服务网格框架集成,提供更灵活的流量管理。
7. 快速入门与案例
Dubbo 提供了简单的入门指南,开发者可以通过 Maven 依赖快速开始一个 Dubbo 项目。以下是一个简单的服务提供者和消费者的示例代码,以及必要的配置文件。
// 服务接口
public interface GreetingService {String sayHello(String name);
}// 服务提供者实现
@DubboService(version = "1.0.0")
public class GreetingServiceImpl implements GreetingService {public String sayHello(String name) {return "Hello " + name;}
}// 服务消费者调用
@DubboReference(version = "1.0.0")
private GreetingService greetingService;public String useGreetingService(String name) {return greetingService.sayHello(name);
}
不积跬步,无以至千里 --- xiaokai
相关文章:
Apache Dubbo (RPC框架)
本文参考官方文档:Apache Dubbo 1. Dubbo 简介与核心功能 Apache Dubbo 是一个高性能、轻量级的开源Java RPC框架,用于快速开发高性能的服务。它提供了服务的注册、发现、调用、监控等核心功能,以及负载均衡、流量控制、服务降级等高级功能。…...
LeetCode 3226. 使两个整数相等的位更改次数
. - 力扣(LeetCode) 题目 给你两个正整数 n 和 k。你可以选择 n 的 二进制表示 中任意一个值为 1 的位,并将其改为 0。 返回使得 n 等于 k 所需要的更改次数。如果无法实现,返回 -1。 示例 1: 输入: n …...
面试经典 150 题:189、383
189. 轮转数组 【参考代码】 class Solution { public:void rotate(vector<int>& nums, int k) {int size nums.size();if(1 size){return;}vector<int> temp(size);//k k % size;for(int i0; i<size; i){temp[(i k) % size] nums[i];}nums temp; }…...
Python模拟真人动态生成鼠标滑动路径
一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…...
如何压缩pdf文件的大小?5分钟压缩pdf的方法推荐
如何压缩pdf文件的大小?在现代办公和学习中,PDF文件因其稳定性和广泛的兼容性被广泛使用。然而,随着文件内容的增多,制作好的PDF文件常常变得过大,给使用带来了诸多不便。无论是电子邮件附件的发送,还是在线…...
【SQL】[2BP01] ERROR: cannot drop table course because other objects depend on it
问题描述 在尝试执行以下SQL语句时,发生错误。 DROP TABLE Course RESTRICT;执行以上语句后,系统返回了一个错误提示: [2BP01] ERROR: cannot drop table course because other objects depend on it 详细:constraint sc_cno_…...
gbase8s之spring框架用druid中间件报语法错误
spring框架 调用druid中间件 时报这个错: MetaDataAccessException: Could not get Connection for extracting meta-data; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception …...
【网络安全】|nessus使用
1、扫描结果分析: Sev:漏洞的严重性级别 CVSS:量化漏洞严重性的标准,通过计算得出一个分数,分数越高表示漏洞越严重。 VPR:基于风险的评分系统,帮助组织优先处理风险最高的漏洞。 EPSS…...
CSRA2的LINUX操作系统24年11月2日上午上课笔记
几个查找命令: .whereis:查看文件的路径,查看可执行文件的路径,一级相应文档路径。 .which:查看系统可执行的文件的路径,以及命令的别名等信息 .local:他会将linux中的所有文件的路径信息保存到数据库中,在数据库中查…...
通过分解质因数求若干个数的最小公倍数
求最小公倍数的常规方法回顾 暴力枚举法 long long work(long long a,long long b) {for(long long imax(a,b);;i)if(i%a0&&i%b0)return i; }大数翻倍法 long long work(long long a,long long b) {if(a<b) swap(a,b);for(long long ia;;ia) // i 是 a 的倍数&#…...
数据库三范式(1NF、2NF、3NF)
1NF(第一范式) 定义:确保每一列都是原子值,即是不可分割的基础数据项。 所谓第一范式(1NF)是指在关系模型中,对于添加列的一个规范要求,所有的列都 应该是原子性的,即数…...
C语言_数据结构_顺序表
1. 本章重点 顺序表初始化顺序表尾插顺序表尾删顺序表头插顺序表头删顺序表查找顺序表在pos位置插入x顺序表删除pos位置的值顺序表销毁顺序表打印 2. 顺序表的概念及结构 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储…...
Llama 3.2 Vision Molmo:多模态开源生态系统基础
编者按: 视觉功能的融入对模型能力和推理方式的影响如何?当我们需要一个既能看懂图像、又能生成文本的 AI 助手时,是否只能依赖于 GPT-4V 这样的闭源解决方案? 我们今天为大家分享的这篇文章,作者的核心观点是…...
【数据结构与算法】第6课—数据结构之栈
文章目录 1. 栈2. 栈的初始化和栈的销毁3. 入栈和出栈(压栈)4. 取栈顶元素并打印5. 栈的练习题5.1 有效的括号 1. 栈 栈:也是一种线性表,其数据结构与动态顺序表的数据结构类似栈分为栈顶和栈底,在栈中,插入…...
开源全站第一个Nextron(NextJS+electron)项目--NextTalk:一款集成chatgpt的实时聊天工具
NextTalk 简介 该项目是一个基于Nextron(NextJSElectron)的桌面端实时聊天工具。 但由于使用了NextJS中的ssr及api route功能,该程序只能在开发环境运行。 关于生产版本:我将其网页端部分分离,并用Pake将其打包成桌面端,生产体…...
多样化的编程模型:并发与并行策略
因为经常看着某些框架设计的编程模型很晕,所以自己梳理总结了一下编程模型的分类,总共六个大类,基本所有常见框架设计的编程模型都是基于这六个大类来实现的,如果有错误的地方,请见谅并不吝赐教,感谢&#…...
npm入门教程2:npm历史
一、起源与诞生 时间背景:npm的诞生与Node.js的兴起紧密相关。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它允许JavaScript代码在服务器端运行。随着Node.js的流行,开发者们对于包管理和依赖解决的需求日益增长。诞生:…...
Cuebric:用AI重新定义3D创作的未来
一、简介 Cuebric 是一家成立于2022年夏天的好莱坞创新公司,致力于为电影、电视、游戏和时尚等行业提供先进的AI多模态SaaS平台。自2024年1月正式推出以来,Cuebric 已经在市场上获得了广泛的认可和积极的反馈。目前,该平台正处于1.0版本的beta测试阶段,已募集约50万美元的…...
前端react常见面试题目(basic)
1. 如果 React 组件的属性没有传值,它的默认值是什么? 如果一个 React 组件的属性(props)没有传值,那么它的默认值会是 undefined。你可以通过组件内部的逻辑来设置默认值,比如使用逻辑运算符或者 ES6 的默认参数。 …...
机器人技术基础(4章逆运动解算和雅克比矩阵)
逆运动解算: 雅克比矩阵: 将动力学分析转向运动的物体 下图中的 n o y 反映了机器人的姿态矩阵, 最后一列 p 反应了机器人在空间中的位置:...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
