什么是Dubbo?

文章目录

    • 1、Dubbo介绍
      • 1.1 什么是Dubbo
      • 1.2 Dubbo关键特性
      • 1.3 什么是RPC
      • 1.4 实现RPC的方式
      • 1.5 Dubbo中的五大核心组件

1、Dubbo介绍

  Apache Dubbo是一款高性能、轻量级的开源微服务开发框架,它提供了RPC通信与微服务治理两大关键能力。这意味着,使用Dubbo开发的微服务,将具备相互之间的远程发现与通信能力,同时利用Dubbo提供的丰富服务治理能力,可以实现诸如服务发现、负载均衡、流量调度等服务治理需求。同时Dubbo是高度可扩展的,用户几乎可以在任意功能点去定制自己的实现,以改变框架的默认行为来满足自己的业务需求。

  Dubbo提供了构建云原生微服务业务的一站式解决方案,可以使用Dubbo快速定义并发布微服务组件,同时基于Dubbo开箱即用的丰富特性及超强的扩展能力,构建运维整个微服务体系所需的各项服务治理能力,如Tracing、Trasaction等,Dubbo提供的基础能力包括如下几点:

  • 服务发现
  • 流式通信
  • 负载均衡
  • 流量治理
  • 。。。

  Dubbo计划提供丰富的多语言客户端实现,其中Java、Golang版本是当前稳定性和活跃度最高的版本。

Dubbo的优势如下:

(1)开箱即用

  • 易用性高,比如Java版本的面向接口代理特性能实现本地透明调用。
  • 功能丰富,基于原生库或轻量扩展即可实现绝大多数的微服务治理能力。

(2)超大规模微服务集群实战

  • 高性能的跨进程通信协议。
  • 地址发现、流量治理层面,轻松支持百万规模集群实例。

(3)企业级微服务治理能力

  • 服务测试
  • 服务Mock

Dubbo中文官网:https://cn.dubbo.apache.org/zh-cn/

1.1 什么是Dubbo

Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力, 利用 Dubbo 提供的丰富服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。Dubbo 被设计为高度可扩展,用户可以方便的实现流量拦截、选址的各种定制逻辑。

在云原生时代,Dubbo 相继衍生出了 Dubbo3、Proxyless Mesh 等架构与解决方案,在易用性、超大规模微服务实践、云原生基础设施适配、安全性等几大方向上进行了全面升级。

Dubbo提供了从服务定义、服务发现、服务通信到流量管控等几乎所有的服务治理能力,并且尝试从使用上对用户屏蔽地层细节,以提供更好的易用性。

  现在主流的RPC框架包括Dubbo、SpringCloud、hessian、thrift、gRPC等。

1.2 Dubbo关键特性

  • 面向接口代理的高性能RPC调用:提供高性能的基于代理的远程调用能力,服务以接口为粒度,为开发者屏蔽远程调用底层细节。
  • 智能容错和负载均衡:内置多种负载均衡策略,智能感知下游节点健康状况,显著减少调用延迟,提高系统吞吐量。
  • 服务自动注册和发现:支持多种注册中心服务,服务实例上下线实时感知。
  • 高度可扩展能力:遵循微内核+插件的设计原则,所有核心能力如Protocol、Transport、Serialization被设计为扩展点,平等对待内置实现和第三方实现。
  • 运行期流量调度:内置条件、脚本等路由策略,通过配置不同的路由规则,轻松实现灰度发布、同机房优先等功能。
  • 可视化的服务治理与运维:提供丰富服务治理、运维工具,随时查询服务元数据、服务健康状态及调用统计,实时下发路由策略、调整配置参数。

