【rpc】Dubbo和Zookeeper结合使用,它们的作用与联系(通俗易懂,一文理解)
目录
Dubbo是什么?
把系统模块变成分布式,有哪些好处,本来能在一台机子上运行,为什么还要远程调用
Zookeeper是什么?
它们进行配合使用时,之间的关系
服务注册
服务发现
动态地址管理
Dubbo是什么?
Dubbo是一种开源的高性能、轻量级的分布式服务框架,它致力于提供可靠的RPC(远程过程调用)通信,使得不同的应用程序可以通过网络互相调用,实现分布式系统之间的高效通信和协作。
通俗地说,我们可以将Dubbo比喻为一个快递公司。假设有一个电商平台需要处理用户下单、支付和发货等操作,而这些操作分别由不同的子系统(例如订单系统、支付系统和物流系统)处理。在传统的架构中,这些子系统之间要进行复杂的接口对接和数据传输,非常繁琐。
而使用Dubbo框架,我们可以将每个子系统都称为一个服务,这就像将每个子系统都是一个快递站点。Dubbo框架提供了服务注册、发现和调用的功能,就像在快递公司中有一个中央调度中心一样。每个子系统都会在中央调度中心注册自己提供的服务,其他子系统则可以通过中央调度中心查询并调用这些服务。
举个例子来说,当用户下单时,订单系统会将订单信息提交给Dubbo的中央调度中心。支付系统会监听中央调度中心,当发现有新的订单需要支付时,就会主动调用订单系统提供的支付服务,完成支付操作。物流系统也会监听中央调度中心,当发现有新的订单需要发货时,就会主动调用订单系统提供的发货服务,完成物流操作。
通过Dubbo框架,这些子系统之间的通信和协作变得简单高效,每个子系统只需专注于自身的业务逻辑,而不必关心其他系统的实现细节。
把系统模块变成分布式,有哪些好处,本来能在一台机子上运行,为什么还要远程调用
将系统模块变成分布式架构具有以下几个好处:
-
提高性能和可扩展性:通过将系统模块分布到多台机器上,每台机器都可以独立处理一部分工作负载,从而提高系统整体的性能和吞吐量。如果系统需要处理更大规模的数据或者并发请求,可以通过添加更多的机器来扩展系统的能力。
-
提高系统的可靠性和容错性:分布式架构中的模块可以部署在不同的机器上,当其中一台机器发生故障时,其他机器仍然可以继续提供服务,从而提高了系统的可靠性和容错性。此外,分布式架构还可以使用数据复制、备份和冗余机制来防止数据丢失和单点故障。
-
实现资源共享和负载均衡:通过远程调用可以实现不同机器之间的资源共享和负载均衡。例如,在一个分布式系统中,可以将计算密集型任务分配给性能较高的机器,将存储任务分配给存储资源丰富的机器,从而充分利用各个机器的特点和优势。
-
降低开发和维护成本:通过将系统模块拆分为分布式服务,不同的团队可以独立开发和维护自己负责的服务,从而降低了各个模块之间的耦合度和开发协调成本。此外,由于每个模块都是相对独立的,可以更容易地进行系统的升级和扩展。
Zookeeper是什么?
ZooKeeper是一个开源的分布式协调服务框架,旨在提供高度可靠的分布式协调功能,用于构建和管理分布式系统。
ZooKeeper提供了一个简单而强大的分布式协调原语集合,包括数据发布/订阅、分布式锁、分布式队列、选举等。它采用树形的数据结构来组织和存储数据,类似于文件系统的目录结构。每个节点(称为ZNode)都可以存储一小段数据,同时也可以拥有子节点。
ZooKeeper的主要特点包括:
-
高性能:ZooKeeper基于内存的数据模型和异步方式的数据复制机制,具有较低的延迟和高吞吐量,在大规模分布式系统中表现出色。
-
可靠性:ZooKeeper采用了多副本复制机制,将数据在多个节点上进行复制,当部分节点发生故障时,仍然可以保持数据的可靠性和可用性。
-
顺序一致性:ZooKeeper提供了强一致性的数据访问保证,即客户端在看到的数据状态上具有全局的线性顺序。
-
高可扩展性: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底层是一个哈希表,哈希表的性能是跟它的大小相关的,如果哈希表这个桶的个数比较多,元素相对分散,哈希碰撞的几率就会减少,查找的速度较快,…...
如何使用 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)是深度生…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...
一些实用的chrome扩展0x01
简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...
