![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Dubbo
carl-zhao
I never grew up, but i never stop growing.
展开
-
apache dubbo 源码分析系列汇总
Dubbo(读音[ˈdʌbəʊ])是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。后面捐献给了知名的开源社区 apache。Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。1、dubbo 架构以下是 du...原创 2020-03-27 23:06:03 · 2047 阅读 · 0 评论 -
Spring Boot 接入 Dubbo 指导文档
当前系统是使用 spring boot + spring cloud feign 作为系统间的调用。使用 amazon 的 aws 的负载均衡调用。不能够做到服务调用的治理以及监控。基于以上缺点所以决定引用 dubbo 来做服务间的调用。1、Why Dubbo比较流行的有 spring cloud 和 dubbo,为什么选择 dubbo。功能特性Spring Cloud Netfi...原创 2020-03-18 00:01:12 · 1916 阅读 · 0 评论 -
dubbo hello world
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。原创 2017-02-27 23:02:45 · 1205 阅读 · 0 评论 -
dubbo zookeeper demo
在上面一篇文章中介绍了dubbo的最简单的用法,下面就介绍一下在生产环境中是如何使用dubbo的。Zookeeper是Apacahe Hadoop的子项目,是一个树型的目录服务,支持变更推送,适合作为Dubbo服务的注册中心,工业强度较高,可用于生产环境.原创 2017-03-03 23:06:42 · 772 阅读 · 0 评论 -
Dubbo实现源码分析
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。 其核心部分是提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。转载 2017-08-19 21:48:50 · 12427 阅读 · 0 评论 -
dubbo源码分析1 之 架构原理探索
在之前的文章中介绍了Dubbo的出现背景以及使用方式,下面我们通过源码的方式来分析一下Dubbo的架构。原创 2017-09-09 20:22:11 · 4321 阅读 · 2 评论 -
dubbo源码分析2 之 内核SPI实现
在之前的文章中我们分析了Java 中的SPI – Java 规范 SPI,其实它为了实现在模块装配的时候能不在程序里动态指明,这就需要一种服务发现机制。Java SPI就是提供这样的一个机制:为某个接口寻找服务实现的机制。有点类似IOC的思想,就是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要。原创 2017-09-09 20:40:57 · 2470 阅读 · 1 评论 -
dubbo源码分析3 之 动态编译
我们运行的Java代码,一般都是编译之后的字节码。Dubbo为了实现基于SPI思想的扩展特性,可以灵活的添加额外的功能。对于SPI接口需要能够动态生成,这样就需要在运行的时候去编译加载这个设配类的代码。原创 2017-09-10 23:04:24 · 1843 阅读 · 0 评论 -
dubbo源码分析4 之 与Spring 集成
Spring框架从2.0版本开始,提供了基于Schema风格的Spring XML格式用来定义bean的扩展机制。引入Schema-based XML是为了对Traditional的XML配置形式进行简化。通过Schema的定义,把一些原本需要通过几个bean的定义或者复杂的bean的组合定义的配置形式。原创 2017-09-20 23:42:52 · 1608 阅读 · 0 评论 -
dubbo源码分析5 之 SPI分析
如果大家看过之前的 dubbo 内核 SPI 实现 – 2.dubbo源码分析 之 内核SPI实现, 有可能还是一头雾水,下面我讲一下dubbo的具体应用。最典型的应用就是 Protocol 接口。Protocol 属于 dubbo 十层结构 中的远程调用层, 它封装了RPC调用。以Invocation 和 Result 为中心, 其它的扩展接口还包括 Invoker 和 Exporter。原创 2018-01-17 13:17:47 · 1223 阅读 · 0 评论 -
dubbo源码分析6 之 服务暴露概述
dubbo的服务模型是非常简单的,要么是服务提供方(Provider)提供服务,要么是服务消费方(Consumer)消费服务,从dubbo官网的系统架构图就可以看出来。 Provider与Consumer通过Registry来解耦合,这一点和Spring有点相似。在Spring中它的核心领域模型是Bean.我们通过配置bean,然后Spring容器获取到需要的对象。不需要关心对象的创建过程,...原创 2018-01-29 20:34:59 · 1533 阅读 · 0 评论 -
dubbo源码分析7 之 服务本地暴露
在上一篇文章我们分析了一下 dubbo 在服务暴露发生了哪些事,今天我们就来分析一下整个服务暴露中的本地暴露。(PS:其实我感觉本地暴露蛮鸡肋的)。本地暴露需要服务提供方与服务消费方在同一个 JVM。下面我们来写一个本地暴露使用的例子: 1) DemoService.javapublic interface DemoService { String sayHello(S原创 2018-02-01 00:23:09 · 3436 阅读 · 2 评论 -
dubbo源码分析8 之 服务远程暴露(上)
在上一篇文章我们讲解了一下 dubbo 服务暴露过程中的本地暴露。它只是一个开胃小菜,主要是为我们后面讲解远程暴露开个头。下面就来分析一下 dubbo 在远程暴露里面发生了哪些事。因为 dubbo 远程暴露里面的过程还是比较复杂的,所以我就分为三个文章来讲解 dubbo 的远程暴露:dubbo 远程暴露 – Netty 暴露服务dubbo 远程暴露 – Zookeeper 连接 dubb...原创 2018-03-06 23:45:17 · 1305 阅读 · 4 评论 -
dubbo源码分析9 之 服务远程暴露(中)
在上一篇文章我们讲解了一下 dubbo 远程服务暴露过程中通过 Netty 进行 Socket 服务暴露。使得远程客户端可以访问这个暴露的服务,这个只是解决了访问之前点到点的服务调用。对于分步式环境当中,越来越多的服务我们如何管理并且治理这些服务是一个问题。因此 dubbo 引入了注册中心这个概念,把服务暴露、服务调用的信息保存到注册中心上面。并且还可以订阅注册中心,实现服务自动发现。因为 dub...原创 2018-03-27 23:31:37 · 1100 阅读 · 0 评论 -
dubbo源码分析10 之 服务远程暴露(下)
在前面的文章我们分析了一下 dubbo 远程服务暴露过程中通过 Netty 进行 Socket 服务暴露。使得远程客户端可以访问这个暴露的服务,这个只是解决了访问之前点到点的服务调用。对于分步式环境当中,越来越多的服务我们如何管理并且治理这些服务是一个问题。因此 dubbo 引入了注册中心这个概念,把服务暴露、服务调用的信息保存到注册中心上面。并且还可以订阅注册中心,实现服务自动发现。因为 dub...原创 2018-03-28 20:51:37 · 978 阅读 · 0 评论 -
dubbo源码分析11 之 服务引用
在使用 dubbo 的时候,我们对于远程服务调用是无感知的。当需要调用远程服务的时候我们只需要进行以下配置,就可以像本地调用的方式调用远程服务:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...原创 2018-04-01 23:20:52 · 885 阅读 · 0 评论 -
dubbo源码分析12 之 Listener & Filter
Dubbo 是阿里巴巴开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输入与输出功能。作为一个优秀的框架,至少应该包含以下几个特点:完善的文档 活跃的社区良好的扩展性今天主要讨论的主题就是 dubbo 中良好的扩展性。 dubbo 的扩展点加载是从 JDK 标准的 SPI (Service Provider Interface) 扩展点发现加强而来。...原创 2018-04-13 23:35:33 · 978 阅读 · 0 评论 -
dubbo源码分析13 之 集群容错 Invoke
在集中式环境中服务的机器台只有一台,这样对于服务不仅存在服务单点故障问题而且还存在流量问题。为了解决这个问题,就引入的分布式与集群概念。 分布式:一个业务分拆多个子业务,部署在不同的服务器上 集群:同一个业务,部署在多个服务器上当请求来临时,如何从多个服务器中,选择一个有效、合适的服务器,这个集群所需要面对一问题。所以在集群里面就引申出负载均衡(LoadBalance),高可用...原创 2018-04-17 22:32:34 · 784 阅读 · 0 评论 -
dubbo源码分析14 -- 集群容错之Directory
在集中式环境中服务的机器台只有一台,这样对于服务不仅存在服务单点故障问题而且还存在流量问题。为了解决这个问题,就引入的分布式与集群概念。 分布式:一个业务分拆多个子业务,部署在不同的服务器上 集群:同一个业务,部署在多个服务器上1、 dubbo 服务治理当请求来临时,如何从多个服务器中,选择一个有效、合适的服务器,这个集群所需要面对一问题。所以在集群里面就引申出负载均衡...原创 2018-05-17 23:50:41 · 552 阅读 · 0 评论 -
dubbo源码分析15 -- 集群容错之Route
在集中式环境中服务的机器台只有一台,这样对于服务不仅存在服务单点故障问题而且还存在流量问题。为了解决这个问题,就引入的分布式与集群概念。 分布式:一个业务分拆多个子业务,部署在不同的服务器上 集群:同一个业务,部署在多个服务器上1、 dubbo 服务治理当请求来临时,如何从多个服务器中,选择一个有效、合适的服务器,这个集群所需要面对一问题。所以在集群里面就引申出负载均衡...原创 2018-05-19 11:55:29 · 775 阅读 · 0 评论 -
dubbo源码分析16 -- 集群容错之LoadBalance
在集中式环境中服务的机器台只有一台,这样对于服务不仅存在服务单点故障问题而且还存在流量问题。为了解决这个问题,就引入的分布式与集群概念。 分布式:一个业务分拆多个子业务,部署在不同的服务器上 集群:同一个业务,部署在多个服务器上1、 dubbo 服务治理当请求来临时,如何从多个服务器中,选择一个有效、合适的服务器,这个集群所需要面对一问题。所以在集群里面就引申出负载均衡...原创 2018-05-21 22:30:29 · 634 阅读 · 1 评论 -
dubbo源码分析17 -- 集群容错总结
在集中式环境中服务的机器台只有一台,这样对于服务不仅存在服务单点故障问题而且还存在流量问题。为了解决这个问题,就引入的分布式与集群概念。 分布式:一个业务分拆多个子业务,部署在不同的服务器上 集群:同一个业务,部署在多个服务器上当请求来临时,如何从多个服务器中,选择一个有效、合适的服务器,这个集群所需要面对一问题。所以在集群里面就引申出负载均衡(LoadBalance),高可用...原创 2018-05-31 19:50:33 · 560 阅读 · 0 评论 -
dubbo源码分析18 -- 服务监控
在分布式服务当中监控服务的各项指标至关重要,而 dubbo 也提供了一个简单的监控中心(Simple Monito)。Simple Monitor挂掉不会影响到Consumer和Provider之间的调用,所以用于生产环境不会有风险。 并且配置好了之后可以结合 admin 管理后台使用,可以清晰的看到服务的访问记录、成功次数、失败次数等….. Simple Monitor 采用磁盘存储统计信息...原创 2018-06-24 16:57:48 · 1233 阅读 · 0 评论 -
dubbo源码分析19 -- 服务治理
在之前的 dubbo 源码分析中我们分析了 dubbo 的服务暴露。provider 把需要暴露的服务地址信息注册到注册中心(比如:zookeeper),然后把通过 java nio 框架 netty 以 socket 的方式把远程服务暴露给 consumer 调用,并且订阅注解中心,当注册中心发生变化的时候 Inovke 调用就会改变。当 consumer 需要引用服务的时候通过 javassi...原创 2018-06-24 16:58:42 · 890 阅读 · 0 评论 -
dubbo源码分析20 -- 远程调用概述
在之前的文章我们分析了 dubbo 的服务治理,也就是在 consumer 端在进行服务引用的时候。consumer 首先会根据配置 Protocol(协议) 创建 Invoke 调用对象,它代表一个可执行体,可向它发起 invoke 调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。然后再使用 ProxyFactory 接口创建代理对象,进行远程调用。创建的代理...原创 2018-06-24 16:59:22 · 705 阅读 · 1 评论 -
dubbo源码分析21 -- 远程通信 netty
dubbo 做为 RPC 框架,需要进行跨 JVM 通信,要保证高性、稳定的进行远程通信。dubbo 底层通信选择了 netty 这个 nio 框架做为默认的网络通信框架并且通过自定义协议进行通信。dubbo 支持以下网络通信框架:Netty(默认)MinaGrizzly1、 netty 简介在网络编码领悟,Netty 是 Java 的卓越框架。它封装了 Java NIO ...原创 2018-06-24 16:59:50 · 964 阅读 · 1 评论 -
dubbo源码分析22 -- consumer 发送与接收原理
在前面的文章中,我们分析了 dubbo 从 provider 进行服务暴露,然后把服务信息注册到注册中心上面解耦 consumer 与 provider 的调用。consumer 通过 javassist 创建代理对象引用远程服务。当通过代理对象调用远程服务的时候,讲到进行真正调用的时候 dubbo 抽象出集群容错(Cluster、Directory、Router、LoadBalance)从服务多...原创 2018-06-26 22:04:36 · 971 阅读 · 1 评论 -
dubbo源码分析23 -- provider 接收与发送原理
在前面一篇博客中分享了 dubbo 在网络通信当中的 consumer 的发送以及接收原理。通过集群容错最终选择一个合适的 Invoke 通过 netty 直联调用 provider 的服务。众所周知, netty 是基于 Java Nio 的 Reactor 模型的异步网络通信框架,所以 dubbo 在 consumer 端把异步变成了同步。大概总结了 consumer 的发送与接收原理,下...原创 2018-06-29 01:09:11 · 2275 阅读 · 0 评论 -
dubbo源码分析24 -- 调用核心 Invoke
任何框架或组件,总会有核心领域模型,比如:Spring 的 Bean,Struts 的 Action,Napoli 的 Queue 。对于 Dubbo 来说它的核心就是 Service(服务接口),而 Service 不管是 provider 暴露服务,还是 consumer 引用服务。它都是一个非常重要的概念,我们来看一下 Dubbo 的核心领域模型:Protocol 是服务域,它是 In...原创 2018-06-29 01:09:42 · 2984 阅读 · 3 评论 -
dubbo源码分析25 -- 序列化与反序列化
序列化:把对象转换为字节序列的过程称为对象的序列化。 反序列化:把字节序列恢复为对象的过程称为对象的反序列化。Dubbo是 Alibaba 开源的分布式服务框架远程调用框架,现在已捐赠给 apache 软件基本会。因此 dubbo 调用是需要跨 JVM,需要进行网络通信。这就需要使用到序列化与反序列化。在 dubbo 中定义了 ObjectInput、ObjectOutput 与...原创 2018-07-02 19:52:30 · 6065 阅读 · 0 评论 -
dubbo源码分析26 -- 网络编解码
在网络传输中只将数据看作是原始的字节序列。然则,我们的应用程序需要把这些字节序列组成有意义的信息。将应用程序的数据转换为网络格式,以及将网络格式转换为应用程序的数据的组件分别叫作编码器和解码器,同时具有这两种功能的单一组件叫作编解码器。1、粘包 & 拆包基于前面的分析我们知道 dubbo 的远程调用是基于 Netty 这个 Nio 框架进行基于 TCP/IP 的 Socket ...原创 2018-07-13 19:58:18 · 828 阅读 · 0 评论