dubbo的基础知识

dubbo是什么

      Dubbo是一个分布式服务框架,是一种高性能的远程通讯框架。它提供了基于Java的RPC(远程过程调用)通信机制,使得应用之间可以方便地进行远程调用,实现分布式服务的调用和管理。Dubbo提供了服务注册、发现、负载均衡、路由、容错等常用的分布式系统开发功能,可以帮助开发者快速构建可靠性、可扩展性和高性能的分布式应用。Dubbo主要由三个部分组成:Provider(服务提供者)、Consumer(服务消费者)和Registry(服务注册中心)

Dubbo 支持哪些协议,每种协议的应用场景,优缺点

      Dubbo是一种开源的分布式服务框架,它支持多种协议以满足不同场景下的需求。下面是目前Dubbo支持的主要协议以及它们的应用场景和优缺点:

  1. Dubbo协议:

    • 应用场景:适用于高性能的服务调用场景,通常用于内部服务之间的通信。
    • 优点:高性能、低延迟、高并发。
    • 缺点:仅适用于Java开发的服务。
  2. HTTP协议:

    • 应用场景:适用于与不同语言和平台集成,特别是对于Web应用和移动应用来说是最常见的协议。
    • 优点:跨语言、跨平台、易于集成。
    • 缺点:相对于Dubbo协议,性能较低。
  3. Hessian协议:

    • 应用场景:适用于Java开发的服务,尤其是基于Spring的应用。
    • 优点:性能较好、易于使用和集成。
    • 缺点:仅支持Java语言。
  4. RMI协议:

    • 应用场景:适用于Java开发的服务,尤其是基于Java RMI(远程方法调用)的应用。
    • 优点:性能较好、支持Java RMI。
    • 缺点:仅支持Java语言。
  5. Thrift协议:

    • 应用场景:适用于多语言的服务调用,尤其是基于Apache Thrift的应用。
    • 优点:跨语言、高性能、易于使用和集成。
    • 缺点:相对于Dubbo协议,稍微复杂一些。

Dubbo 超时时间      

       可以通过配置文件或者编程方式来设置超时时间。以下是两种方式的详细解释:

  1. 配置文件方式: 在Dubbo的配置文件(通常是dubbo.properties或者dubbo.xml)中,可以设置全局的超时时间。具体的配置属性是timeout,单位是毫秒。示例配置如下:
# dubbo.properties
# 全局超时时间为10秒
dubbo.consumer.timeout=10000
  1. 编程方式: 在代码中,可以使用Dubbo提供的API来设置超时时间。具体步骤如下:

2.1 创建服务引用对象:

ReferenceConfig<XXXService> reference = new ReferenceConfig<>();
reference.setInterface(XXXService.class);

2.2 设置超时时间:

// 超时时间为10秒
reference.setTimeout(10000);

2.3 获取服务对象:

XXXService service = reference.get();

上述代码中,XXXService是需要调用的服务接口类

Dubbo 注册中心  

     以下是 Dubbo 支持的一些常见的注册中心:

  • ZooKeeper:ZooKeeper 是 Apache 基金会下的一个开源分布式协调服务。Dubbo 使用 ZooKeeper 作为默认的注册中心,通过 ZooKeeper 来管理服务的注册、发现与订阅。

  • Redis:Redis 是一个高性能的 key-value 存储系统,Dubbo 通过 Redis 实现了一种简单的注册中心。使用 Redis 注册中心需要在服务提供者和消费者配置文件中分别指定 Redis 的地址和端口。

  • Multicast:Multicast 是一种基于组播(Multicast)协议的注册中心,Dubbo 使用 Multicast 注册中心来实现组播的服务注册与发现。使用该注册中心需要配置组播的地址和端口。

  • Simple:Simple 是 Dubbo 默认的简单注册中心,它主要用于开发和测试环境。Simple 注册中心不需要额外的依赖,但它的功能有限,不适合在生产环境中使用。

