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. python中 try、except、finally执行顺序

    我们虽然经常用到try...except 作为异常补货,但是其实很少去研究try源码和机制,也许点进去看过,也是看不出个所以然来 class Exception(BaseException): &qu ...

  2. Operator '?:' has lower precedence than '*'; '*' will be evaluated first

    1.项目中用宏的时候,遇到如下警告 Operator '?:' has lower precedence than '*'; '*' will be evaluated first 2.错误原因 *操 ...

  3. 将一个压缩文件分成多个压缩文件;RAR文件分卷

    有时候需要上传压缩文件,但是限制了单个文件的大小,那我们怎么才能将一个比较大的压缩文件分割成多个压缩文件,从而符合要求的进行文件的上传呢?这里小编告诉你一个技巧. 工具/原料 电脑 winrar(一般 ...

  4. Boost.Interprocess

    https://github.com/svebert/InterprocessMsg 好像消息队列

  5. filter的使用场景

    1.filter的使用场景:假如有一个对象数组A,获取数组中的指定类型的对象放到B数组中 我们在ES5先进行for循环遍历数组,再进行if 判断,如果数组中某个对象的类型符合要求,push 到一个新数 ...

  6. php 连接mysql 主机 localhost,显示 No such file or directory

    打开 php.ini文件,找到这1行 mysql.default_socket 然后将它修改为 mysql.default_socket=/path/to/mysql.sock /path/to/my ...

  7. tf-idf 词条权重计算

    在文本分类问题中,某些高频词一直出现,这样的词对区分文档的作用不大,例如: D1:  'Job was the chairman of Apple Inc.' D2:  'I like to use ...

  8. 请问在一个固定div大小里面,图片右移动,超出div容器的图片给隐藏,怎么设定?

    如图,让图片移动,溢出的图片被隐藏,怎么设置? overflow: hidden;

  9. Java——面向对象的特征三:多态性

    2.5面向对象的特征三:多态性 2.5.1 关于java语言中的向上转型和向下转型 ①向上转型(upcasting) :  子--->父(自动类型转换) ②向下转型(downcasting) : ...

  10. bash数组总结

    bash数组操作 bash支持两种数组,一种是索引数组,一种是关联数组 索引数组 数组的值类型是任意的,索引也未必一定要连续,当做列表理解更好 下面总结下索引数组,即列表: 1. 声明 declare ...