Spring Cloud失散多年的哥哥Dubbo

随着互联网项目用户量的急剧增长,访问并发良突然暴增,将一个应用使用多个独立的工程共同实现的系统架构,称为SOA系统架构,各个工程可以允许在不同的机器上,他们之间可以通过RPC协议(远程过程调用协议),完成通信,Dubbo就是RPC协议的实现着之一

Dubbo的简单介绍

Dubbo是阿里的一个开源的服务框架,可以实现应用拆分为多个工程, 通过RPC实现服务间的输出和输入,可以和Spring框架无缝连接,官方原话"Dubbo是一款高性能,轻量级的开源JavaRPC框架,他提供了三大核心能力:”面向接口的远程调用“,”智能容错和负载均衡“,”服务的自动注册和发现““。

  • 2011年开源,成为同类框架佼佼者

  • 2014年10月30日,发布了2.4.11版本后,Dubbo停止更新

  • 2017年9月7号,在GitHub上发布了2.5.4版本

  • 2017年10月的云栖大会上,阿里向外公开消息:将其列为重点项目维护

  • 2018.2.15,也是酒大年三十,Dubbo进入Apach孵化器

Dubbo的四大组件

  • Provider:服务的暴露者,也就是提供服务的人

  • Consumer:服务的调用方,也就是服务的消费者

  • Registry:服务的注册与发现中心,比如Zeekkper,Eureka,Redis,官方推荐使用ZK

  • Monitor:服务监控中心,统计服务的调用次数、调用时间等信息的日子服务等

  

官网中的流程图的解释:

0.start :Dubbo服务器启动,Spring容器首先会创建服务提供者

1.register :服务提供者创建好了以后,将该服务注册到注册中心,这个过程称为服务暴露

2.subscribe:服务消费者启动后,首先回想注册中心订阅相关的服务

3.notify:消费订阅的服务在注册中心中可能还没有注册,但不不影响,因为是虚线,代表异步,并不会阻塞,还可以订阅其他服务,当相应的服务被注册到注册中心后,注册中心会马上通知订阅了该服务的消费者,

4.invoke:消费者以同步的方式调用服务提供者的请求,消费者通过远程注册中心的服务列表调用远程服务,Dubbo会基于负载均衡算法,选一台服务提供者出路消费者的请求,因为是同步的,所以在服务提供方没有返回服务结果之前,消费者出路阻塞状态,知道服务提供者返回服务结果,或者等待超时,若是等待超时,Dubbo会再选一个服务提供者为消费者提供服务,当然以我Spring cloud的基础来看:(如果服务迟迟不响应,可能造成线程用完要么直接宕机要么服务降级)

5.count 每个消费者对各个服务的累积调用次数,调用时间,每个服务提供者的服务被调用的次数和时间,消费者和提供者都会将数据定时发送给监控中心,这些数据都可以在Dubbo的可视化界面看到

Dubbo的三二一(了解内容)

Dubbo的三大领域模型

为了对Dubbo整体架构叙述的方便,Dubbo抽象出了三个领域模型

  • Protocol服务域:是invoker暴露和引用的主功能入口,它负责invoker的生命周期管理

  • Invoker实体域:是Dubbo的核心模型,它代表一个可执行体,可向他发起invoke调用,它有可能是一个本地的实现,也有可能是一个远程的实现,也可能是一个集群实现

  • Invacation会话域:它持有调用过程中的变量,比如方法名,参数等

Dubbo的两大设计原则

  • 采用Microkernel + Plugin模式,Microkernel 只负责组装Plugin,Dubbo自身的功能也是通过扩实现的,也就是Dubbo的所有功能点都可以被用户自定义扩展和替换

  • 采用URL作为配置信息的统一公司,所有扩展点都是通过传递URL携带配置信息

Dubbo的一个整体架构

  

  • Dubbo的整体架构如上所示,总共分了10层,最上面Service层是Dubbo开发分布式服务开发着实现业务逻辑的接口层,图中淡蓝色背景为服务消费者使用的接口,右边淡青色背景为服务提供者使用的接口,位于中轴线的为双方都要使用到的接口。

  • 详细见官网 : http://dubbo.apache.org/en-us/docs/dev/design.html

