Dubbo生态之初识dubbo协议

1.RPC框架

在java的发展中,随着业务的越来越庞大,单体架构的工作繁琐且耦合度高,因此单体架构过渡到了分布式架构,而分布式架构就必然涉及到各个服务之间的远程通信(RPC框架),RPC框架如图所示:

工作流程:

a.客户端调用客户端Sub(client stub).这个调用是在本地

b.客户端stub会将要传输的参数进行包装,并通过系统调用发送到服务端机器。打包的过程就叫做序列化。(常见的方式有:XML、JSON、二进制编码)

c.客户端本地操作系统发送信息至服务器。(可通过自定义TCP协议或HTTP传输)

d.服务器系统将信息传送至服务端stub(server stub)

e.服务端stub(server stub)解析信息。该过程叫反序列化

f.服务端(server stub)调用程序,并通过类似的方法返回给客户端

这样来讲:我们调用远程服务,一是要遵守能够传输的消息格式,二是传输的方式,三是调用异常的怎么办。这些我们客户端都是不可行自行去管理的,交给RPC框架去处理;

RPC协议正是定义了这样的一种通信的标准规范,为了满足不同的场景需求,于是很多标准化的RPC框架就在这个协议的基础上产生了。

2.dubbo

        dubbo就是在rpc协议的基础上诞生的,但是它不仅仅是一个RPC框架,更是一款微服务框架,为大规模微服务时间提供高性能RPC通信、流量治理、可观测性等解决方案。

思考: 我们讲了dubbo的由来,那么dubbo为什么能够被快速用起来呢? 肯定是解决了一些棘手的问题。

(1) 服务越来越多了,那是不是就说明服务调服务,服务链路越来越长了,如何对服务链路进行跟踪和监控呢?

(2)服务通信之间的异常,是否会牵一发而动全身呢?因此我们需要有一种保护机制防止一个节点故障引发大规模的系统故障,就是说要有容错机制

(3)服务的大规模集群之间是怎么互相发现互相感知的,因此需要有一个注册中心对服务进行集体管理

(4)服务的大规模集群请求量的分发需要引入负载均衡机制。

3.dubbo特性

dubbo有着一系列高性能的对上述问题的解决方案

a.面向接口代理的高性能RPC调用,服务以接口为粒度,屏蔽了远程调用底层细节

b.智能负载均衡,内置了多种负载均衡策略,智能感知下游节点健康状况,显著减少调用延迟,提高系统吞吐量

c.服务自动注册与发现,支持多种注册中心服务,服务实例上下线实时感知

d.可视化的服务治理与运维,提供丰富的服务治理、运维工具。可以随时查询服务元数据、服务健康状况及调用统计,实时下发路由策略,调整配置参数

e.运行期流量调度,内置条件、脚本等路由策略,通过配置不同的路由规则,轻松实现灰度发布,同机房优先等功能。

f.高度可扩展能力,遵循微内核+插件的设计原则,平等对待内置实现和第三方实现。

4.dubbo架构

Provider:暴露服务的服务提供方

Consumer:条用远程服务的服务消费方

Registry: 服务注册与发现的注册中心

Monitor: 统计服务的调用次数和调用时间的监控中心

Container: 服务运行容器

5.demo案例

假设我们有这样的一个简单的需求,需要查询当前用户还可以领取的优惠券列表。则基于dubbo的实现架构为分析: user为一个独立部署的服务,coupon也为一个独立部署的服务。

我们这样来学习dubbo协议,我们知道dubbo协议是一个远程网络通信框架,那么我们user服务如果想要调用到coupon服务,那么我们就需要在user服务中配置conpon服务提供的这个接口url地址才能够访问。这就是dubbo的点对点通信。

    <!-- 提供方应用信息,用于计算依赖关系 -->
    <dubbo:application name="coupon-portal"/>
    <!-- 使用multicast广播注册中心暴露服务地址 -->
    <dubbo:registry address="N/A"/>
    <!-- 用dubbo协议在20880端口暴露服务 -->
    <!-- 声明需要暴露的服务接口 -->
    <dubbo:reference
            interface="zsc.com.cn.user.IUserService" id="userService"
    url="dubbo://192.168.36.1:20881/zsc.com.cn.user.IUserService"/>

于是我们使用dubbo协议的这个需求的整个流程就是  前端访问--> REST接口->dubbo协议点对点访问user-api--->user api的实现类---> dubbo协议点对点访问coupon-api ---> coupon api的实现类-->再将结果返回。