Dubbo 集群的负载均衡

      在Dubbo集群中,负载均衡是一种重要的策略,用于在多个服务提供者之间分配请求负载,以达到提高系统性能和稳定性的目的。

     Dubbo提供了多种负载均衡策略,以下是其中几种常见的策略:

  1. Random负载均衡:随机选择一个可用的服务提供者来处理请求,没有特定的规则,适用于对服务提供者没有特殊要求的场景。

  2. Round Robin负载均衡:按照轮询的方式依次选择一个可用的服务提供者来处理请求,每个服务提供者处理的请求数量相同,适用于对服务提供者要求均衡的场景。

  3. Least Active负载均衡:选择当前处理活跃请求数最少的服务提供者来处理请求,即选择负载最轻的服务提供者来处理请求,适用于处理时间较短但需要较高并发能力的场景。

  4. Consistent Hash负载均衡:根据请求的某个属性值进行哈希计算,将相同哈希值的请求发送到同一个服务提供者,可以保持某些请求的顺序和稳定性。

  5. Weighted Random负载均衡:根据服务提供者的权重值来选择,权重值越高的服务提供者被选中的概率越大,适用于对服务提供者有差异化要求的场景。

  6. Weighted Round Robin负载均衡:按照权重值将请求分配给服务提供者,权重值越高的服务提供者处理的请求数量越多,适用于对服务提供者有差异化要求的场景

Dubbo 的核心功能

     Dubbo提供了以下核心功能:

  • 远程通信:Dubbo支持多种通信协议,包括基于TCP的Dubbo协议、基于HTTP的RESTful协议和基于消息队列的消息协议等。它可以帮助应用将分布在不同节点上的服务进行远程调用,实现服务之间的快速通信。

  • 负载均衡:Dubbo提供了多种负载均衡算法,如随机算法、轮询算法和一致性哈希算法等。通过合理的负载均衡策略,Dubbo可以根据服务提供者的负载情况将请求分发到合适的节点,从而提高整个系统的吞吐量和性能。

  • 服务注册与发现:Dubbo提供了灵活的服务注册与发现机制,支持多种注册中心,如ZooKeeper、Redis和Nacos等。通过将服务提供者注册到注册中心,服务消费者可以方便地发现和调用这些服务,实现服务之间的解耦和动态扩展。

  • 服务治理:Dubbo提供了丰富的服务治理能力,包括服务路由、降级、容错和熔断等。通过配置不同的策略,Dubbo可以自动处理服务调用时的故障和异常情况,提高系统的可用性和稳定性。

  • 监控和管理:Dubbo提供了全面的监控和管理功能,包括服务调用次数、响应时间、服务提供者和消费者的运行状态等。通过可视化的监控界面,用户可以实时监控和管理整个系统,及时发现和解决问题。

Dubbo 服务注册与发现的流程

    

   流程说明:

      Provider(提供者)绑定指定端口并启动服务

      指供者连接注册中心,并发本机 IP、端口、应用信息和提供服务信息 发送至注册中心存储

      Consumer(消费者),连接注册中心 ,并发送应用信息、所求服务信 息至注册中心

      注册中心根据 消费 者所求服务信息匹配对应的提供者列表发送至 Consumer 应用缓存。

      Consumer 在发起远程调用时基于缓存的消费者列表择其一发起调 用。

      Provider 状态变更会实时通知注册中心、在由注册中心实时推送至 Consumer

Dubbo 的架构设计 

   

  架构设计如下:

  1. 服务提供者(Provider):负责暴露服务接口并将其注册到注册中心,接收来自消费者的请求并返回响应。

  2. 服务消费者(Consumer):负责从注册中心获取服务提供者的地址列表,并通过负载均衡算法选择其中一台提供者进行调用。

  3. 注册中心(Registry):用于注册和发现服务提供者的地址列表,Dubbo 支持多种注册中心,如 ZooKeeper、Redis 等。

  4. 远程通信层(Remoting):负责消费者和提供者之间的远程通信,Dubbo 默认使用 Netty 实现。

  5. 服务治理层(Cluster):负责将多个提供者组合成一个虚拟的提供者,对消费者屏蔽服务提供者的具体细节,以实现负载均衡、容错等功能。

  6. 代理层(Proxy):负责将远程服务接口转换为本地代理对象,隐藏远程调用的细节,使消费者可以像调用本地方法一样调用远程服务。

  7. 监控层(Monitor):负责统计服务的调用次数、响应时间等指标,并提供可视化的监控报表。

  8. 配置层(Config):负责对 Dubbo 的各个配置进行管理,包括服务提供者和消费者的配置,注册中心的配置等。

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

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