1.3 什么是RPC

   在一个JVM进程中,一个类中的方法调用另一个类中的方法是正常的,可以实现的,但如果在多个JVM进程之间互相调用呢?比如有两台计算机A和B,A计算机运行JVM,B计算机也运行JVM,由于业务是运行在不同的计算机和不同的JVM中,所以A和B计算机不能直接通信,要借助RPC技术。

  RPC(Remote Procedure Call,远程过程调用)是一种在不同计算机或不同进程之间进行数据通信的技术,使用RPC不需要了解网络底层知识,即可实现远程通信,RPC底层原理是使用Socket实现不同计算机之间的通信。RPC采用服务端/客户端模式,客户端发起请求,而服务端接收请求及处理响应。

1.4 实现RPC的方式

  实现RPC通信可以使用以下2种方式。

  • 基于TCP协议实现:自己定制通信协议格式,就像自定义的JSON协议格式一样,使用TCP协议对定制通信进行传输,实现两端通信。
  • 基于HTTP协议实现:自己定制通信协议格式,就像自定义的JSON协议格式一样,使用HTTP协议对定制通信协议进行传输,实现两端通信。

  使用TCP与HTTP实现RPC最大的区别就是TCP执行速度要比HTTP快很多,原因是TCP直接使用基于Socket技术进行通信,而HTTP底层虽然也使用Socket技术进行通信,但HTTP协议是“中协议”,通过HTTP协议进入Web容器后还要处理其他的任务,比如Cookie、Session、Application、Filter、Listener等,还有Web容器内自己的业务都需要执行,并没有针对通信的效率进行垂直直接的优化,所以使用TCP协议实现RPC在执行效率上比HTTP快很多。

  使用TCP协议实现RPC通信的原理是达到对端后开始解析RPC协议,然后再使用反射技术进行动态调用业务方法。Dubbo框架已经封装了整个RPC通信的过程,可以快速开发分布式系统。Dubbo也成为RPC框架。

  点对点的服务通信是Dubbo提供的基本能力,Dubbo以RPC的方式请求数据(Request)发送给后端服务,并接收服务端返回的计算结果(Response)。RPC通信对用户来说是完全透明的,用户无需关心请求是如何发出去的、去到了哪里,每次调用只需要拿到正确的调用结果就行。同步的Request-Response是默认的通信模型,它最简单但却不能覆盖所有的场景。因此,Dubbo提供更丰富的通信模型。

  • 消费端异步请求(Client Side Asynchronous Request-Response)
  • 提供端异步请求(Server Side Asynchronous Request-Response)
  • 消费端请求流(Request Streaming)
  • 提供端响应流(Response Streaming)
  • 双向流式通信(Bidirectional Streaming)

1.5 Dubbo中的五大核心组件

Dubbo具有五大核心组件。

(1)Provider:服务提供者,提供服务。

(2)Consumer:服务消费者,调用服务。

(3)Registry:注册中心,提供服务注册与服务发现。

(4)Monitor:监控中心,提供服务调用次数和调用时间等监控信息。

(5)Container:服务运行容器。

  服务发现,即消费端自动发现服务地址列表的能力,是微服务框架需要具备的关键能力,借助于自动化的服务发现,微服务之间可以在无须感知对端部署位置与IP地址的情况下实现通信。

  实现服务发现的方式有很多种,Dubbo提供的是一种Client-Based的服务发现机制,通常还需要部署额外的第三方注册中心来协调服务发现过程,如常用的Nacos、Consul、Zookeeper等,Dubbo自身也提供了对多种注册中心组件的封装,用户可以灵活选择。

  服务发现的一个核心组件是注册中心,Provider注册地址到注册中心,Consumer从注册中心读取和订阅Provider地址列表。因此,要启用服务发现,需要为Dubbo增加注册中心配置。

  Dubbo工作流程如下图。

