Dubbo

article/2025/11/1 16:13:48

协议:

        Dubbo是一种分布式服务框架也是一种协议,dubbo框架默认使用dubbo协议。dubbo协议是阿里巴巴自己实现的一种应用层协议,传输层还是TCP。所以Dubbo协议与HTTP、FTP,SMTP这些应用层协议是并列的概念。除了默认的Dubbo协议,Dubbo框架还支持RMI、Hessian、HTTP等协议。

  • RPC面向过程,只发送 GET 和 POST 请求。GET用来查询信息,其他情况下一律用POST。请求参数是动词,直接描述动作本身。
  • RESTful面向资源,使用 POST、DELETE、PUT、GET 请求,分别对应增、删、改、查操作。请求参数是名词,这个名词就是“增删改查”想要操作的对象。

为什么是高性能的呢?


1、可以在某个服务器集群中提供单一专注的服务,这样不与其他服务混杂,同时dubbo接口有SOA调度通过监控每台服务器而实现负载均衡
consumer端无需关注provider端如何实现,只需在注册中心订阅即可到相应服务器请求服务,这样就实现了高性能和透明化。
说到底,Dubbo接口就是一个分布式服务框架。

2、协议不同:

        报文格式不同:

                 http协议报文包括请求头,请求首行,请求体。传输数据量大,占用大。http通信需要三次握手。消耗资源。

                dubbo协议报文短小,包括调用的接口权限定名称,参数列表参数值即可。不需要三次握手。消费端和服务提供端建立单一长连接的方式,且dubbo的报文传输数据小,所以支持高并发。通信采用NIO异步通信的方式。

        建立连接不通:

                dubbo协议,消费者和服务者建立单一的长连接,减少了建立连接的资源消耗。

                http协议,消费者和服务者建立多连接,并且需要三次握手,消耗资源。

        通信方式不通:

                dubbo协议采用NIO通信模式。

                http协议采用同步传输。

        序列化数据不同:

                dubbo采用Hessian作为序列化协议,采用PB数据存储格式(Protocol Buffer),采用proto编译器,自动进行序列化和反序列化,数据压缩体积更小,单一长连接中传输更加方便。(Protocol Buffer 其实是 Google 出品的一种轻量并且高效的结构化数据存储格式,性能比 JSON、XML 要高很多。)

                http采用JSON

不同点:

        1、SpringCloud基于Http调用的方式,更加灵活,但是消息封装臃肿(可以使用gzip压缩);Dubbo基于RPC调用的方式,使服务就像可以调用自己本地的服务一样调用别人的服务。
        2、Dubbo在传输前需要将数据进行序列化,同时接收返回数据结果也需要以统一的序列化方式反序列化;而SpringCloud需要封装请求头和请求体,通过Http向服务发起请求,在经过服务的处理之后封装响应头和响应体返回相应信息
        3、SpringCloud可以跨语言,基于Http请求。
 

Dubbo的节点角色:运行原理

运行原理
(1)启动容器,相当于在启动Dubbo的Provider
(2)启动后回曲注册中心进行注册,注册所有可以提供的服务列表
(3)在Consumer启动后会去Registry中获取服务列表和Provider的地址,进行订阅
(4)当Provider有修改后,注册中心会把消息推送给Consummer,使用了观察者设计模

(5)根据获取到的Provider地址,真实调用Provider中的功能,在consummer方使用了代理设计模式,创建了一个Provider方类的一个代理对象。通过代理对象获取Provider中的真实功能,起到保护Provider真实功能的作用。
(6)Consumer和Provider每隔一分钟会向Monitor发送统计信息,统计信息包括访问次数,频率等。
 

总结:

        Dubbo服务容器Container启动之后,将服务提供者Provider对外暴露的服务注册进注册中心Register,一般使用ZK作为注册中心,同时本地存储对外暴露服务和实现类的映射关系。服务消费者Consumer向注册中心订阅自己需要消费的服务,同时Consumer和Register基于长连接保持通讯,采用观察者模式进行监听服务提供者的变化,如果服务提供者发生改变,注册中心会通知服务消费者。服务提供者和服务消费者都与Dubbo的监控中心建立连接,监控中心用户监控服务调用情况,调用频率等。

        服务调用过程:

首先对引用服务生成代理对象,通过ZK获取到服务提供者列表,通过Selector选择一个服务(负载均衡)Invoker。

