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作用类似,在维护节点列表方面,不过它的相关计算都需要通过中心节节点,让它来分配任务。
- 浏览: 28075 次
- 性别:
- 来自: 北京
文章分类
最新评论
发表评论
-
Arraylist Vector
2014-01-15 11:46 366ArrayList和Vector都是继承了相同的父类和实现了 ... -
java的转义字符
2013-11-11 11:39 0java的转义字符 1.八进 ... -
java future模式
2013-11-11 10:58 663Future介绍用过Java并发 ... -
java 内存区域划分
2013-10-30 11:39 362堆(Heap)和非堆(Non-heap)内存按照官方的说法 ... -
java finally
2013-10-29 21:06 515很多人都认为 finally 语句块是肯定要执行的,其中也包 ... -
java单链表反转
2013-10-28 15:45 0package dsa.linkedlist; ... -
java 动态代理 cglib
2013-10-24 22:58 452AOP有三种植入切面的方法:其一是编译期织入,这要求使用特 ... -
java 字符串split
2013-10-24 08:23 394使用StringTokenizer比使用Spring.spl ... -
java线程间通信
2013-10-18 00:24 388进程间通信的方法主要 ... -
spring mvc PK struts2
2013-10-17 22:58 364Spring MVC PK Struts2 我们用s ... -
java线程池
2013-10-22 13:56 326在没有Future之前我们 ... -
java队列
2013-10-22 13:56 437在JDK 5之前LinkedList就已经存在,而且本身实 ... -
java LRU实现
2013-10-17 16:26 417LRU缓存: LRU缓存利用了这样的一种思想。LRU是L ... -
java线程基础
2013-10-24 23:06 389ConcurrentHashMap是HashMap的线程安 ... -
spring中的线程池
2013-10-17 11:24 537多线程并发处理起来通常比较麻烦,如果你使用spring容器来 ... -
java泛型
2013-10-15 19:49 426Java泛型(generics)是JDK 5中引入的一个新特 ... -
struts2异常日志记录
2013-10-14 20:40 498struts2配合log4j打印异常栈信息 关于配置str ... -
java基础
2013-10-13 23:56 0-------- try catch finally顺序: ... -
java程序里运行外部程序
2013-10-12 20:05 338使用Runtime.getRuntime().exe ... -
Redis 集群方案
2013-10-12 07:34 838根据一些测试整理出来的一份方案: 1. Redis 性能 ...
相关推荐
### Dubbo框架详解 #### 一、Dubbo框架概述 Dubbo是由阿里巴巴开源的一款高性能、轻量级的微服务框架,旨在提供一个基于Java的分布式服务解决方案。它可以帮助开发者更轻松地构建、部署和管理复杂的应用程序和服务...
【标题】"dubbo框架的代码" Dubbo是阿里巴巴开源的一款高性能、轻量级的Java分布式服务框架,它旨在提高微服务架构中的服务治理效率,促进服务间的通信和协同。Dubbo的核心特性包括服务发现、服务调用、负载均衡、...
分布式Dubbo框架是一种高性能的Java RPC框架,它基于微服务的设计理念,用于实现服务的注册与发现,以及服务之间的通信。在公司级项目中,分布式Dubbo框架常用于构建微服务架构,将大型的单一应用程序拆分为一组小的...
dubbo框架及dubbo环境搭建 Dubbo 框架是一种分布式服务框架,旨在提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。 Dubbo 框架的核心部分包含远程通讯、集群容错和自动发现三个部分。 在 ...
【Dubbo框架技术开发文档】 Dubbo是一款由阿里巴巴开源的高性能、轻量级的Java RPC框架,它专注于服务治理,提供了服务注册、发现、调用、负载均衡、容错、监控等一系列完整的服务治理方案。本文档将深入探讨Dubbo...
Dubbo框架和SSM框架搭建。
【标题】"Dubbo框架设计原则ppt"与【描述】"dubbo框架设计Java并发ppt"揭示了本次讨论的核心——Dubbo框架的设计原则以及在Java并发环境中的应用。这两个主题对于理解和优化分布式服务架构至关重要。 首先,让我们...
《Dubbo框架源码解析深度探索》 Dubbo,作为阿里巴巴开源的一款高性能、轻量级的服务治理框架,已经成为Java世界中分布式服务的重要选择。本文将深入探讨Dubbo的核心概念、设计模式以及源码实现,旨在帮助读者理解...
Dubbo框架是阿里巴巴开源的一款高性能、轻量级的服务治理框架,它主要应用于分布式服务的开发、部署和管理。在使用Dubbo时,我们经常会遇到XML配置文件中的标签无法被识别的问题,这通常是因为缺少了对相关XML ...
【Dubbo框架搭建详解】 Dubbo,作为阿里巴巴开源的一款高性能、轻量级的Java RPC框架,旨在简化分布式系统开发,实现服务的透明调用。它提供了丰富的服务治理功能,包括服务注册与发现、负载均衡、容错机制、监控等...
因此,为了满足这些业务需求,设计并使用Dubbo框架对视频网站进行架构,可以充分利用Dubbo框架的技术优势,如高并发处理、高效的数据传输、强大的服务治理能力等。 通过视频网站案例的实验结果表明,使用Dubbo框架...
Dubbo框架与Zookeeper工具的整合是分布式服务治理中的常见实践。Dubbo是一款高性能、轻量级的开源Java RPC框架,而Zookeeper则是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中...
Java SpringCloud 微服务与Nacos组件整合Dubbo框架,是一种现代企业级应用程序设计的常见实践。这种整合允许开发者利用Dubbo的优秀服务治理能力,同时享受到SpringCloud微服务架构的灵活性和便捷性。 首先,让我们...
# 基于Dubbo框架的服务治理系统 ## 项目简介 基于Dubbo框架的服务治理系统是一个用于管理和监控分布式服务的高性能、轻量级解决方案。该项目通过提供REST风格的远程调用、高效的Java序列化实现、基于嵌入式Tomcat...
### Dubbo框架RPC实现原理 #### Dubbo框架简介 Dubbo是由阿里巴巴B2B技术部于2011年12月开源的一个高性能、透明化的RPC远程服务调用框架。它主要应用于分布式系统的服务治理方案,提供了服务自动注册和发现、软负载...
《深入理解阿里巴巴Dubbo框架:最新版解析与实践》 阿里巴巴的Dubbo框架,作为一款高性能、轻量级的开源Java RPC框架,自发布以来便备受业界关注,尤其在电商领域,它已成为构建大型分布式系统不可或缺的一部分。...
《Dubbo框架搭建入门教程——从零开始》 Dubbo,作为阿里巴巴开源的一款高性能、轻量级的服务治理框架,已经成为Java领域微服务架构中的重要组件。对于初学者来说,掌握Dubbo的使用和搭建是至关重要的。本教程将...
基于Spring Boot和Dubbo框架的秒杀系统 项目简介 本项目是一个基于Spring Boot和Dubbo框架的秒杀系统,旨在通过高效的服务调用和流量控制,实现秒杀活动的稳定运行。系统包括流量筛选、流量分发、业务校验、限流...
dubbo框架开发介绍