相关文章

GPT实战系列-大模型为我所用之借用ChatGLM3构建查询助手

GPT实战系列-https://blog.csdn.net/alex_starsky/category_12467518.html 如何使用大模型查询助手功能&#xff1f;例如调用工具实现网络查询助手功能。目前只有 ChatGLM3-6B 模型支持工具调用&#xff0c;而 ChatGLM3-6B-Base 和 ChatGLM3-6B-32K 模型不支持。 定义好工具的…

【Java集合篇】负载因子和容量的关系

负载因子和容量有什么关系 ✔️典型解析✔️loadfactor为啥默认是0.75F&#xff0c;不是1呢?✔️为什么HashMap的默认负载因子设置成0.75✔️0.75的数学依据是什么✔️0.75的必然因素 ✔️HashMap的初始值设为多少合适? ✔️典型解析 HashMap 中有几个属性&#xff0c;如 cap…

【已解决】js定义对象属性是.如何访问

当变量没有length属性的时候&#xff0c;可能是个对象变量&#xff0c;当有键值对的时候就可能是个对象&#xff0c;读者都知道的是&#xff0c;用typeof(变量)可以查看属性&#xff0c;今天本文解决的问题是如果js定义对象中属性是"点"如何访问 问题再现 var a {…

iPhone 恢复出厂设置后如何恢复数据

如果您在 iPhone 上执行了恢复出厂设置&#xff0c;您会发现所有旧数据都被清除了。这对于清理混乱和提高设备性能非常有用&#xff0c;但如果您忘记保存重要文件&#xff0c;那就是坏消息了。 恢复出厂设置后可以恢复数据吗&#xff1f;是的&#xff01;幸运的是&#xff0c;…

第13课 利用openCV检测物体是否运动了

FFmpeg与openCV绝对是绝配。前面我们已经基本熟悉了FFmpeg的工作流程&#xff0c;这一章我们重点来看看openCV。 在前面&#xff0c;我们已经使用openCV打开过摄像头并在MFC中显示图像&#xff0c;但openCV能做的要远超你的想像&#xff0c;比如可以用它来实现人脸检测、车牌识…

基于平衡优化器算法优化的Elman神经网络数据预测 - 附代码

基于平衡优化器算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于平衡优化器算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于平衡优化器优化的Elman网络5.测试结果6.参考文献7.Matlab代码…

vivado xsim 终端 模拟

只模拟的话直接终端运行会快很多 计数器举例 mkdir srccounter.v module counter(input wire clk,input wire rst_n,output reg[31:0] cnt ); always (posedge clk or negedge rst_n)if(!rst_n)cnt < 31h0;elsecnt < cnt1;endmodule tb.v module tb; wire[31:0] out…

【大厂秘籍】系列 - Java多线程面试题

Java多线程面试题 友情提示&#xff0c;看完此文&#xff0c;在Java多线程这块&#xff0c;基本上可以吊打面试官了 线程和进程的区别 进程是资源分配的最小单位&#xff0c;线程是CPU调度的最小单位 线程是进程的子集&#xff0c;一个进程可以有很多线程&#xff0c;每条线…

Beauty algorithm(三)腮红

查阅资料了解到腮红位于苹果肌处,同样使用关键点确定目标区域,然后对该区域进行渲染达到美妆效果。考虑到如果使用简单的RGB是很难做到特效,本篇采用模板方式进行区域融合。 一、skills 前瞻 1、png图像读取 cv::imread(imgPath, cv::IMREAD_UNCHANGED) IMREAD_UNCHANGE…

小红书 X WSDM 2024「对话式多文档问答挑战赛」火热开赛!

基于大语言模型&#xff08;LLM&#xff09;的对话问答机器人&#xff0c;已经成为当前人工智能领域学术界和工业界共同关注的的热门研究方向之一。在对话过程中&#xff0c;为大模型引入搜索结果&#xff0c;进行检索增强的生成&#xff08;Retrieval Augmented Generation&am…