Dubbo的特点:

        1.面向接口的代理模式高性能RPC调用。

        2.智能的服务客户端负载均衡。

        3.服务的自动注册与发现。

        4.服务的限流。

        5.高扩展性。支持很多种协议,支持很多种序列化方式。因为序列化和反序列化协议要统一。

        6.可视化的服务治理。 

解决高并发的三把利器:降级、限流、缓存。

Dubbo的服务降级:针对的是服务的消费者

        比如A服务对外提供了一个访问请求,A服务中调用了B服务,B服务是一个远程服务,当A服务调用量很大是,此时如果B服务不重要,那么A调用B服务,A作为服务的消费方,可以对调用的B服务进行服务的降级处理。那么就是服务消费者A进行对服务提供者B的降级处理。

        分为两种:屏蔽和容错:

        屏蔽:不发起远程服务的调用,直接返回null对象。

        容错:会发起远程服务调用,如果调用失败或者超时不会抛出异常,而是null。

集群容错:

        服务提供者有多个集群,单点故障之后,Dubbo消费者正常调用:默认是,失败自动切换节点重试。

Dubbo的默认限流机制:

        Dubbo默认使用令牌桶算法实现限流。某段时间内,桶里面只能放进n个令牌,然后来一个请求就减少一个令牌,如果桶里面的令牌没有了,则不能继续执行请求。

限流通过com.alibaba.dubbo.rpc.filter.TpsLimitFilter实现。

public boolean isAllowable() {// 获取现在的时间long now = System.currentTimeMillis();// 当经过了interval时间间隔if (now > lastResetTime + interval) {// 重新设置token令牌的个数token.set(rate);// 从现在开始,经过interval的时间lastResetTime = now;}// 获取令牌的值int value = token.get();boolean flag = false;// 使用CAS实现乐观锁while (value > 0 && !flag) {// 能够执行请求,则令牌减一flag = token.compareAndSet(value, value - 1);value = token.get();}return flag;
}

限流采用令牌桶算法来实现,假如桶里有10个令牌,来一个请求,就减少一次,限流涉及到两个参数,一个是限流的间隔时间,一个是这个时间内有多少个请求。如果间隔时间过了,就需要重新刷新桶中的令牌数量。多线程并发访问,这个桶的减少使用的是CAS操作。


http://chatgpt.dhexx.cn/article/ZTtNrqFA.shtml

相关文章

Dubbox简单入门

dubbox是分布式框架,让我们一起来简单搭建一个小demo Dubbox简介 Dubbox 是一个分布式服务框架,其前身是阿里巴巴开源项目Dubbo ,被国内电商及互联网项目中使用,后期阿里巴巴停止了该项目的维护,当当网便在Dubbo基础上…

Dubbox简介与入门实战

前言 什么是Dubbox?Dubbox是一个分布式服务框架,其前身是阿里巴巴开源项目Dubbo,被国内电商及互联网项目中使用,后期阿里巴巴停止了Dubbo项目的维护(现Dubbo已捐献给Apache基金会),因为阿里巴巴内部的HSF框架比Dubbo…

Dubbox 环境搭建

第一章:Dubbox简介 Dubbox是一个开源的RPC(Remote ProcedureCall Protocol)远程调用框架,是由dangdang对阿里的Dubbo的升级,可以被视为Dubbo的增强版,基本架构没有变动,升级spring2.x到spring3.x,支持restful风格的调用…

Dubbox框架简介

Dubbox框架简介 Dubbox是一个分布式服务框架,其前身是阿里巴巴开源项目Dubbo,被国内电商及互联网项目中使用,后期阿里巴巴停止了该项目的维护,当当网便在Dubbo基础上进行优化,并继续维护,为了与原有的Dubb…

Dubbo的介绍以及Dubbox的区别

Dubbo官网: http://dubbo.io/ Dubbox官网: https://github.com/dangdangdotcom/dubbox Dubbo 是阿里巴巴公司开源的一个基于Java的高性能开源RPC框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。后来因为某些原…

Dubbox学习笔记

一、Dubbox简介 1、什么是SOA架构 SOA是Service-Oriented Architecture的首字母简称,它是一种支持面向服务的架构样式。从服务、基于服务开发和服务的结果来看,面向服务是一种思考方式。其实SOA架构更多应用于互联网项目开发。 为什么互联网项目会采用…

