当前位置: 首页 > news >正文

【rpc】Dubbo和Zookeeper结合使用,它们的作用与联系(通俗易懂,一文理解)

目录

Dubbo是什么?        

把系统模块变成分布式,有哪些好处,本来能在一台机子上运行,为什么还要远程调用

Zookeeper是什么?

它们进行配合使用时,之间的关系

服务注册

服务发现

动态地址管理


Dubbo是什么?        

        Dubbo是一种开源的高性能、轻量级的分布式服务框架,它致力于提供可靠的RPC(远程过程调用)通信,使得不同的应用程序可以通过网络互相调用,实现分布式系统之间的高效通信和协作。

        通俗地说,我们可以将Dubbo比喻为一个快递公司。假设有一个电商平台需要处理用户下单、支付和发货等操作,而这些操作分别由不同的子系统(例如订单系统、支付系统和物流系统)处理。在传统的架构中,这些子系统之间要进行复杂的接口对接和数据传输,非常繁琐。

        而使用Dubbo框架,我们可以将每个子系统都称为一个服务,这就像将每个子系统都是一个快递站点。Dubbo框架提供了服务注册、发现和调用的功能,就像在快递公司中有一个中央调度中心一样。每个子系统都会在中央调度中心注册自己提供的服务,其他子系统则可以通过中央调度中心查询并调用这些服务。

        举个例子来说,当用户下单时,订单系统会将订单信息提交给Dubbo的中央调度中心。支付系统会监听中央调度中心,当发现有新的订单需要支付时,就会主动调用订单系统提供的支付服务,完成支付操作。物流系统也会监听中央调度中心,当发现有新的订单需要发货时,就会主动调用订单系统提供的发货服务,完成物流操作。

        通过Dubbo框架,这些子系统之间的通信和协作变得简单高效,每个子系统只需专注于自身的业务逻辑,而不必关心其他系统的实现细节。

把系统模块变成分布式,有哪些好处,本来能在一台机子上运行,为什么还要远程调用

将系统模块变成分布式架构具有以下几个好处

  1. 提高性能和可扩展性:通过将系统模块分布到多台机器上,每台机器都可以独立处理一部分工作负载,从而提高系统整体的性能和吞吐量。如果系统需要处理更大规模的数据或者并发请求,可以通过添加更多的机器来扩展系统的能力。

  2. 提高系统的可靠性和容错性:分布式架构中的模块可以部署在不同的机器上,当其中一台机器发生故障时,其他机器仍然可以继续提供服务,从而提高了系统的可靠性和容错性。此外,分布式架构还可以使用数据复制、备份和冗余机制来防止数据丢失和单点故障。

  3. 实现资源共享和负载均衡:通过远程调用可以实现不同机器之间的资源共享和负载均衡。例如,在一个分布式系统中,可以将计算密集型任务分配给性能较高的机器,将存储任务分配给存储资源丰富的机器,从而充分利用各个机器的特点和优势。

  4. 降低开发和维护成本:通过将系统模块拆分为分布式服务,不同的团队可以独立开发和维护自己负责的服务,从而降低了各个模块之间的耦合度和开发协调成本。此外,由于每个模块都是相对独立的,可以更容易地进行系统的升级和扩展。

Zookeeper是什么?

        ZooKeeper是一个开源的分布式协调服务框架,旨在提供高度可靠的分布式协调功能,用于构建和管理分布式系统。

        ZooKeeper提供了一个简单而强大的分布式协调原语集合,包括数据发布/订阅、分布式锁、分布式队列、选举等。它采用树形的数据结构来组织和存储数据,类似于文件系统的目录结构。每个节点(称为ZNode)都可以存储一小段数据,同时也可以拥有子节点。

ZooKeeper的主要特点包括:

  1. 高性能:ZooKeeper基于内存的数据模型和异步方式的数据复制机制,具有较低的延迟和高吞吐量,在大规模分布式系统中表现出色。

  2. 可靠性:ZooKeeper采用了多副本复制机制,将数据在多个节点上进行复制,当部分节点发生故障时,仍然可以保持数据的可靠性和可用性。

  3. 顺序一致性:ZooKeeper提供了强一致性的数据访问保证,即客户端在看到的数据状态上具有全局的线性顺序。

  4. 高可扩展性:ZooKeeper支持集群模式,可以通过添加更多的节点来扩展其性能和容量。

        ZooKeeper常被用于构建分布式应用程序,如分布式数据库、分布式缓存、分布式锁等。它提供了简单却强大的API,能够帮助开发者实现分布式系统中的协调和同步操作。

它们进行配合使用时,之间的关系

当Dubbo和Zookeeper结合使用时,它们的关系可以分为服务注册、服务发现和动态地址管理三个方面。