思考: 我们的接口越来越多怎么办,如果服务是集群部署呢,我们的url也需要配置多个的吗?如何集体管理这么多个服务? 于是注册中心就派上了大用场,将这些接口都统一注册到注册中心中,其它服务如果引用,去注册中心上订阅即可。显然,从dubbo架构图中我们可以看出来,dubbo天然就支持服务注册与发现,目前dubbo能够支持的注册中心如consul,etcd,nacos,sofa,zookeeper,eureka,redis等已经很多了。

Springboot有着天生集成dubbo的优势,那么在springboot中如何使用dubbo

a.首先引入jar包依赖

<dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-bom</artifactId>
        <version>${dubbo.version}</version>
        <type>pom</type>
        <scope>import</scope>
</dependency>

spring-boot与dubbo的兼容包以及注册中心zookeeper包

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>

b.在启动类上开启dubbo

c.  dubbo的相关配置(在properties中进行配置)

# 应用名称
spring.application.name=coupon-service-provider


dubbo.application.name=coupon-service

# dubbo的协议 -1代表的是端口号随机生成
dubbo.protocol.port=-1
dubbo.protocol.name=dubbo

# 注册中心 配置中心 元数据中心  id为key
dubbo.registry.id=zk-registry
dubbo.registry.address=zookeeper://192.168.8.133:2181?timeout=20000
dubbo.config-center.address=zookeeper://192.168.8.133:2181?timeout=20000
dubbo.metadata-report.address=zookeeper://192.168.8.133:2181?timeout=20000

d. 服务怎么发布 增加@DubboService注解即可,就会自动进行扫描,并发布到注册中心

e. 服务怎么引用订阅 增加@DubboReference 注解即可,就会从注册中心中引用这个接口

分析: c中我们配置了3个中心地址,registry注册中心,接口服务url的存储,config-center 配置中心,这是dubbo的公共配置可以单独抽取出来(dubbo.properties),metadata 元数据中心,这是dubbo的url过于长的话,把url上携带的相关参数进行剥离开来。注册中心,元数据中心和配置中心都是可以单独部署的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ElasticSearch 查询优化之skipped shards

