从零开始的高并发(九)--- 初识dubbo

前言

前情概要

上一篇咱们简单实现了一个本身的RPC框架,主要依托咱们上两篇所提到的这个RPC的流程分析java

1.客户端处理过程当中调用client stub(就像调用本地方法同样),传入参数

2.Client stub将参数编组为消息,而后经过系统调用向服务端发送消息

3.客户端本地操做系统将消息从客户端机器发送到服务端机器

4.服务端操做系统将接收到的数据包传递给client stub

5.server stub解组消息为参数

6.server stub再调用服务端的过程,过程执行结果以反方向的相同步骤响应给客户端
复制代码

stub:分布式计算中的存根是一段代码,它转换在远程过程调用期间Client和server之间传递的参数算法

咱们还经过发现者的引入,对协议支持和网络层的提取进行了一些小的优化,结构以下:apache

PS:紫色表明客户端代理部分,浅绿色属于服务发现,浅蓝色属于协议部分编程

各个小块的代码基本已经给出,相信即便是本身须要跑一下的话也无需进行过多的代码填充工做了服务器

以往连接

从零开始的高并发(一)--- Zookeeper的基础概念网络

从零开始的高并发(二)--- Zookeeper实现分布式锁架构

从零开始的高并发(三)--- Zookeeper集群的搭建和leader选举并发

从零开始的高并发(四)--- Zookeeper的分布式队列负载均衡

从零开始的高并发(五)--- Zookeeper的配置中心应用框架

从零开始的高并发(六)--- Zookeeper的Master选举及官网小览

从零开始的高并发(七)--- RPC的介绍,协议及框架

从零开始的高并发(八)--- RPC框架的简单实现

dubbo概述

① dubbo的简介

和zookeeper相似,网址只须要记住,首先这个项目叫dubbo,而后它是属于apache下的,而后开源是非营利性组织,也就是org,因此网址就是:

dubbo.apache.org/

可能小伙伴们要是留意这张图片的话,会发现一开始的时候,它的这张图片右上方是带有Incubating这个英文的,有这个英文说明当时的dubbo仍是一个孵化项目,并且由于它是中国人开发的,因此对于中文的翻译支持很是全面,因此对于咱们来讲学起来应该算是最便利的

Apache Dubbo是一款高性能,轻量级的开源java RPC框架,提供了3大核心能力,面向接口的远程方法调用,智能容错和负载均衡,服务自动注册及发现。

这样一对比,好像咱们上一篇写出来的小样就弱爆了哈哈哈

② dubbo能作什么

③ dubbo的架构

Provider:服务提供者,咱们的service,实际执行业务逻辑的服务层
Consumer:服务消费者,对service进行调用,不关注service的具体实现的应用层
Register:注册中心,存储Provider,Consumer信息的中介
Monitor:监控中心,dubbo负责收集服务调用信息的监控中心
复制代码

若是事先有了解过应该在官网上应该看过了,init是初始化,async是异步,sync是同步。咱们不难发现全部的RPC框架都脱离不了三个基本要素,就是服务消费者和服务提供者,还有把这些角色们组合起来的网络,缺乏一个都谈不上是一个完整的RPC了。

第一步就是咱们的服务提供者经过初始化动做,把它的服务信息暴露给注册中心,好比端口号,协议,版本,参数,接口,方法或返回值等基本信息,注册中心register就能够视为一个媒人,服务提供者看做相亲对象女方,这些对象要把它们的基本信息给到媒人以便让服务消费者(男方)认识,此时咱们男方是在这个中介所下了单的,让中介所帮忙留意他喜欢的女生,符合要求就通知他,因此subscribe订阅,就是男方让媒人帮忙留意合适的女方的动做

但是姑娘的状态信息不是一成不变的,因此男方也须要异步得到女方的动态,而这个动态也是媒人Registry来notify告知的,那这个机制在这里也是不难猜到,是使用zookeeper的watch机制来实现的,invoke就相似于他们交往沟通的过程了

Monitor就相似于国家的315消费者协议,此次的服务是个什么效果,来作个调研

④ dubbo的调用过程

1.服务容器负责启动,加载,运行服务提供者

2.服务提供者在启动时,向注册中心注册本身提供的服务

3.服务消费者在启动时,向注册中心订阅本身所需的服务

4.注册中心返回服务提供者地址列表给消费者,若是有变动,注册中心将基于长链接推送变动数据给消费者

5.服务消费者从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,若是调用失败,再选择另外一台调用

6.服务消费者和服务提供者在内存中累计调用次数和调用时间,定时发送一次统计数据到监控中心

⑤ dubbo的架构特色

dubbo分别具备如下特色,连通性,健壮性,伸缩性和升级性

连通性:刚刚也提到异步操做主要是两个,一个是订阅服务地址的变化,另外一个是监控中心的执行是异步的,这说明了一点,在咱们程序运行过程当中,注册中心或者监控中心挂掉,是不会对咱们的程序流程形成影响的,就比如男方已经获取到女方的电话了,这样男方就天然能够和女方取得联系,而无所谓女方忽然变胖一两斤或者感冒发烧。而监控中心挂掉只会影响咱们的一些采集数据,也不会对程序形成影响

健壮性:这个在以前的zookeeper中已经无数次地被提到了,节点挂掉不影响集群其余节点的工做

升级性:就是一个服务治理方面的想法,达到自动增长服务器去消费忽然增加的请求数的一个功能

⑥ dubbo的依赖

必须:JDK1.6+,理论上dubbo能够只依赖JDK,不依赖其余第三方库运行,须要配置JDK相关实现策略

缺省:

⑦ dubbo的使用方式

服务提供端:
    1.独立的服务(普通的java程序形式)
    2.集成在应用中(在应用中增长远程服务能力)
消费客户端
    1.在应用中调用远程服务
    2.在服务1提供者中调用远程服务
复制代码

⑧ dubbo的三种配置方式

1.使用dubbo注解

使用相对简单,不过有侵入性,须要实现类中依赖dubbo提供的注解

2.集成Spring XML(使用较多)

使用相对麻烦,能够无侵入,方便之后改用其余RPC框架

3.使用原生API的方式

编程过程十分麻烦,通常仅用于测试,开放API的场景

⑨ dubbo的使用步骤

1.引入dubbo相关依赖

2.配置dubbo框架(也就是 ⑧ 提到的3个方式)

3.服务的开发与配置

4.启动和调用

<dependency>
  <groupId>io.netty</groupId>
  <artifactId>netty-all</artifactId>
  <version>4.1.32.Final</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.6.6</version>
</dependency>
复制代码

finally

也是有小伙伴反映我贴代码贴的有点太多,也是由于此次的小样比较无关紧要吧,因此就省事了。篇幅的问题你们诟病已久,更加详细的内容也是留下一篇再扯扯吧(不少代码···)

下一篇:dubbo的核心功能详解与配置

相关文章
相关标签/搜索