image-20240408215028448

  通信过程分为以下六步

  1. 容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时向注册中心注册自己提供的服务。
  3. 服务消费者在启动时向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给服务消费者,如果有变更,注册中心将基于长连接推送变更数据给服务消费者。注册中心是Dubbo最为核心、基础及重要的模块,它提供了服务注册与服务发现,将服务提供者的信息注册到注册中心中,将服务提供者与服务消费者的信息透明化,实现服务提供者与服务消费者的解耦。服务消费者只需要从注册中心获取服务提供者的信息,比如ip和port,服务消费者就可以调用服务提供者的服务,如果服务提供者的信息发生更改,只需要刷新注册中心里的服务提供者信息,服务消费者就可以感应到这种改变。
  5. 服务消费者从服务提供者地址列表中,会基于软负载均衡算法选择一台服务提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和服务提供者在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

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

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

相关文章

【Linux】进程_6

文章目录 五、进程8. 进程地址空间 未完待续 五、进程 8. 进程地址空间 上图可能很多人都看过了,这里再来验证一下: 验证位置: 验证堆栈的生长方向: 在上面的空间布局图中,有一个疑问,画的空间是 内存…

【RabbitMQ】初识 RabbitMQ

初识 RabbitMQ 1.认识 RabbitMQ1.1 介绍1. 2.使用场景1.2.1 推送通知1.2.2 异步任务1.2.3 多平台应用的通信1.2.4 消息延迟1.2.5 远程过程调用 1.3 特性 2.基本概念2.1 生产者、消费者和代理2.2 消息队列2.3 交换机2.3.1 direct2.3.2 topic2.3.3 headers2.3.4 fanout 2.4 绑定2…

docker hub仓库被禁用,镜像加速器站点替换

整理 站点整理之前用的daemon.json,现更改镜像加速地址替换自己的docker加速器daemon.json前面加https:// 站点整理 之前用的daemon.json,现更改镜像加速地址 vim /etc/docker/daemon.json{"registry-mirrors": ["https://4xgbe4ey.mirror.aliyuncs.com",…

计算缺失msvcr120.dll文件怎么办,msvcr120.dll丢失的解决方法分享

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“找不到msvcr120.dll”。那么,msvcr120.dll到底是什么?为什么计算机会找不到它?它会对计算机产生什么具体影响?如何解决这个问题?…

vue框架学习------框架概述

框架 在基础语言之上,对各种基础功能进行封装 什么是框架 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法; 另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而…

正能量情感语录热门素材文案去哪里找?文案素材网站分享

正能量情感语录热门素材文案去哪里找?文案素材网站分享 想为你的作品注入正能量和情感温度?不知如何获取热门情感语录素材?别担心,今天我将为大家推荐一些海外知名的素材网站,让你轻松找到受欢迎的文案素材&#xff…

ffmpeg解封装rtsp并录制视频-(1)解封装rtsp断网或摄像机重启后自动重连处理

头文件&#xff1a; xtools.h #pragma once #include <thread> #include <iostream> #include <mutex> //日志级别 DEBUG INFO ERROR FATAL enum XLogLevel {XLOG_TYPE_DEBUG,XLOG_TYPE_INFO,XLOG_TPYE_ERROR,XLOG_TYPE_FATAL }; #define LOG_MIN_LEVEL XLO…

dp练习题