Go语言并发模式视角思考

犹记得2019年中旬进行知识点的学习和demo的练习&#xff0c;熟悉各种语法和并发调度的场景&#xff0c; 在2019年末开始参与项目实战开发和逻辑梳理 Go语言的接触也是更多探索和业务的拆件&#xff0c;做一些雏形工具&#xff0c;来慢慢的孵化业务生态 后来陆陆续续&#xff…

时间序列预测 — LSTM实现多变量多步负荷预测(Tensorflow):多输入多输出

目录 1 数据处理 1.1 导入库文件 1.2 导入数据集 ​1.3 缺失值分析 2 构造训练数据 3 LSTM模型训练 4 LSTM模型预测 4.1 分量预测 4.2 可视化 1 数据处理 1.1 导入库文件 import time import datetime import pandas as pd import numpy as np import matplotlib.p…

软件测试|教你如何使用UPDATE修改数据

简介 在SQL&#xff08;Structured Query Language&#xff09;中&#xff0c;UPDATE语句用于修改数据库表中的数据。通过UPDATE语句&#xff0c;我们可以更新表中的特定记录或多条记录&#xff0c;从而实现数据的修改和更新。本文将详细介绍SQL UPDATE语句的语法、用法以及一…

【AI视野·今日Robot 机器人论文速览 第六十七期】Mon, 1 Jan 2024

AI视野今日CS.Robotics 机器人学论文速览 Mon, 1 Jan 2024 Totally 16 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers MURP: Multi-Agent Ultra-Wideband Relative Pose Estimation with Constrained Communications in 3D Environments Authors A…

【高效视频处理】BMF 项目安装与老视频修复体验全流程及总结

一、BMF简介 BMF&#xff08;Babit Multimedia Framework&#xff09;是字节跳动开发的跨平台、多语言、可定制的多媒体处理框架。经过 4 年多的测试和改进&#xff0c;BMF 已经过量身定制&#xff0c;能够熟练地应对我们现实生产环境中的挑战。目前广泛应用于字节跳动的视频串…

主流大语言模型从预训练到微调的技术原理

引言 本文设计的内容主要包含以下几个方面&#xff1a; 比较 LLaMA、ChatGLM、Falcon 等大语言模型的细节&#xff1a;tokenizer、位置编码、Layer Normalization、激活函数等。大语言模型的分布式训练技术&#xff1a;数据并行、张量模型并行、流水线并行、3D 并行、零冗余优…

机器学习--回归算法

&#x1f333;&#x1f333;&#x1f333;小谈&#xff1a;一直想整理机器学习的相关笔记&#xff0c;但是一直在推脱&#xff0c;今天发现知识快忘却了&#xff08;虽然学的也不是那么深&#xff09;&#xff0c;但还是浅浅整理一下吧&#xff0c;便于以后重新学习。 &#x1…

IOS:Safari无法播放MP4(H.264编码)

一、问题描述 MP4使用H.264编码通常具有良好的兼容性&#xff0c;因为H.264是一种广泛支持的视频编码标准。它可以在许多设备和平台上播放&#xff0c;包括电脑、移动设备和流媒体设备。 使用caniuse查询H.264兼容性&#xff0c;看似确实具有良好的兼容性&#xff1a; 然而…

【响应式编程-05】Lambda方法引用

一、简要描述 Lambda的方法引用也叫引用方法 方法引用初体验方法引用的底层实现方法引用的语法格式方法引用举例 静态方法引用构造方法引用普通方法引用super和this方法引用数组的方法引用 二、方法引用初体验 为什么出现方法引用&#xff1f; 引用已存在方法&#xff0c;避免重…

四则运算 C语言xdoj20

问题描述&#xff1a; 输入两个整数和一个四则运算符&#xff0c;根据运算符计算并输出其运算结果&#xff08;和、差、积、商、余之一&#xff09;。注意做整除及求余运算时&#xff0c;除数不能为零。 输入说明&#xff1a; 使用scanf()函数输入两个整数和一个运算符&#xf…