Spring Cloud失散多年的哥哥Dubbo学习笔记的更多相关文章

  1. 《深入理解Spring Cloud与微服务构建》学习笔记(二十)~配置中心Spring Cloud Config

    本例重新创建项目,构建一个空的mavan工程. 一.Config Server 从本地读取配置文件 新建一个moudle config_server ,pom添加依赖   <dependency ...

  2. Spring Cloud Alibaba生态探索:Dubbo、Nacos及Sentinel的完美结合

    @ 目录 背景 一.项目框架 1.1 采用IDEA和Maven多模块进行项目搭建 1.2 模块管理及版本管理 二.微服务公共接口 2.1 定义一个公共接口Api 2.2 pom.xml 2.3 Goo ...

  3. Dubbo学习笔记0:RPC框架Dubbo介绍

    整体来说,一个公司业务系统的演进流程基本都是从单体应用到多应用.在单体应用时,不同业务模块相互调用直接在本地JVM进程内就可以完成,而变为多个应用时,相互之间进行通信就不能简单的进行本地调用了,因为不 ...

  4. 阿里巴巴分布式服务框架dubbo学习笔记

    Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的 ...

  5. Dubbo学习笔记11:使用Dubbo中需要注意的一些事情

    指定方法异步调用 前面我们讲解了通过设置ReferenceConfig的setAsync()方法来让整个接口里的所有方法变为异步调用,那么如何指定某些方法为异步调用呢?下面讲解下如何正确地设置默写方法 ...

  6. Dubbo学习笔记6:Dubbo增强SPI与SPI中扩展点自动包装的实现原理

    在Dubbo整体架构分析中介绍了Dubbo中除了Service和Config层为API外,其他各层均为SPI,为SPI意味着下面各层都是组件化可以被替换的,也就是扩展性比较强,这也是Dubbo比较好的 ...

  7. Dubbo学习笔记5:Dubbo整体框架分析

    Dubbo的分层架构 本文将简单介绍Dubbo的分层架构设计,如下图是Dubbo官方的整体架构图: Dubbo官方提供的该架构图很复杂,一开始我们没必要深入细节,下面我们简单介绍下其中的主要模块. 其 ...

  8. Dubbo学习笔记4:服务消费端泛化调用与异步调用

    本文借用dubbo.learn的Dubbo API方式来解释原理. 服务消费端泛化调用 前面我们讲解到,基于Spring和基于Dubbo API方式搭建简单的分布式系统时,服务消费端引入了一个SDK二 ...

  9. Dubbo学习笔记3:Dubbo管理控制台与监控中心的搭建

    Dubbo源码下载与编译 本文来讲下如何在Dubbo源码编译后,得到用于搭建管理控制台的war包和监控平台的jar包. 首先需要到Github上下载Dubbo的源码,解压后如下: 在dubbo-2.5 ...

随机推荐

  1. USACO 2001 OPEN earthquake /// 最优比例生成树

    题目大意: https://www.cnblogs.com/forever97/p/3603572.html 讲解:https://www.jianshu.com/p/d40a740a527e 题解: ...

  2. SSD 坏了

    系统盘是SSD,系统盘坏了. 桌面所有数据都拿不回来了. 真的无奈啊,来吧,统计一下,有多少东西要重装. VS2008.VS2010.VS2013.VS2015. GITHUB.SVN.VMWare. ...

  3. NetCore2.2使用Nlog自定义日志写入路径配置方式

    在一些特定场景的业务需求下,日志需要写入到不同的路径下提供日志分析.第一种:默认Nlog可以通过日志级别来区分路径,——优点是不需要额外配置,开箱即用——缺点是不够灵活,如果超过级别数量,则不满足需求 ...

  4. metasploit5配置数据库

    #踩坑:Please run msfdb as a non-root user apt-get install postgresql #安装数据库 service postgresql start # ...

  5. pandas--层次化索引

    层次化索引是pandas的一项重要功能,它使你能在一个轴上拥有多个(两个以上)索引级别. 创建一个Series,并用一个由列表或数组组成的列表作为索引. data=Series(np.random.r ...

  6. 49. ArrayList LinkedList中特有的方法

    集合的体系:--------------| Collection  单列集合的根接口 ----------| List 如果实现了List接口的集合类,该类具备的特点是:有序,可重复 ------|A ...

  7. leetcood学习笔记-168-excel表列名称

    题目描述: 方法一:asiic码 class Solution: def convertToTitle(self, n: int) -> str: if (n-1)//26 == 0: retu ...

  8. 23 Pro/E二次开发中的问题记录

    0 引言 由于项目中涉及到Pro/E的二次开发技术,因此在边用边学的情况下,解决了不少问题,也积攒了不少问题.其中有些问题可能不是调个函数就能搞定的,得了解CAD底层的东西. 1 问题描述 (1)CA ...

  9. GdiPlus 一个给 Delphi 提供的新的 GDI+ 接口很好用!

    尽管 GDI+ 已经有近 10 年的历史(随 Win2000 推出), 尽管 DirectX 如日中天, 但在 Windows 7 之前的版本下进行 2D 绘图还是离不开它, 微软也没有停止对它的升级 ...

  10. (转)linux下装tomcat

    转载于:http://www.linuxidc.com/Linux/2016-11/136959.htm (linux社区) 1 tomcat介绍 Tomcat 是由 Apache Foundatio ...