`
ahua186186
  • 浏览: 562056 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

alibaba远程调用框架dubbo原理

 
阅读更多
【引用】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作用类似,在维护节点列表方面,不过它的相关计算都需要通过中心节节点,让它来分配任务。
分享到:
评论

相关推荐

    阿里巴巴开源RPC框架dubbo的hellworld实例

    在这个"阿里巴巴开源RPC框架dubbo的hello world实例"中,我们将深入理解dubbo的基本工作原理和如何创建一个简单的应用。 首先,我们需要了解dubbo的核心概念。dubbo提供服务提供者(Provider)、服务消费者...

    阿里巴巴开源服务框架Dubbo.zip

    Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000 个服务提供3,000,000,000 次访问量支持。  Dubbo 也是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入...

    Dubbo阿里巴巴分布式服务框架

    《Dubbo:阿里巴巴分布式服务框架详解》 Dubbo,源自阿里巴巴,是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用、智能容错和负载均衡、以及服务自动注册与发现。作为企业级...

    截至目前阿里巴巴最新的dubbo框架

    《深入理解阿里巴巴Dubbo框架:最新版解析与实践》 阿里巴巴的Dubbo框架,作为一款高性能、轻量级的开源Java RPC框架,自发布以来便备受业界关注,尤其在电商领域,它已成为构建大型分布式系统不可或缺的一部分。...

    阿里分布式框架dubbo学习

    Dubbo是阿里巴巴开源的一款高性能、轻量级的Java服务治理框架,它专注于服务之间的远程调用,旨在提高系统间的解耦和可扩展性。Dubbo的核心组件包括服务提供者(Provider)、服务消费者(Consumer)、注册中心...

    分布式 rpc远程调用 dubbo

    Dubbo是阿里巴巴开源的一款高性能、轻量级的Java RPC框架,它提供了丰富的服务治理功能,如服务注册与发现、负载均衡、熔断机制等,广泛应用于微服务架构中。 标题“分布式rpc远程调用dubbo”直指Dubbo在分布式环境...

    Dubbo分布式服务框架入门2

    Dubbo是中国阿里巴巴开源的一款高性能、轻量级的Java分布式服务框架,它主要为了解决企业应用之间的服务调用问题,提供了服务注册、服务发现、负载均衡、容错处理等一系列完整的服务治理功能。在这个"Dubbo分布式...

    阿里巴巴 dubbo,有数据库,可执行

    阿里巴巴Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:服务注册与发现、远程调用、负载均衡。本篇文章将深入探讨Dubbo的核心概念、工作原理以及如何在实际项目中运用,同时也会提及与...

    分布式框架Dubbo学习小案例

    其中,阿里巴巴的开源项目Dubbo是一个非常重要的分布式服务框架,它致力于提供高性能和透明化的RPC(远程过程调用)服务,使得服务间的通信变得更加简单。本案例将带你深入理解Dubbo的核心特性和如何与Zookeeper协同...

    阿里巴巴dubbo-2.5.4源代码

    阿里巴巴的Dubbo是一款高性能、轻量级的Java远程服务框架,它以其强大的服务治理功能和高效的通信机制,在微服务领域占据着重要的地位。本篇文章将深入探讨Dubbo 2.5.4版本的源代码,帮助开发者理解其内部工作原理,...

    Dubbo调用java接口程序

    在分布式系统中,Dubbo是一个广泛使用的高性能Java RPC框架,由阿里巴巴开源。它提供了一种服务治理、远程调用、集群容错、监控等全面功能,使得开发者可以方便地构建可扩展的服务架构。本篇文章将深入讲解如何使用...

    dubbo原理与文档概述

    Dubbo,作为阿里巴巴开源的一款高性能、轻量级的Java服务框架,旨在提高服务的可扩展性和治理性。本文将深入探讨Dubbo的核心原理、功能实现及其在实际项目中的应用。 一、Dubbo概述 Dubbo的核心目标是提供一个简单...

    分布式框架dubbo实现

    分布式框架Dubbo是阿里巴巴开源的一款高性能、轻量级的服务治理框架,主要应用于Java环境。它致力于解决因网络异步导致的服务之间的调用问题,提升系统的响应速度和并发处理能力。在本项目中,我们将深入探讨如何...

    springboot 调用dubbo实例

    而Dubbo是阿里巴巴开源的高性能Java RPC框架,用于构建分布式服务系统。它提供了服务注册、服务发现、负载均衡、容错机制等功能,为微服务架构中的服务间通信提供了强有力的支持。 要在Spring Boot项目中集成并调用...

    SpringBoot+Dubbo+Nacos实现远程服务调用

    服务消费者则需要通过@ServiceReference注解引用服务提供者提供的接口,Dubbo会自动从Nacos获取服务实例,从而实现远程调用。在消费者端,我们可以通过接口方法直接调用远程服务,就像调用本地方法一样便捷。 为了...

    Dubbo RPC框架原理解析和源码

    Dubbo是一款由阿里巴巴开源的高性能Java RPC框架,它在分布式系统中起到了服务调用的核心作用。RPC(Remote Procedure Call)允许一个程序调用另一个在不同网络计算机上的程序,就像调用本地函数一样简单。Dubbo的...

    dubbo+zookeeper透明化远程调用实战案例下载

    Dubbo是阿里巴巴开源的一款高性能、轻量级的Java服务治理框架,它主要专注于服务调用、服务治理和服务监控。Zookeeper则是Apache Hadoop的一个子项目,是一个分布式的、开放源码的分布式应用程序协调服务,是集群的...

    dubbo入门学习框架源码

    Dubbo,作为阿里巴巴开源的一款高性能、轻量级的服务治理框架,已经成为Java世界中分布式服务的重要选择。本文将深入探讨Dubbo的核心概念、设计模式以及源码实现,旨在帮助读者理解其内在机制,提升在实际开发中的...

    基于springboot的两个项目之间的远程调用

    - **Apache Dubbo**:阿里巴巴开源的RPC框架,支持多种协议,适合Java环境下的高并发场景。 - **Spring Cloud Feign** 和 **Ribbon**:Spring Cloud组件,Feign用于声明式客户端调用,Ribbon则是客户端负载均衡器...

Global site tag (gtag.js) - Google Analytics