
dubbo专题
Jack爱258
坚持分享工作生活中的技术点滴,帮助需要的同学~~
展开
-
dubbo入门
一.什么是dubbo? 随着互联网的不断发展,网站的应用规模越来越大,常规的垂直架构已经无法应对,尤其是类似电商的项目,所以分布式架构和流动计算架构已经势在必行。① 单一应用架构 当网站很小时,只需要一个项目就可以将所有功能部署到一起,减少部署成本。 此时用于简化增删改查工作量的数据访问框架(ORM)是关键。② 垂直应用架构 当访问量增大时,单一应用增...原创 2019-01-04 22:00:40 · 250 阅读 · 0 评论 -
dubbo源码分析集群容错总结-17
在集中式环境中服务的机器台只有一台,这样对于服务不仅存在服务单点故障问题而且还存在流量问题。为了解决这个问题,就引入的分布式与集群概念。分布式:一个业务分拆多个子业务,部署在不同的服务器上集群:同一个业务,部署在多个服务器上当请求来临时,如何从多个服务器中,选择一个有效、合适的服务器,这个集群所需要面对一问题。所以在集群里面就引申出负载均衡(LoadBalance),高可用(HA),路...原创 2019-01-28 21:55:54 · 249 阅读 · 0 评论 -
dubbo的使用和原理剖析
Dubbo是什么?Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。Dubbo[]是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。其核心部分包含:远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列...原创 2019-01-23 13:44:43 · 432 阅读 · 0 评论 -
Dubbo源码分析总体思路
1.Dubbo概述Dubbo是阿里巴巴开源出来的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及作为SOA服务治理的方案。它的核心功能包括:#remoting:远程通讯基础,提供对多种NIO框架抽象封装,包括“同步转异步”和“请求-响应”模式的信息交换方式。#Cluster:服务框架核心,提供基于接口方法的远程过程调用,包括多协议支持,并提供软负...原创 2019-01-23 13:54:29 · 311 阅读 · 0 评论 -
dubbo源码分析之基于SPI的强大扩展
Dubbo采用微内核+插件体系,使得设计优雅,扩展性强。那所谓的微内核+插件体系是如何实现的呢!大家是否熟悉spi(service providerinterface)机制,即我们定义了服务接口标准,让厂商去实现(如果不了解spi的请谷歌百度下), jdk通过ServiceLoader类实现spi机制的服务查找功能1、为什么不使用JDK SPI在dubbo中它实现了一套自己的SPI机制。J...原创 2019-01-23 14:15:01 · 303 阅读 · 0 评论 -
dubbo源码分析之javassist动态编译-3
我们运行的Java代码,一般都是编译之后的字节码。Dubbo为了实现基于SPI思想的扩展特性,可以灵活的添加额外的功能。对于SPI接口需要能够动态生成,这样就需要在运行的时候去编译加载这个设配类的代码。下面我们就是来了解下Dubbo的动态编译。我们首先来看一下Compile的类图。Compile接口定义:@SPI("javassist")public interface Compil...原创 2019-01-23 14:21:50 · 613 阅读 · 0 评论 -
dubbo源码分析之与Spring 集成-4
在dubbo中也通过这种自定义Schema的形式简化它的使用与配置。DubboNamespaceHandler.javapublic class DubboNamespaceHandler extends NamespaceHandlerSupport { static { Version.checkDuplicate(DubboNamespaceHandl...原创 2019-01-23 15:08:01 · 232 阅读 · 0 评论 -
dubbo源码分析 之 服务暴露概述-6
dubbo的服务模型是非常简单的,要么是服务提供方(Provider)提供服务,要么是服务消费方(Consumer)消费服务,从dubbo官网的系统架构图就可以看出来。Provider与Consumer通过Registry来解耦合,这一点和Spring有点相似。在Spring中它的核心领域模型是Bean.我们通过配置bean,然后Spring容器获取到需要的对象。不需要关心对象的创建过程...原创 2019-01-23 15:52:04 · 237 阅读 · 0 评论 -
dubbo源码分析之服务本地暴露-7
在上一篇文章我们分析了一下 dubbo 在服务暴露发生了哪些事,今天我们就来分析一下整个服务暴露中的本地暴露。其实我感觉本地暴露蛮鸡肋的本地暴露需要服务提供方与服务消费方在同一个 JVM。下面我们来写一个本地暴露使用的例子:1) DemoService.javapublic interface DemoService { String sayHello(String n...原创 2019-01-23 16:09:31 · 309 阅读 · 0 评论 -
dubbo源码分析 之 服务远程暴露(中)-9
在上一篇文章我们讲解了一下 dubbo 远程服务暴露过程中通过 Netty 进行 Socket 服务暴露。使得远程客户端可以访问这个暴露的服务,这个只是解决了访问之前点到点的服务调用。对于分步式环境当中,越来越多的服务我们如何管理并且治理这些服务是一个问题。因此 dubbo 引入了注册中心这个概念,把服务暴露、服务调用的信息保存到注册中心上面。并且还可以订阅注册中心,实现服务自动发现。因为 dub...原创 2019-01-23 16:32:44 · 268 阅读 · 0 评论 -
dubbo源码分析 之 服务远程暴露(下)-10
在前面的文章我们分析了一下 dubbo 远程服务暴露过程中通过 Netty 进行 Socket 服务暴露。使得远程客户端可以访问这个暴露的服务,这个只是解决了访问之前点到点的服务调用。对于分步式环境当中,越来越多的服务我们如何管理并且治理这些服务是一个问题。因此 dubbo 引入了注册中心这个概念,把服务暴露、服务调用的信息保存到注册中心上面。并且还可以订阅注册中心,实现服务自动发现。因为 dub...原创 2019-01-23 16:45:33 · 295 阅读 · 0 评论 -
dubbo源码分析之服务监控monitor-18
在分布式服务当中监控服务的各项指标至关重要,而 dubbo 也提供了一个简单的监控中心(Simple Monito)。Simple Monitor挂掉不会影响到Consumer和Provider之间的调用,所以用于生产环境不会有风险。 并且配置好了之后可以结合 admin 管理后台使用,可以清晰的看到服务的访问记录、成功次数、失败次数等…..Simple Monitor 采用磁盘存储统计信息,...原创 2019-01-29 16:18:48 · 911 阅读 · 0 评论 -
dubbo源码分析之负载均衡LoadBalance-16
在集中式环境中服务的机器台只有一台,这样对于服务不仅存在服务单点故障问题而且还存在流量问题。为了解决这个问题,就引入的分布式与集群概念。分布式:一个业务分拆多个子业务,部署在不同的服务器上集群:同一个业务,部署在多个服务器上1、 dubbo 服务治理当请求来临时,如何从多个服务器中,选择一个有效、合适的服务器,这个集群所需要面对一问题。所以在集群里面就引申出负载均衡(LoadBal...原创 2019-01-28 21:45:43 · 273 阅读 · 0 评论 -
dubbo源码分析路由规则Route-15
在集中式环境中服务的机器台只有一台,这样对于服务不仅存在服务单点故障问题而且还存在流量问题。为了解决这个问题,就引入的分布式与集群概念。分布式:一个业务分拆多个子业务,部署在不同的服务器上集群:同一个业务,部署在多个服务器上1、 dubbo 服务治理当请求来临时,如何从多个服务器中,选择一个有效、合适的服务器,这个集群所需要面对一问题。所以在集群里面就引申出负载均衡(LoadBal...原创 2019-01-28 21:37:21 · 843 阅读 · 0 评论 -
dubbo值得收藏的使用笔记,干货
Dubbo是什么Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。简单说呢,Dubbo用起来就和EJ...原创 2019-01-04 22:18:08 · 342 阅读 · 0 评论 -
dubbo源码分析之invoke概述-20
在之前的文章我们分析了 dubbo 的服务治理,也就是在 consumer 端在进行服务引用的时候。consumer 首先会根据配置 Protocol(协议) 创建 Invoke 调用对象,它代表一个可执行体,可向它发起 invoke 调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。然后再使用 ProxyFactory 接口创建代理对象,进行远程调用。创建的代理对象...原创 2019-02-01 16:46:27 · 522 阅读 · 0 评论 -
dubbo源码分析之RPC协议之netty-21
dubbo 做为 RPC 框架,需要进行跨 JVM 通信,要保证高性、稳定的进行远程通信。dubbo 底层通信选择了 netty 这个 nio 框架做为默认的网络通信框架并且通过自定义协议进行通信。dubbo 支持以下网络通信框架:Netty(默认) Mina Grizzly1、 netty 简介在网络编码领悟,Netty 是 Java 的卓越框架。它封装了 Java NIO 操作的...原创 2019-02-01 16:56:20 · 682 阅读 · 0 评论 -
dubbo源码分析之consumer端调用原理-22
在前面的文章中,我们分析了 dubbo 从 provider 进行服务暴露,然后把服务信息注册到注册中心上面解耦 consumer 与 provider 的调用。consumer 通过 javassist 创建代理对象引用远程服务。当通过代理对象调用远程服务的时候,讲到进行真正调用的时候 dubbo 抽象出集群容错(Cluster、Directory、Router、LoadBalance)从服务多...原创 2019-02-01 17:14:30 · 713 阅读 · 0 评论 -
dubbo源码分析之服务提供方接收请求provider-23
在前面一篇博客中分享了 dubbo 在网络通信当中的 consumer 的发送以及接收原理。通过集群容错最终选择一个合适的 Invoke 通过 netty 直联调用 provider 的服务。众所周知, netty 是基于 Java Nio 的 Reactor 模型的异步网络通信框架,所以 dubbo 在 consumer 端把异步变成了同步。大概总结了 consumer 的发送与接收原理,下...原创 2019-02-02 16:53:09 · 372 阅读 · 0 评论 -
dubbo源码分析之各种RPC协议对应的Invoke-24
任何框架或组件,总会有核心领域模型,比如:Spring 的 Bean,Struts 的 Action,Napoli 的 Queue 。对于 Dubbo 来说它的核心就是 Service(服务接口),而 Service 不管是 provider 暴露服务,还是 consumer 引用服务。它都是一个非常重要的概念,我们来看一下 Dubbo 的核心领域模型:Protocol 是服务域,它是 Inv...原创 2019-02-02 16:59:57 · 612 阅读 · 0 评论 -
dubbo源码分析之序列化与反序列化-25
序列化:把对象转换为字节序列的过程称为对象的序列化。反序列化:把字节序列恢复为对象的过程称为对象的反序列化。Dubbo是 Alibaba 开源的分布式服务框架远程调用框架,现在已捐赠给 apache 软件基本会。因此 dubbo 调用是需要跨 JVM,需要进行网络通信。这就需要使用到序列化与反序列化。在 dubbo 中定义了 ObjectInput、ObjectOutput 与 Seria...原创 2019-02-02 17:06:28 · 440 阅读 · 0 评论 -
dubbo源码分析之netty编码解码-26
在网络传输中只将数据看作是原始的字节序列。然则,我们的应用程序需要把这些字节序列组成有意义的信息。将应用程序的数据转换为网络格式,以及将网络格式转换为应用程序的数据的组件分别叫作编码器和解码器,同时具有这两种功能的单一组件叫作编解码器。1、粘包 & 拆包基于前面的分析我们知道 dubbo 的远程调用是基于 Netty 这个 Nio 框架进行基于 TCP/IP 的 Socket 通信...原创 2019-02-02 17:15:30 · 546 阅读 · 1 评论 -
dubbo源码分析之服务调用-11
在使用 dubbo 的时候,我们对于远程服务调用是无感知的。当需要调用远程服务的时候我们只需要进行以下配置,就可以像本地调用的方式调用远程服务:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="...原创 2019-01-28 20:50:33 · 257 阅读 · 0 评论 -
dubbo源码分析之过滤器Filter-12
Dubbo 是阿里巴巴开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输入与输出功能。作为一个优秀的框架,至少应该包含以下几个特点:完善的文档活跃的社区良好的扩展性今天主要讨论的主题就是 dubbo 中良好的扩展性。 dubbo 的扩展点加载是从 JDK 标准的 SPI (Service Provider Interface) 扩展点发现加强而来。JDK 标...原创 2019-01-28 21:06:27 · 618 阅读 · 0 评论 -
dubbo源码分析之集群容错failover-13
在集中式环境中服务的机器台只有一台,这样对于服务不仅存在服务单点故障问题而且还存在流量问题。为了解决这个问题,就引入的分布式与集群概念。分布式:一个业务分拆多个子业务,部署在不同的服务器上集群:同一个业务,部署在多个服务器上1、 dubbo 服务治理当请求来临时,如何从多个服务器中,选择一个有效、合适的服务器,这个集群所需要面对一问题。所以在集群里面就引申出负载均衡(LoadBal...原创 2019-01-28 21:17:50 · 327 阅读 · 1 评论 -
dubbo源码分析之Directory-14
在集中式环境中服务的机器台只有一台,这样对于服务不仅存在服务单点故障问题而且还存在流量问题。为了解决这个问题,就引入的分布式与集群概念。分布式:一个业务分拆多个子业务,部署在不同的服务器上集群:同一个业务,部署在多个服务器上1、 dubbo 服务治理当请求来临时,如何从多个服务器中,选择一个有效、合适的服务器,这个集群所需要面对一问题。所以在集群里面就引申出负载均衡(LoadBal...原创 2019-01-28 21:26:13 · 256 阅读 · 0 评论 -
dubbo源码分析之运行时服务治理-19
在之前的 dubbo 源码分析中我们分析了 dubbo 的服务暴露。provider 把需要暴露的服务地址信息注册到注册中心(比如:zookeeper),然后把通过 java nio 框架 netty 以 socket 的方式把远程服务暴露给 consumer 调用,并且订阅注解中心,当注册中心发生变化的时候 Inovke 调用就会改变。当 consumer 需要引用服务的时候通过 javassi...原创 2019-01-29 16:42:44 · 200 阅读 · 0 评论