服务注册


        Dubbo将服务提供者的信息注册到Zookeeper中心,使服务消费者可以发现并调用服务。服务提供者先启动自己的服务,然后将自己的服务提供者的信息(包括IP地址、端口号、服务接口等)注册到Zookeeper上的指定节点中,完成服务注册的过程。这样,服务消费者就能从Zookeeper中获取可用的服务列表。

服务发现

        Dubbo的服务消费者向Zookeeper订阅特定的服务接口Zookeeper会将该服务接口下的可用提供者列表返回给消费者。消费者可以根据自定义的路由规则或负载均衡策略从这些提供者中选择一个进行调用。服务消费者订阅服务接口后,Dubbo框架会监听Zookeeper注册中心节点的变化,一旦有新的服务提供者注册或注销,Zookeeper会自动通知Dubbo框架,Dubbo框架会根据更新后的服务提供者列表更新本地缓存的服务提供者列表,从而确保服务提供者列表的实时性和准确性。

动态地址管理

        Dubbo利用Zookeeper作为注册中心,可以实现服务地址的动态管理,当有新的服务提供者上线或下线时,Zookeeper会将相应的事件通知给Dubbo,Dubbo在接收到事件后,会自动更新可用服务地址列表,使得调用方能够发现新的服务地址信息。

相关文章:

【rpc】Dubbo和Zookeeper结合使用,它们的作用与联系(通俗易懂,一文理解)

目录 Dubbo是什么? 把系统模块变成分布式,有哪些好处,本来能在一台机子上运行,为什么还要远程调用 Zookeeper是什么? 它们进行配合使用时,之间的关系 服务注册 服务发现 动态地址管理 Dubbo是…...

ChatGPT的未来

随着人工智能的快速发展,ChatGPT作为一种自然语言生成模型,在各个领域都展现出了巨大的潜力。它不仅可以用于日常对话、创意助手和知识查询,还可以应用于教育、医疗、商业等各个领域,为人们带来更多便利和创新。 在教育领域&#…...

Pytorch模型转ONNX部署

开始以为会很困难,但是其实非常方便,下边分两步走:1. pytorch模型转onnx;2. 使用onnx进行inference 0. 准备工作 0.1 安装onnx 安装onnx和onnxruntime,onnx貌似是个环境。。倒是没有直接使用,onnxruntim…...

k8s优雅停服

在应用程序的整个生命周期中,正在运行的 pod 会由于多种原因而终止。在某些情况下,Kubernetes 会因用户输入(例如更新或删除 Deployment 时)而终止 pod。在其他情况下,Kubernetes 需要释放给定节点上的资源时会终止 po…...

面试题五:computed的使用

题记 大部分的工作中使用computed的频次很低的,所以今天拿出来一文对于computed进行详细的介绍,因为Vue的灵魂之一就是computed。 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护…...

完美的分布式监控系统 Prometheus与优雅的开源可视化平台 Grafana

1、之间的关系 prometheus与grafana之间是相辅相成的关系。简而言之Grafana作为可视化的平台,平台的数据从Prometheus中取到来进行仪表盘的展示。而Prometheus这源源不断的给Grafana提供数据的支持。 Prometheus是一个开源的系统监控和报警系统,能够监…...

黑马JVM总结(九)

(1)StringTable_调优1 我们知道StringTable底层是一个哈希表,哈希表的性能是跟它的大小相关的,如果哈希表这个桶的个数比较多,元素相对分散,哈希碰撞的几率就会减少,查找的速度较快&#xff0c…...

如何使用 RunwayML 进行创意 AI 创作