先来一个简单dp练习 class Solution { public:int rob(vector<int>& nums) {int n nums.size();vector<int> a(n 1);int ans nums[0]; a[0] nums[0];if (n 1) return ans;a[1] max(nums[0], nums[1]);ans max(ans, a[1]);if (n 2) return ans;for (i…

xss+csrf项目实例

项目背景&#xff1a; 如下&#xff1a;我们是在一个类似文章管理系统的网站上面发现的该漏洞。我们将其运行在本地的phpstudy集成环境上面。 源码地址下载链接&#xff1a;https://pan.baidu.com/s/1MpnSAq7a_oOcGh4XgPE-2w 提取码&#xff1a;4444 考察内容&#xff1a; …

10 C++11

10 C11 1、类型推导1.1 auto关键字1.2 auto类型推断本质 2、类型计算2.1 类型计算分类2.2 类型计算的四种规则2.3 返回值类型计算 3、列表初始化4、Lambda表达式4.1 前置知识4.2 Lambda表达式4.3 捕获表 5、右值引用5.1 概念5.2 左值引用和右值引用 6、移动语义 1、类型推导 1…

嵌入式复古游戏项目开发与实现

大家好,今天看到一个火柴盒项目,非常的小巧,分享给大家,感兴趣的话,可以复刻一个玩一玩。 MicroByte 是一款微型主机,能够运行 NES、GameBoy、GameBoy Color、Game Gear 和 Sega Master 系统的游戏,所有元器件都设计在这 78 x 17 x 40 mm 的封装中。尽管成品尺寸很小,但…

AI预测体彩排3采取888=3策略+和值012路或胆码测试6月16日升级新模型预测第1弹

根据前面的预测效果&#xff0c;我对模型进行了重新优化&#xff0c;因为前面的模型效果不是很好。熟悉我的彩友比较清楚&#xff0c;我之前的主要精力是对福彩3D进行各种模型的开发和预测&#xff0c;排三的预测也就是最近1个月才开始搞的。3D的预测&#xff0c;经过对模型的多…

Java面向对象-接口

Java面向对象-接口 一、JDK1.8之前二、接口的作用三、JDK1.8之后&#xff0c;新增非抽象方法四、静态方法 一、JDK1.8之前 1、类是类&#xff0c;接口是接口&#xff0c;它们是同一层次的概念 2、接口中没有构造器 3、接口如何声明&#xff1a;interface 4、在jdk1.8之前&…

【字符串函数】

1.strlen的使⽤和模拟实现 size_t strlen ( const char * str ); 1.字符串以 \0 作为结束标志&#xff0c;strlen函数返回的是在字符串中 \0 前⾯出现的字符个数&#xff08;不包 含 \0 )。 2.参数指向的字符串必须要以 \0 结束。 3.注意函数的返回值为size_t&#xff0c;是⽆…

力扣148. 排序链表

给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4] 示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5] 示例 3&…

23 华三(自动获取的IP地址)

华三交换机 DHCP 配置 #version 7.1.070, Alpha 7170 //设备的版本信息 #sysname sw1 //修改设备的名字 #irf mac-address persistent timerirf auto-update enableundo irf link-delayirf member 1 priority 1#dhcp enable //开启DHCP 服务dhcp server forbidden-ip 192.168.…

.net 调用海康SDK的常用操作封装

&#x1f4e2;欢迎点赞 &#xff1a;&#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff0c;赐人玫瑰&#xff0c;手留余香&#xff01;&#x1f4e2;本文作者&#xff1a;由webmote 原创&#x1f4e2;作者格言&#xff1a;新的征程&#xff0c;我们面对的不仅…

2024/6/16周报

文章目录 摘要Abstract文献阅读题目问题本文贡献方法aGNN输入和输出模块嵌入模块编码器和解码器模块&#xff1a;支持多头注意的GCN多头自注意力机制GCN模型解释&#xff1a;SHAP 案例研究地下水流动与污染物运移模型研究场景设计 数据集实验结果 代码复现结论 摘要 本周阅读了…

whisper 模型源码解读

whisper官方源码 whisper 模型官方代码&#xff1a;https://github.com/openai/whisper/blob/main/whisper/model.py &#xff1b;注释如下 import base64 import gzip from dataclasses import dataclass from typing import Dict, Iterable, Optionalimport numpy as np impo…

java设计模式和面向对象编程思想

Java设计模式和面向对象编程思想是软件开发中的核心概念&#xff0c;对于构建可维护、可扩展的软件系统至关重要。下面是对这两个主题的知识点总结&#xff1a; 面向对象编程&#xff08;OOP&#xff09;思想 封装&#xff1a;将数据&#xff08;属性&#xff09;和操作这些数据…