文章目录 问题通过timeDate查询 问题 PUT test_01 {"settings": {"number_of_shards": 50}, "mappings": {"properties": {"createTimeDate": {"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis&…

对列表进行统计和计算

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 Python的列表提供了内置的一些函数来实现统计、计算的功能。下面介绍几种常用的功能。 &#xff08;1&#xff09;获取指定元素出现的次数 使用列表…

汇聚荣科技有限公司怎么样?

在众多企业中&#xff0c;汇聚荣科技有限公司以其独特的发展模式和市场定位引起了人们的关注。对于这个问题&#xff0c;答案并非简单的好与坏&#xff0c;而需要从多个维度进行深入分析。 一、公司背景与发展历程汇聚荣科技有限公司成立于何年何地&#xff0c;由谁创立&#x…

民国漫画杂志《时代漫画》第17期.PDF

时代漫画17.PDF: https://url03.ctfile.com/f/1779803-1248612629-85326d?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps:资源来源网络&#xff01;

蓝牙模块七种工作模式——蓝牙Mesh组网工作模式

蓝牙Mesh组网模块技术在2017年得到SIG批准&#xff0c;这是一种独立的网络技术&#xff0c;兼容4及5系列蓝牙协议。它把蓝牙设备作为信号中继站&#xff0c;利用低功耗蓝牙广播的方式进行信息收发&#xff0c;蓝牙Mesh组网技术拓展了蓝牙的通讯关系&#xff0c;打破了以往蓝牙设…

环信 X 星野| 共创沉浸式 AI 互动体验

大模型技术的发展使虚拟人更加智能和情感丰富&#xff0c;推动人与 AI 智能体互动体验进入新时代。星野App 是一款沉浸式 AI 内容社区&#xff0c;短短几个月日活过百万。虽然市面上的社交产品很多&#xff0c;但社交关系更多的是停留在表面&#xff0c;无法满足深层次情感交流…

【全开源】AJAX家政上门服务系统小程序自营+多商家(高级授权)+独立端

基于FastAdmin和原生微信小程序开发的一款同城预约、上门服务、到店核销家政系统&#xff0c;用户端、服务端(高级授权)、门店端(高级授权)各端相互依赖又相互独立&#xff0c;支持选择项目、选择服务人员、选择门店多种下单方式&#xff0c;支持上门服务和到店核销两种服务方式…

leetcode以及牛客网单链表相关的题、移除链表元素、链表的中间节点、合并两个有序链表、反转链表、链表分割、倒数第k个节点等的介绍

文章目录 前言一、移除链表元素二、链表的中间节点三、合并两个有序链表四、反转链表五、链表分割六、倒数第k个节点总结 前言 leetcode以及牛客网单链表相关的题、移除链表元素、链表的中间节点、合并两个有序链表、反转链表、链表分割、倒数第k个节点等的介绍 一、移除链表元…

【详细讲解】二叉树的层序遍历

广度优先搜索 总结一下&#xff0c;思路就是&#xff1a; 加入元素&#xff0c;记录size&#xff0c;size就是当前这一层的元素个数。不断弹出元素&#xff0c;size - 1&#xff0c; 同时加入弹出元素的左右孩子&#xff0c;直到size0&#xff0c;说明当前层已经完全遍历完&am…

闲话 .NET(4):为什么要跨平台?

前言 .NET Core 有一个关键词就是跨平台&#xff0c;为什么要跨平台呢&#xff1f;Windows 操作系统不香吗&#xff1f;今天我们来聊聊这个 原因一&#xff1a;安全考虑 Windows OS 是闭源的&#xff0c;而 Linux 是开源的&#xff0c;因此有些公司的技术负责人就认为 Linux…

Unity性能优化工具介绍

文章目录 一.Stats组件1.Audio音频的数据组件:2.图形数据 二.Profiler 性能分析器 一.Stats组件 Unity自带Statistics(统计数据),Game视窗中点击Stats打开 1.Audio音频的数据组件: 1):Level 声音强度 单位是分贝(dB) 表示音频听声音的大小,是闪烁波动的. 2):SDPload 数据信…

利用神经网络学习语言(一)——自然语言处理的基本要素

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型&#xff1a;从线性回归到通用人工智能》&#xff0c;欢迎有兴趣的读者多多支持。 本文涉及到的代码链接如下&#xff1a;regression2chatgpt/ch10_rnn/tokenizer.ipynb 本系列文章将深入探讨一种应用广泛的神经…

Vitis HLS 学习笔记--基本指针和算术指针

目录 1. 简介 2. 基本指针 3. 算术指针 4. 疑点解答 4.1 疑点1 4.2 疑点2 5. 总结 1. 简介 在 C/C 语言中&#xff0c;指针被广泛用来表示内存中的地址信息&#xff0c;它们是理解和使用这些语言的核心概念之一。然而&#xff0c;在 Vitis HLS 中&#xff0c;指针的使用…

ChatGPT、Llama等大模型回答脑筋急转弯

分别使用ChatGPT3.5、 4.0 和Llama 2 70B 和3 70B这四个应用最广的大模型来回答这个流传最广的脑筋急转弯。 树上10知鸟&#xff0c;打死2只&#xff0c;还有几只&#xff1f; 看看它们的表现吧&#xff1a; 题目树上10知鸟&#xff0c;打死2只&#xff0c;还有几只&#xf…

保护共享资源的方法(互斥锁)

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…

【BSP开发经验】简易文件系统digicapfs实现方式

文章目录 背景Linux vfs框架介绍数据结构系统调用openwriteread 总体框架 Linux 磁盘高速缓存机制标准文件访问同步文件访问异步文件访问buffer_head 如何实现一个简单的文件系统blkdevfs注册文件系统产生一个文件让文件变得可读可写 背景 在新的分区升级启动方案中需要分别实…

快手二面准备【面试准备】

快手二面准备【面试准备】 前言版权快手二面准备秋招一面中的问题实习一面中的问题计算机网络和操作系统论坛项目登录注册ThreadLocal代替session存储用户秒杀项目登录注册->阿里验证码->rpcsession为什么改为token实现&#xff0c;redis存储用户信息由binlog的用法->…

【Unity】免费的高亮插件——QuickOutline

除了常见的HighLightSystem来实现的高亮功能&#xff0c;其实还有很多的方法实现物体的高亮。 在 Unity资源商店 搜索OutLine&#xff0c;就会有很多免费好用的高亮插件。 下面介绍一下 QuickOutline这个插件&#xff0c;在 Unity资源商店 搜索到后&#xff0c;点击进去就可以…

网络模型-Qinq配置与应用

Qinq配置与应用 通过配置Qinq来实现利用公网提供的VLAN100使企业1互通&#xff0c;利用公网提供的VLAN200使企业2互通不同企业之间互相隔离。并通过在连接其它厂商设备的接口上配置修改0in0外层VLAN Tag的TPID值&#xff0c;来实现与其它厂商设备的互通。 一、创建VLAN #在Swi…

薪资不公、晋升无望?动笔写一份申诉材料吧!

薪资不公、晋升无望&#xff1f;动笔写一份申诉材料吧&#xff01; 引言&#xff1a;每个努力工作的人都值得公平对待 在职场上&#xff0c;我们付出了汗水和智慧&#xff0c;期待着相应的回报——合理的工资和公正的晋升机会。然而&#xff0c;现实并不总是如此美好。当你感觉…