标题:如何使用 RunwayML 进行创意 AI 创作 介绍 RunwayML 是一个基于浏览器的人工智能创作工具,可让用户使用各种 AI 功能来生成图像、视频、音乐、文字和其他创意内容。RunwayML 的功能包括: * 图像生成:使用生成式对抗网络 (…...

【css】能被4整除 css :class,判断一个数能否被另外一个数整除,余数

判断一个数能否被另外一个数整除 一个数能被4整除的表达式可以表示为:num%40,其中,num为待判断的数,% 为取模运算符,为等于运算符。这个表达式的意思是,如果num除以4的余数为0,则返回true&…...

ChatGPT与日本首相交流核废水事件-精准Prompt...

了解更多请点击:ChatGPT与日本首相交流核废水事件-精准Prompt...https://mp.weixin.qq.com/s?__bizMzg2NDY3NjY5NA&mid2247490070&idx1&snebdc608acd419bb3e71ca46acee04890&chksmce64e42ff9136d39743d16059e2c9509cc799a7b15e8f4d4f71caa25968554…...

关于 firefox 不能访问 http 的解决

情景: 我在虚拟机 192.168.x.111 上配置了 DNS 服务器,在 kali 上设置 192.168.x.111 为 DNS 服务器后,使用 firefox 地址栏搜索域名 www.xxx.com ,访问在 192.168.x.111 搭建的网站,本来经 192.168.x.111 DNS 服务器解…...

68、Spring Data JPA 的 方法名关键字查询

★ 方法名关键字查询(全自动) (1)继承 CrudRepository 接口 的 DAO 组件可按特定规则来定义查询方法,只要这些查询方法的 方法名 遵守特定的规则,Spring Data 将会自动为这些方法生成 查询语句、提供 方法…...

Brother CNC联网数采集和远程控制

兄弟CNC IP地址设定参考:https://www.sohu.com/a/544461221_121353733没有能力写代码的兄弟可以提前下载好网络调试助手NetAssist,这样就不用写代码来测试连接CNC了。 以上是网络调试助手抓取CNC的产出命令,结果有多个行string需要自行解析&…...

Jenkins 编译 Maven 项目提示错误 version 17

在最近使用集成工具的时候,对项目进行编译提示下面的错误信息: maven-compiler-plugin:3.11.0:compile (default-compile) on project mq-service: Fatal error compiling: error: release version 17 not supported 问题和解决 上面提示的错误信息原…...

数据结构——排序算法——堆排序

堆排序过程如下: 1.用数列构建出一个大顶堆,取出堆顶的数字; 2.调整剩余的数字,构建出新的大顶堆,再次取出堆顶的数字; 3.循环往复,完成整个排序。 构建大顶堆有两种方式: 1.从 0 开…...

【Spring事务底层实现原理】

Transactional注解 Spring使用了TransactionInterceptor拦截器,该拦截器主要负责事务的管理,包括开启、提交、回滚等操作。当在方法上添加Transactional注解时,Spring会在AOP框架中对该方法进行拦截,TransactionInterceptor会在该…...

docker快速安装redis,mysql,minio,nacos等常用软件【持续更新】

redis ①拉取镜像 docker pull redis② 创建容器 docker run -d --name redis --restartalways -p 6379:6379 redis --requirepass "PASSWORD"–requirepass “输入你的redis密码” nacos ①:docker拉取镜像 docker pull nacos/nacos-server:1.2.0②…...

SCRUM产品负责人(CSPO)认证培训课程

课程简介 Scrum是目前运用最为广泛的敏捷开发方法,是一个轻量级的项目管理和产品研发管理框架。产品负责人是Scrum的三个角色之一,产品负责人在Scrum产品开发当中扮演舵手的角色,他决定产品的愿景、路线图以及投资回报,他需要回答…...

python连接mysql数据库的练习

一、导入pandas内置的sqlite3模块,连接的信息:ip地址是本机, 端口号port 是3306, 用户user是root, 密码password是123456, 数据库database是lambda-xiaozhang import pymysql# 打开数据库连接,参数1:主机名或IP;参数…...

扩散模型在图像生成中的应用:从真实样例到逼真图像的奇妙转变

一、扩散模型 扩散模型的起源可以追溯到热力学中的扩散过程。热力学中的扩散过程是指物质从高浓度往低浓度的地方流动,最终达到一种动态的平衡。这个过程就是一个扩散过程。 在深度学习领域中,扩散模型(diffusion models)是深度生…...

Windows 打包 Docker 提示环境错误: no DOCKER_HOST environment variable

这个问题应该还是比较常见的。 [ERROR] Failed to execute goal io.fabric8:docker-maven-plugin:0.40.2:build (default) on project mq-service: Execution default of goal io.fabric8:docker-maven-plugin:0.40.2:build failed: No <dockerHost> given, no DOCKER_H…...

2023.9.8 基于传输层协议 UDP 和 TCP 编写网络通信程序

目录 UDP 基于 UDP 编写网络通信程序 服务器代码 客户端代码 TCP 基于 TCP 编写网络通信程序 服务器代码 客户端代码 IDEA 打开 支持多客户端模式 UDP 特点&#xff1a; 无连接性&#xff1a;发送端和接收端不需要建立连接也可相互通信&#xff0c;且每个 UDP 数据包都…...

单例模式,适用于对象唯一的情景(设计模式与开发实践 P4)

文章目录 单例模式实现代理单例惰性单例 上一章后续的内容是关于 JS 函数闭包的&#xff0c;考虑很多读者已经有了闭包基础或者希望通过实战理解&#xff0c;遂跳过上一章直接开始设计模式篇&#xff5e; 需要注意的是&#xff0c;代码部分仅供参考&#xff0c;主要关注的内容是…...

C语言实现三子棋游戏(详解)

目录 引言&#xff1a; 1.游戏规则&#xff1a; 2.实现步骤&#xff1a; 2.1实现菜单&#xff1a; 2.2创建棋盘并初始化&#xff1a; 2.3绘制棋盘&#xff1a; 2.4玩家落子&#xff1a; 2.5电脑落子&#xff1a; 2.6判断胜负&#xff1a; 3.源码&#xff1a; 结语&…...

javaee之黑马乐优商城3

异步查询工具axios(儿所以时) vue官方推荐的ajax请求框架 新增品牌页面 如何找到上面这个页面 下面这个页面里面的新增商品弹窗 上面就是请求路径与请求方式 那么请求参数是什么&#xff1f; brand对象&#xff0c;外加商品分类的id数组cids &#xff08;这里其实不止就是添加…...

Pytorch intermediate(二) ResNet

实现了残差网络&#xff0c;残差网络结构。代码比之前复杂很多 conv3x3&#xff1a;将输入数据进行一次卷积&#xff0c;将数据转换成为&#xff0c;残差块需要的shape大小 ResidualBlock&#xff1a;残差块&#xff0c;也是所谓的恒等块。为什么被称为恒等块&#xff0c;大概…...

【2023集创赛】加速科技杯作品:高光响应的二硫化铼光电探测器

本文为2023年第七届全国大学生集成电路创新创业大赛&#xff08;“集创赛”&#xff09;加速科技杯西北赛区二等奖作品分享&#xff0c;参加极术社区的【有奖征集】分享你的2023集创赛作品&#xff0c;秀出作品风采&#xff0c;分享2023集创赛作品扩大影响力&#xff0c;更有丰…...

编写postcss插件,全局css文件px转vw

跟目录下创建plugins文件夹&#xff0c;创建postcss-px-to-viewport.ts文件 文件内代码&#xff1a; // postcss 的插件 vite内置了postCss插件 无需安装 import { Plugin } from postcss;interface Options {viewportWidth: number }const Options {viewportWidth: 375, // …...

精品SpringCloud的B2C模式在线学习网微服务分布式

《[含文档PPT源码等]精品基于SpringCloud实现的B2C模式在线学习网站-微服务-分布式》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 框架&#xff1a;springcloud JDK版本&#xf…...

解决vue项目导出当前页Table为Excel

解决vue项目中导出当前页表格为Excel表格的方案 用到的技术&#xff1a; Vue2Element-uifile-saverxlsx 1、创建vue项目&#xff0c;安装element-ui 2、创建一个组件&#xff0c;组件内放入表格&#xff0c;和导出按钮 <template><div><!-- 导出的按钮 -->…...

做网站公司那家好/推广获客

pyramid setup参考http://docs.pylonsproject.org/en/latest/docs/pyramid.html今天是2012-03-12讲的都是安装好Python2.7&#xff0c;以及在ubuntu操作系统下面&#xff1a;1.首先装Pyramid&#xff0c;测试语句import setuptools&#xff0c;没有ImportError错误&#xff0c;…...

网站上删除信息如何做/百度关键词统计

nginx已经配置了&#xff0c;access-control-allow-origin &#xff1a;*&#xff1b;。但是在接口在返回400是未能捕捉到错误信息。报以下错误 CORS(跨域资源共享) CORS是一种网络浏览器的技术规范&#xff0c;它为Web服务器定义了一种方式&#xff0c;允许网页从不同的域访问…...

企业网站建设及前期准备/百度题库

这里是吧容器的本地日志目录挂载filebeat,然后filebeat 读取日志写入到kafka --- apiVersion: v1 kind: ConfigMap metadata:name: filebeat-confignamespace: kube-systemlabels:k8s-app: filebeat data:filebeat.yml: |-filebeat.inputs:- type: logpaths:- /var/lib/docke…...

开江建设局网站/seo综合查询怎么关闭

htons(), ntohl(), ntohs()&#xff0c;htons() 函数&#xff1a; 转载自&#xff1a;https://blog.csdn.net/myyllove/article/details/83380209 atoi()和itoa()函数 转载自&#xff1a;https://www.cnblogs.com/ralap7/p/9171613.html...

浙江建站优化品牌/青岛网站推广公司排名

1、ARRAY_SIZE 用来判断一个数组的 size&#xff0c;若传入的参数不是一个数组&#xff0c;编译将会报错。 使用此宏来安全的获取一个数组的 size。 include/linux/kernel.h#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) __must_be_array(arr))2、__must_be_arr…...

律师网站建设/电脑优化软件推荐

2004年2月28日&#xff0c;在浙江大学软件学院和CSDN网站的大力支持下&#xff0c;ERPTAO组织在浙大成功地举办了第一次软件技术讲座。有上百名专业软件开发者及爱好者到场参加&#xff0c;两位主讲人熊节&#xff08;也就是我本人&#xff09;和石一楹为大家送上了关于重构思想…...