Zookeeper和Dubbo介绍

摘要:
Dubbo建议使用Zookeeper作为服务注册表。1.Zookeeper是一种分布式协调服务。Zookeeper用于注册服务和执行负载平衡。调用者必须知道哪台机器提供了哪项服务。简而言之,它是IP地址和服务名称之间的对应关系。Zookeeper可以通过心跳机制检测出故障机器的IP和服务对应关系,并将其从列表中删除。

引言

Zookeeper和Dubbo介绍第1张

 RPC介绍 之 远程调用

Remote Procedure Call 远程过程调用,是分布式架构的核心,按响应方式分如下两种:

  • 同步调用:客户端调用服务方方法,等待直到服务方返回结果或者超时,再继续自己的操作。
  • 异步调用:客户端把消息发送给中间件,不再等待服务端返回,直接继续自己的操作。

需要注意的是RPC并不是一个具体的技术,而是指整个网络远程调用过程。
RPC是一个泛化的概念,严格来说一切远程过程调用手段都属于RPC范畴。各种开发语言都有自己的
RPC框架。Java中的RPC框架比较多,广泛使用的有RMI、Hessian、Dubbo、gRPC等。

RPC组件

简单来说一个RPC架构里包含如下4个组件:
1、 客户端(Client):服务调用者
2、 客户端存根(Client Stub):存放服务端地址信息,将客户端的请求参数打包成网络消息,再通过网
络发送给服务方
3、 服务端存根(Server Stub):接受客户端发送过来的消息并解包,再调用本地服务
4、 服务端(Server):服务提供者。

Zookeeper和Dubbo介绍第2张

 Zookeeper和Dubbo介绍第3张

 Apache Dubbo架构

Zookeeper和Dubbo介绍第4张

  • 虚线都是异步访问
  • 实线都是同步访问
  • 蓝色虚线:在启动时完成的功能
  • 红色虚线(实线)都是程序运行过程中执行的功能

 节点角色说明:

  • Provider:暴露服务的服务提供方;
  • Consumer:调用远程服务的服务消费方;
  • Register:服务注册与发现的注册中心;
  • Monitor:统计服务调用次数和调用时间的监控中心;
  • Constainer:服务运行容器。

调用关系说明:

  • 0.服务容器负责启动,加载,运行服务提供者;
  • 1.服务提供者在启动时,向注册中心注册自己提供的服务;
  • 2.服务消费者在启动时,向注册中心订阅自己所需的服务;
  • 3.注册中心返回服务提供者地址列表给消费者,如有变更,注册中心将基于长连接推送变更的数据给消费者;
  • 4.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,则选择另一台调用;
  • 5.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

Dubbo建议使用Zookeeper作为服务的注册中心

1.Zookeeper 的作用

Zookeeper是一个分布式协调服务。

Zookeeper用来注册服务和进行负载均衡,哪一个服务由那一台机器来提供必需让调用者知道,简单来说就是IP地址和服务名称的对应关系。当然也可以通过硬编码的方式把这种对应关系在调用方业务代码中实现,但是如果提供服务的机器挂掉,调用者无法知晓,如果不更改代码会继续请求挂掉的机器提供服务。Zookeeper通过心跳机制可以检测挂掉的机器的IP和服务对应关系从列表关系中删除。至于支持高并发,简单来说就是横向扩展,在不更改代码的情况通过增加机器数量提高运算能力。通过添加新的机器向Zookeeper注册服务,服务的提供者多了能服务的客户就多了。

2.dubbo

官方说法,Dubbo 是一个分布式、高性能、透明化的 RPC 服务框架,提供服务自动注册、自动发现等高效服务治理方案。RPC 指的是远程调用协议,也就是说两个服务器交互数据。

是管理中间层的工具,在业务层到数据仓库间有非常多服务的接入和提供者需要调度,dubbo提供一个框架解决这些问题。注意这里的dubbo只是一个框架,至于你在框架上放什么东西,完全取决于你,就像一个汽车骨架,你需要配你的轮子引擎。这个框架中要完成调度必须需要一个分布式的注册中心,存储所有服务的元数据,你可以用Zookeeper,你也可以用别的。

3.dubbo和Zookeeper的关系

dubbo将注册中心进行抽象,使得它可以外接不同的存储媒介给注册中心提供服务,有Zookeeper,memcached,redis等。

引入了Zookeeper作为存储媒介,也就把Zookeeper的特性引进来了。首先是负载均衡,但注册中心的承载能力是有限的,在流量达到一定程度的时候要进行分流,负载均衡就是为分流而生的,一个Zookeeper群配合相应的web应用就可以很容易达到负载均衡;资源同步,单单有负载均衡还不够,节点之间的数据和资源需要同步,Zookeeper集群就天然具备有这样的功能;命名服务,将树状结构用于维护全局的服务地址列表,服务提供者在启动的时候,向Zookeeper上指定的节点/dubbo/${serviceName}/providers目录下写入自己的url地址,这个操作就完成了服务的发布。其他特性还有master选举,分布式锁等。

免责声明:文章转载自《Zookeeper和Dubbo介绍》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇href="https://tool.4xseo.com/article/243199.html" 链接到当前页面noip2013提高组:积木大赛下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

浅谈大型web系统架构(一)

目录 Web前端系统 负载均衡系统 数据库集群系统 缓存系统 分布式存储系统 分布式服务器管理系统 代码发布系统   动态应用,是相对于网站静态内容而言,是指以c/c++、php、Java、perl、.net等服务器端语言开发的网络应用软件,比如论坛、网络相册、交友、BLOG等常见应用。动态应用系统通常与数据库系统、缓存系统、分布式存储系统等密不可...

[源码解析] PyTorch 分布式(16) 使用异步执行实现批处理 RPC

[源码解析] PyTorch 分布式(16) --- 使用异步执行实现批处理 RPC 目录 [源码解析] PyTorch 分布式(16) --- 使用异步执行实现批处理 RPC 0x00 摘要 0x01 前言 1.1 先决条件 1.2 基础知识 1.3 代码 0x02 启动 2.1 总体启动 2.2 启动参数服务器 0x03 参数服务器...

用redis解决多用户同时编辑同一条数据问题

1,场景再现 场景:总公司可以给分公司下发今年的规划任务(可能只是写了个规划大纲),分公司收到后,进行详细的规划补充,然后提交。 比如规划表: CREATE TABLE `sys_plan` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', `branch_offince_id` int(11...

Akka源码分析-Remote-收消息

上一遍博客中,我们分析了网络链接建立的过程,一旦建立就可以正常的收发消息了。发送消息的细节不再分析,因为对于本地的actor来说这个过程相对简单,它只是创立链接然后给指定的netty网路服务发送消息就好了。接收消息就比较麻烦了,因为这对于actor来说是透明的,netty收到消息后如何把消息分发给指定的actor呢?这个分发的过程值得研究研究。 之前分析过...

dubbo问题

1.dubbo启动异常,提供者未暴露服务 provider未提供配置Related cause: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loanQuotaRecoverOrdersInterface': Cannot r...

MFC 三种消息

在MFC应用程序中传输的消息有三种类型:窗口消息、命令消息和控件通知。 (1)窗口消息:WM_XXX 窗口消息(Window Message)一般与窗口的内部运作有关,如:创建窗口、绘制窗口和销毁窗口等。通常,消息是从系统发送到窗口,或从窗口发送到窗口。 (2)命令消息:WM_COMMAND 命令消息一般与处理用户请求相关,当用户单击一个菜单项或工具栏时...