`

【引用】alibaba远程调用框架dubbo原理

阅读更多
alibaba有好几个分布式框架,主要有:进行远程调用(类似于RMI的这种远程调用)的(dubbo、hsf),jms消息服务(napoli、notify),KV数据库(tair)等。这个框架/工具/产品在实现的时候,都考虑到了容灾,扩展,负载均衡,于是出现一个配置中心(ConfigServer)的东西来解决这些问题。
基本原理如图:


在我们的系统中,经常会有一些跨系统的调用,如在A系统中要调用B系统的一个服务,我们可能会使用RMI直接来进行,B系统发布一个RMI接口服务,然后A系统就来通过RMI调用这个接口,为了解决容灾,扩展,负载均衡的问题,我们可能会想很多办法,alibaba的这个办法感觉不错。

本文只说dubbo,原理如下:
ConfigServer
配置中心,和每个Server/Client之间会作一个实时的心跳检测(因为它们都是建立的Socket长连接),比如几秒钟检测一次。收集每个Server提供的服务的信息,每个Client的信息,整理出一个服务列表,如:
serviceName serverAddressList clientAddressList
UserService 192.168.0.1,192.168.0.2,192.168.0.3,192.168.0.4 172.16.0.1,172.16.0.2
ProductService 192.168.0.3,192.168.0.4,192.168.0.5,192.168.0.6 172.16.0.2,172.16.0.3
OrderService 192.168.0.10,192.168.0.12,192.168.0.5,192.168.0.6 172.16.0.3,172.16.0.4
当某个Server不可用,那么就更新受影响的服务对应的serverAddressList,即把这个Server从serverAddressList中踢出去(从地址列表中删除),同时将推送serverAddressList给这些受影响的服务的clientAddressList里面的所有Client。如:192.168.0.3挂了,那么UserService和ProductService的serverAddressList都要把192.168.0.3删除掉,同时把新的列表告诉对应的Client 172.16.0.1,172.16.0.2,172.16.0.3;
当某个Client挂了,那么更新受影响的服务对应的clientAddressList
ConfigServer根据服务列表,就能提供一个web管理界面,来查看管理服务的提供者和使用者。
新加一个Server时,由于它会主动与ConfigServer取得联系,而ConfigServer又会将这个信息主动发送给Client,所以新加一个Server时,只需要启动Server,然后几秒钟内,Client就会使用上它提供的服务
Client
调用服务的机器,每个Client启动时,主动与ConfigServer建立Socket长连接,并将自己的IP等相应信息发送给ConfigServer。
Client在使用服务的时候根据服务名称去ConfigServer中获取服务提供者信息(这样ConfigServer就知道某个服务是当前哪几个Client在使用),Client拿到这些服务提供者信息后,与它们都建立连接,后面就可以直接调用服务了,当有多个服务提供者的时候,Client根据一定的规则来进行负载均衡,如轮询,随机,按权重等。
一旦Client使用的服务它对应的服务提供者有变化(服务提供者有新增,删除的情况),ConfigServer就会把最新的服务提供者列表推送给Client,Client就会依据最新的服务提供者列表重新建立连接,新增的提供者建立连接,删除的提供者丢弃连接
Server
真正提供服务的机器,每个Server启动时,主动与ConfigServer建立Scoket长连接,并将自己的IP,提供的服务名称,端口等信息直接发送给ConfigServer,ConfigServer就会收集到每个Server提供的服务的信息。

优点:
1,只要在Client和Server启动的时候,ConfigServer是好的,服务就可调用了,如果后面ConfigServer挂了,那只影响ConfigServer挂了以后服务提供者有变化,而Client还无法感知这一变化。
2,Client每次调用服务是不经过ConfigServer的,Client只是与它建立联系,从它那里获取提供服务者列表而已
3,调用服务-负载均衡:Client调用服务时,可以根据规则在多个服务提供者之间轮流调用服务。
4,服务提供者-容灾:某一个Server挂了,Client依然是可以正确的调用服务的,当前提是这个服务有至少2个服务提供者,Client能很快的感知到服务提供者的变化,并作出相应反应。
5,服务提供者-扩展:添加一个服务提供者很容易,而且Client会很快的感知到它的存在并使用它。

顺便说一下,hadoop里面的中心节点跟这里的configServer作用类似,在维护节点列表方面,不过它的相关计算都需要通过中心节节点,让它来分配任务。
分享到:
评论

相关推荐

    springboot整合Dubbo框架,实现RPC服务远程调用

    Container服务运行容器:远程调用、序列化 二、SpringBoot2整合 1、核心依赖 <!-- 这里包含了Zookeeper依赖和Dubbo依赖 --> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter ...

    spring-cloud-alibaba+dubbo+nacos内部服务调用

    Dubbo的核心功能在于提供服务间的RPC(远程过程调用),使得服务调用如同本地方法调用一样简单。 而Nacos是阿里巴巴推出的另一个开源项目,它作为一个动态服务发现、配置管理和元数据共享中心,为微服务架构提供了...

    SpringBoot2.0 整合 Dubbo框架实现RPC服务远程调用方法

    SpringBoot2.0 整合 Dubbo 框架实现 RPC 服务远程调用方法 本文主要介绍了 SpringBoot2.0 整合 Dubbo 框架实现 RPC 服务远程调用方法的详细步骤和配置。在本文中,我们将详细介绍 Dubbo 框架的简介、核心角色说明、...

    基于groovy实现 java脚本动态编译、部署、发布;可以通过脚本直接调用dubbo接口.zip

    在调用Dubbo接口方面,Dubbo是一个高性能、轻量级的Java RPC框架。Groovy脚本可以通过Java API直接调用Dubbo服务,就像在Java代码中一样。首先,你需要在脚本中导入Dubbo的相关依赖,然后创建Dubbo的消费者...

    alibaba-dubbo-2.5.1

    阿里巴巴的Dubbo是一款高性能、轻量级的Java开源框架,主要用于实现服务间的远程调用,是分布式系统中的重要组成部分。Dubbo 2.5.1是其一个重要版本,为开发者提供了稳定且便捷的服务治理功能,对于学习和应用分布式...

    dubbo2.5.7 源码包

    3.1 远程调用流程 (1) 创建Invoker:`com.alibaba.dubbo.rpc.Invoker`是服务调用的抽象,`com.alibaba.dubbo.rpc.cluster.support.FailoverClusterInvoker`实现了失败重试策略。 (2) 调用代理:`...

    alibaba-dubbo-dubbo-2.5.7-0-ge2d63ad.tar.gz

    1. **dubbo-rpc**:这是Dubbo的核心模块,实现了基于接口的远程调用,支持多种协议,如Hessian2、HTTP、RMI等,使得服务提供者和服务消费者之间可以透明通信。 2. **dubbo-remoting**:负责网络通信,包括客户端和...

    springcloudalibaba微服务dubbo+sentinel+gateway+zookeeper+nacos的demo

    1. **Dubbo**: Dubbo是阿里巴巴开源的一款高性能、轻量级的Java RPC框架,它能够帮助开发者实现服务之间的远程调用。在微服务架构中,Dubbo可以作为服务治理的核心,提供服务注册、服务发现、负载均衡、容错处理等...

    alibaba-dubbo框架集成springboot项目源码附运行说明

    Dubbo是阿里巴巴公司开源的一个高性能、轻量级的分布式服务框架,它专注于RPC(远程过程调用)服务调用和SOA(面向服务的架构)服务治理。Dubbo为应用提供了高性能的RPC远程服务调用能力,同时支持服务的自动注册与...

    Spring整合Dubbo框架过程及原理解析

    本文主要介绍了Spring整合Dubbo框架的过程和原理分析,包括Dubbo架构、服务提供者开发、服务消费者开发、服务注册中心、Dubbo原理分析和Spring整合Dubbo框架等。通过本文,读者可以了解Dubbo框架的原理和应用场景,...

    dubbo-admin 2.5.3源码编译,alibaba-dubbo-dependency和opensesame类库

    Dubbo 是一个由阿里巴巴开源的高性能 Java RPC(远程过程调用)框架,它提供了服务治理、监控和服务发现等功能。在分布式系统中,Dubbo 可帮助开发者实现微服务间的通信。`2.5.3` 版本是 Dubbo 的一个重要里程碑,它...

    alibaba dubbo 2.6.0.zip

    - **RPC(Remote Procedure Call)**:Dubbo的核心是基于接口的远程调用,允许服务提供者在自己的进程内暴露服务,而服务消费者可以在自己的进程内调用远程服务,就像调用本地方法一样。 - **服务注册与发现**:...

    dubbo zookeeper 框架整合

    《Dubbo与Zookeeper框架整合详解》 在分布式服务领域,Dubbo和Zookeeper是两个极为重要的组件。Dubbo是一款高性能、轻量级的Java RPC框架,它提供了服务治理、负载均衡、容错机制等功能,极大地提升了微服务架构的...

    第四课:Dubbo调用模块详解 (2)1

    在分布式服务框架Dubbo中,调用模块扮演着至关重要的角色,它负责实现远程方法调用并确保返回结果的顺利获取。本篇文章将深入探讨Dubbo调用模块的基本组成,包括透明代理、负载均衡、容错机制以及异步调用,帮助...

    dubbo-dubbo-2.5.10管理平台代码

    2. **远程调用(RPC)**:Dubbo的核心功能之一就是远程过程调用。在`com.alibaba.dubbo.rpc`包下,`Invoker`和`Protocol`接口定义了调用服务的抽象,而`ProxyFactory`负责生成服务代理,使得消费者可以像调用本地...

    SpringCloudAlibaba项目框架搭建详细过程

    Dubbo是阿里巴巴的高性能远程调用框架,SpringCloudAlibaba将其融入,使得微服务间的通信更加方便。我们需要在服务提供者和消费者之间配置Dubbo服务,包括接口定义、服务暴露、服务引用等,确保服务间能正常通信。 ...

    dubbo官方文档及demo

    3. **透明化远程调用**:使得远程服务调用就像调用本地方法一样简单。 4. **集群容错**:支持Failover、Failfast、Failsafe、Failback、Forbid等多种策略。 5. **负载均衡**:内置多种负载均衡策略,如Random、...

    Dubbo 源码分析

    Dubbo采用RPC(Remote Procedure Call)模型进行远程调用,核心组件包括`com.alibaba.dubbo.remoting.Transporter`、`com.alibaba.dubbo.remoting.Exchanger`和`com.alibaba.dubbo.remoting.ChannelHandler`。`...

    dubbox2.8.4所有jar包和resource包

    - **高性能**: 基于Netty实现的NIO通信框架,提供高效的远程调用能力。 - **高可用**: 支持多注册中心、服务自动注册与发现、服务故障切换,确保服务高可用。 - **灵活路由**: 提供基于规则的路由策略,可以实现...

    简单dubbo框架使用

    Dubbo是一个高性能、轻量级的Java服务治理框架,它由阿里巴巴开源并广泛应用于分布式系统开发。本项目是基于Dubbo实现的一个简单的Consumer-Provider模式的示例,旨在帮助初学者理解并掌握如何在实际应用中使用Dubbo...

Global site tag (gtag.js) - Google Analytics