Dubbox是什么,如何整合SpringBoot,有什么优势?

目录 一、Dubbox 是什么 二、Dubbox 如何整合SpringBoot 三、Dubbox 有什么优势 一、Dubbox 是什么 Dubbox是一款基于Java语言的分布式服务框架,是阿里巴巴公司开源的一款服务化治理框架,其前身为Dubbo。Dubbox是针对Dubbo进行了改进和升级&#xff…

dubbox简介

1.1 dubbox简介 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。 单一应用架构 当网站流量很小时,只需一…

Dubbo详细介绍与安装使用过程

1 Dubbo介绍 1.1 dubbox简介 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。 单一应用架构 当网站流量很小时&…

Dubbo和Zookeeper入门到实战,看这篇就够了

前沿:在当下流行的分布式架构中Dubbo是非常流行rpc框架,借着这几天有空学习学习,并在后面的项目中进行实战,为后面的分布式项目做铺垫。 Dubbox简介 Dubbox 是一个分布式rpc框架,是阿里巴巴的开源产品,后阿…

Dubbox的简单介绍

简介:Dubbox是一个分布式服务框架,其前身是阿里巴巴开源项目Dubbo,后期阿里巴巴停止维护后,当当网在其基础上进行了优化,并继续维护,改名Dubbox。 一、 Dubbox的基本概念 Dubbox是一种分布式服务架构,它除…

dubbox概论

1.dubbox 是个啥? 他是一个分布式服务架构风格,其前身是阿里巴巴开源项目Dubbo,被国内电商及互联网项目中使用,后期阿里巴巴停止了该项目的维护,当当网便在dubbo基础上进行优化,并继续维护,为了…

Java直接运行JavaScript代码或js文件

执行JavaScript用到的类有: javax.script.ScriptEngine;javax.script.ScriptEngineFactory;javax.script.ScriptEngineManager;javax.script.ScriptException;需求1:执行一个JavaScript字符串,将结果打印在控制台上。 ScriptEngineManager m …

node环境执行js文件

1、JavaScript代码的执行 目前知道的两种方式有两种: 将代码交给浏览器(在浏览器环境运行) html文件引入js代码,交给浏览器解析将代码载入node的环境中执行(在node环境运行) 通过在电脑安装的Node.js环境…

在JavaScript文件中引用另一个JavaScript文件

前言 写了一个全局main.js&#xff0c;其中又需要引用其他第三方js文件&#xff0c;但是不希望在每个页面引用main.js之前再引用一遍第三方js文件&#xff0c;那就把第三方js文件放到main.js中引用。 方法 1. document.write 目录结构 index.html <!DOCTYPE html> …

protobuf文件生成js文件详细流程

1,下载用来生成web js文件的工具 protoc-gen-grpc-web 下地地址&#xff1a;protoc-gen-grpc-web 选择&#xff1a;protoc-gen-grpc-web-1.3.1-windows-x86_64.exe 即可 下载完成后改名为protoc-gen-grpc-web.exe并移动到项目里&#xff0c;和proto文件存放在同一目录下 2,…

如何创建并调用js文件

创建 首先&#xff0c;新建一个txt文件更改后缀名为js 点击另存为 创建成功 调用 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>JavaScript</title> </head> <body> <p id"registerN&…

动态加载JavaScript文件

目录 配置 无脑方法&#xff01; 逆袭之道&#xff01; 一块蛋糕&#xff01; 结论 源代码 JavaScript文件的动态加载是您必须拥有的非常有用的工具之一。它允许您通过将阻止脚本从加载过程中移出&#xff08;通常称为“延迟加载”&#xff09;来优化网页性能&#xff0c…

前端基础应用:js文件编写

jss文件在前端网页页面制作过程中作用主要是控制html文件中标签的逻辑问题&#xff0c;增强操作性实用性. 一、js的作用&#xff0c;写代码的位置 1)作用 1.修改双标签的标签内容 例如&#xff1a;改变他的文本 <p id"p1">我是段落1</p> <button…

JavaScript-第一个js文件

文章目录 编写第一个JS代码编译器的选择使用安装VScode安装 open in browser创建第一个项目编写第一个JS程序运行成功显示 alert()document.write()consolog.log()执行流程连接到外部文件总结 编写第一个JS代码 编译器的选择 小编在这里就延续python的啦&#xff0c;继续用VS…