dubbo的基础知识

news2024/10/2 8:25:04

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.coloradmin.cn/o/1362423.html

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

相关文章

轻松获取CHATGPT API:免费、无验证、带实例

免费获取和使用ChatGPT API的方法 快速开始&#xff1a;视频教程 章节一&#xff1a;GPT-API-Free开源项目介绍 GPT-API-Free 是一个开源项目&#xff0c;它提供了一个中转API KEY&#xff0c;使用户能够调用多个GPT模型&#xff0c;包括gpt-3.5-turbo、embedding和gpt-4。这…

cesium键盘控制模型

效果&#xff1a; 由于对添加模型和更新位置api进行二次了封装&#xff0c;下面提供思路 1.添加模型 const person reactive({modelTimer: null,position: {lon: 104.07274,lat: 30.57899,alt: 1200,heading: 0,pitch: 0,roll: 0,}, }); window.swpcesium.addEntity.addMo…

8.1分发饼干(LC455-E)

算法&#xff1a; 局部最优&#xff1a;大尺寸的饼干既可以满足胃口大的孩子也可以满足胃口小的孩子&#xff0c;那么就应该优先满足胃口大的。局部最优就是大饼干喂给胃口大的&#xff0c;充分利用饼干尺寸喂饱一个。 全局最优&#xff1a;喂饱尽可能多的小孩。 为什么局部…

C++开发小技巧

C开发一些小技巧 积累一些能用得到的C开发小技巧。 错误码/状态码 错误码/状态码在项目很常见&#xff0c;用于提示错误类型、状态&#xff0c;通常还会附带一些相关描述。通常错误码是统一管理的&#xff0c;例如使用宏或者枚举定义。 平时我的做法 使用宏或者枚举定义错…

Redis缓存保卫战:拒绝缓存击穿的进攻【redis问题 三】

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Redis缓存保卫战&#xff1a;拒绝缓存击穿的进攻 前言缓存击穿的定义和原理为何会发生缓存击穿缓存击穿的危害防范缓存击穿结语: 前言 你是否曾经遇到过系统在高并发情况下出现严重性能问题&#xff…

【ASP.NET Core 基础知识】--环境设置

一、简介 1.1 .NET Core SDK 概述 .NET Core SDK&#xff08;Software Development Kit&#xff09;是Microsoft推出的一个开源跨平台框架&#xff0c;用于开发和部署.NET应用程序。它是.NET Core平台的核心组件之一&#xff0c;为开发者提供了在多个操作系统上构建高性能、可…

ssm基于VUE的图书馆管理系统的设计与实现论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差&#x…

imazing破解版百度云2.17.3(附激活许可证下载)

iMazing是一款强大的 iOS 设备管理软件&#xff0c;不管是 iPhone、iPad 或 iPod Touch 设备&#xff0c;只要将 iOS 设备连接到计算机&#xff0c;就可以处理不同类型的数据。 iPhone 和 iPad 备份 借助 iMazing 的独有 iOS 备份技术&#xff08;无线、隐私和自动&#xff09…

CarRacing DQN: 深度 Q 学习训练自驾车

OpenAI GYM CarRacing DQN: 深度 Q 学习训练自驾车 引言DQN 算法原理Q 值和 Bellman 方程DQN 结构 训练过程设计经验回放&#xff08;Experience Replay&#xff09;目标网络&#xff08;Target Network&#xff09;训练循环 训练结果和模型演变400 轮训练后500 轮训练后600 轮…

tomcat session cookie值设置逻辑

tomcat session cookie 值设置&#xff0c;tomcat jsessionid设置 ##调用request.getSession() Controller RequestMapping("/cookie") public class CookieController {RequestMapping("/tomcatRequest")ResponseBodypublic String tomcatRequest(HttpS…

buuctf-Misc 题目解答分解109-111

109.[CFI-CTF 2018]webLogon capture 流量包分析&#xff0c; wireshark 打开 就这几个数据包&#xff0c;追踪http 进行url 解码 URL网址解码器 - 在线网址解码 得到flag CFI{1ns3cur3_l0g0n} 110.[GKCTF 2021]excel 骚操作 下载 excel 文件 &#xff0c;打开 发现点击其他地…

编程语言的发展趋势和未来方向

1、编程语言的未来&#xff1f; 随着科技的飞速发展&#xff0c;编程语言在计算机领域中扮演着至关重要的角色。它们是软件开发的核心&#xff0c;为程序员提供了与机器沟通的桥梁。那么&#xff0c;在技术不断进步的未来&#xff0c;编程语言的走向又将如何呢&#xff1f; 方…

通信原理期末复习——计算大题(一)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

金和OA C6 MailTemplates.aspx sql注入漏洞

产品介绍 金和网络是专业信息化服务商,为城市监管部门提供了互联网监管解决方案,为企事业单位提供组织协同OA系统开发平台,电子政务一体化平台,智慧电商平台等服务。 漏洞概述 金和 OA C6 MailTemplates.aspx接口处存在SQL注入漏洞&#xff0c;攻击者除了可以利用 SQL 注入漏…

计算机毕业设计选题分享-SSM律师事务所业务管理系统01664(赠送源码数据库)JAVA、PHP,node.js,C++、python,大屏数据可视化等

SSM律师事务所业务管理系统 摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;律师事务所业务管理系统当然也不能排除在外。律师事务所业务管理系统是以实际运用为开发背景…

牛客网BC12-字符圣诞树

字符圣诞树 解题思路&#xff1a; 确定行数&#xff0c;一共5行&#xff0c;循环5次确定每行答应的内容&#xff0c;分成两部分&#xff0c;空格和字符 打印空格的个数依次递减打印字符的个数依次递增 找出打印空格和字符的个数与行数之间的关系 int main() {char ch 0;scanf(…

【C++】内存对齐

本篇文章介绍C中的内存对齐&#xff0c;后续介绍C的union和C的variant的时候&#xff0c;需要用到这部分的知识。 占用内存 先回忆下C各个数据类型占用的内存大小&#xff1a; int&#xff1a;所占内存大小&#xff1a;4byte 32bit&#xff1b;char&#xff1a;所占内存大小…

单机部署Rancher

上次已经安装完毕了k8s了&#xff0c;但是想要界面化的管理&#xff0c;离不开界面工具&#xff0c;首推就是rancher&#xff0c;本文介绍安装rancher的安装&#xff0c;也可以将之前安装的k8s管理起来。 已经安装完毕docker和docker-ce的可以直接从第三部分开始。 一、基础准…

如何充值GPT会员账号?

详情点击链接&#xff1a;如何充值GPT会员账号&#xff1f; 一OpenAI 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析&#xff0c;AI画图&#xff0c;图像识别&#xff0c;文档API 3.GPT Store 4.从0到1创建自己的GPT应用 5. 模型Gemini以及大模型Claude2二定制自己的…

五、HTML 标题

在 HTML 文档中&#xff0c;标题很重要。 一、HTML 标题 标题&#xff08;Heading&#xff09;是通过 <h1> - <h6> 标签进行定义的。<h1> 定义最大的标题。 <h6> 定义最小的标题。 <h1>这是一个标题。</h1> <h2>这是一个标题。&l…