`

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作用类似,在维护节点列表方面不过它的相关计算都需要通过中心节节点,让它来分配任务。

分享到:
评论

相关推荐

    Dubbo RPC框架原理解析和源码

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

    dubbo入门学习框架源码

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

    Dubbo基本原理机制

    "Dubbo基本原理机制" Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。Dubbo 的基本原理机制可以分为以下几个部分: 1. 客户端调用远程接口时,生成一个...

    Dubbo框架RPC实现原理

    ### Dubbo框架RPC实现原理 #### Dubbo框架简介 Dubbo是由阿里巴巴B2B技术部于2011年12月开源的一个高性能、透明化的RPC远程服务调用框架。它主要应用于分布式系统的服务治理方案,提供了服务自动注册和发现、软负载...

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

    Spring整合Dubbo框架过程及原理解析 一、Dubbo框架架构 Dubbo是一个RPC框架,主要提供了服务注册、服务发现、服务调用等功能。Dubbo架构主要分为四个节点角色:Provider、Consumer、Registry、Monitor。 * ...

    基于Dubbo框架的分布式视频网站架构设计.pdf

    Dubbo框架的技术原理主要体现在以下几个方面:首先,它采用了远程过程调用(RPC)机制,实现跨网络的分布式调用;其次,它支持多种网络通信协议,如HTTP、TCP等,增加了调用方式的灵活性;再次,Dubbo框架还具有负载...

    dubbo原理与文档概述

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

    dubbo-SSM框架搭建.zip

    这个例子可以帮助初学者快速理解Dubbo的基本工作原理和配置方式。 在压缩包内的" dubbo_helloworld "文件可能包含了以下内容:服务接口定义、服务实现、服务暴露配置(如dubbo配置文件)、消费者端的引用配置以及...

    dubbo分布式框架学习资料(内含实例)

    Dubbo是中国阿里巴巴公司开源的一款高性能、轻量级的Java服务治理框架,它主要为企业级应用提供RPC(远程过程调用)服务。这个压缩包文件包含了关于Dubbo分布式框架的学习资料和实例,对于深入理解并掌握Dubbo有极大...

    深入理解Dubbo框架:从基本原理到模拟实践的全面解析

    【深入理解Dubbo框架:从基本原理到模拟实践的全面解析】 远程过程调用(RPC)是分布式系统中的一种核心技术,它使得一个程序能够像调用本地方法一样调用远程机器上的程序。RPC协议允许不同地址空间的程序之间进行...

    dubboDemo学习 ,适合零基础学习dubbo框架搭建入手级别demo

    《Dubbo框架搭建入门教程——从零开始》 Dubbo,作为阿里巴巴开源的一款高性能、轻量级的服务治理框架,已经成为Java领域微服务架构中的重要组件。对于初学者来说,掌握Dubbo的使用和搭建是至关重要的。本教程将...

    dubbo核心原理解析.pdf

    1. Dubbo框架概述: Dubbo是由阿里巴巴开源的一个高性能Java RPC框架,它提供了丰富的服务治理能力,如服务注册与发现、负载均衡、容错机制等,适用于分布式系统的远程服务调用场景。 2. Dubbo服务暴露原理: 当...

    Dubbo入门---搭建一个最简单的Demo框架

    【描述】:这篇博客通过一个简单的实例,引导读者了解如何入门Dubbo框架的使用。它可能是以创建一个包含服务提供者和服务消费者的基本项目为背景,逐步讲解了Dubbo的配置与运行流程。 【标签】:“源码”和“工具”...

    dubbo简介、框架原理.docx

    Dubbo 的核心框架原理主要包括以下几个部分: 1. **服务注册与发现**:Dubbo 提供 ZooKeeper 等多种注册中心支持,服务提供者在启动时向注册中心注册自己的服务,服务消费者则从注册中心获取服务提供者的地址列表。...

    Dubbo框架Demo

    【标题】"Dubbo框架Demo"揭示了我们即将探讨的核心主题——如何利用Apache Dubbo构建一个实际的应用示例。Dubbo是一款由阿里巴巴开源的高性能、轻量级的Java RPC框架,它致力于解决分布式系统中的服务治理问题,如...

    服务治理中间件dubbo原理解析

    服务治理中间件Dubbo是阿里巴巴基于开源思想使用Java语言实现的高性能RPC框架,它支持服务的注册与发现、负载均衡...掌握Dubbo的SPI扩展机制,对于深入理解和应用Dubbo框架,以及进行自定义扩展和优化具有重要的意义。

    dubbo整合框架

    一、Dubbo框架基础 1. **服务提供者(Provider)**:服务提供者是提供服务的实体,它将服务注册到注册中心,使得其他服务能够找到并调用。 2. **服务消费者(Consumer)**:服务消费者是调用服务的实体,通过注册...

    Dubbo服务框架 v2.6.12.zip

    《Dubbo服务框架 v2.6.12.zip——深入解析与应用》 Dubbo,作为阿里巴巴开源的一款高性能、轻量级的服务治理框架,自2008年诞生以来,便在分布式系统领域赢得了广泛的关注和应用。本次我们关注的是其v2.6.12版本,...

    Dubbo核心原理讲解&源码精读

    Dubbo是一个高性能、轻量级的开源微服务框架,旨在为开发者提供简单、高效的服务管理和调用解决方案。它支持多种协议,包括HTTP、Dubbo协议等,并且能够通过多种注册中心如Zookeeper、Nacos等进行服务发现和服务管理...

Global site tag (gtag.js) - Google Analytics