关键词:
文档背景
在很多后台服务的架构中,采用了RPC+微服务的架构思想。
RPC采用dubbo框架作为治理框架,对外接口采用RESTful和GraphQL接口方式
所以学习一下dubbo是很有必要的
1、什么是Dubbo
官网:https://dubbo.apache.org/zh/docs/
背景介绍
Apache Dubbo™ (incubating)是一款高性能Java RPC框架
duboo是由阿里团队开发的RPC框架,由Apache孵化
早期介绍
Dubbo是一个分布式框架,最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦。
从服务模型的角度,Dubbo采用的是一种非常简单的模型。1.提供服务方 2.消费方 3.第三方(注册中心、协议支持、服务监控)
1.1、什么是RPC
RPC(Remote Procedure Call Protocol)——远程过程调用协议,是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。它假定某些传输协议的存在,如TCP或UDP,以便为通信程序之间携带信息数据。通过它可以使函数调用模式网络化。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。
2、Dubbo服务治理
在大规模服务化之前,应用可能只是通过 RMI 或 Hessian 等工具。
简单的暴露和引用远程服务,通过配置服务的URL地址进行调用,通过 F5 等硬件进行负载均衡。
弊端:
当服务越来越多时,服务 URL 配置管理变得非常困难,F5 硬件负载均衡器的单点压力也越来越大。
当进一步发展,服务间依赖关系变得复杂,无法描述架构关系。
服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?
- Provider 暴露服务的提供方
- Concumer 调用远程服务的服务消费方
- Registry 服务注册与发现的注册中心
- Monitor 统计服务的调用次数和调用时间的监控中心
- Container 服务运行容器
调用关系
服务容器负责启动,加载,运行服务提供者。
服务提供者在启动时,向注册中心注册自己提供的服务。
服务消费者在启动时,向注册中心订阅自己所需的服务。
注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
Dubbo架构具有一下几个特点:分别是连通性、健壮性、伸缩性、以及向未来架构的升级性
3、注册中心
注册中心有很多种,而Dubbo也支持很多注册中心,一般推荐使用Zookeeper。注册中心有点类似与SpringCloud中常用的微服务治理工具 Eureka。
3.1、为什么使用Zookeeper
Zookeeper 是 Apacahe Hadoop 的子项目,是一个树型的目录服务.
支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用。
流程说明:
- 服务提供者启动时: 向 dubbo/com.foo.BarService/providers 目录下写入自己的 URL 地址
- 服务消费者启动时: 订阅 /dubbo/com.foo.BarService/providers 目录下的提供者 URL 地址。并向
/dubbo/com.foo.BarService/consumers 目录下写入自己的 URL 地址 - 监控中心启动时: 订阅 /dubbo/com.foo.BarService 目录下的所有提供者和消费者 URL 地址。
支持以下功能:
- 当提供者出现断电等异常停机时,注册中心能自动删除提供者信息
- 当注册中心重启时,能自动恢复注册数据,以及订阅请求
- 当会话过期时,能自动恢复注册数据,以及订阅请求
- 当设置 <dubbo:registrycheck=“false” > 时,记录失败注册和订阅请求,后台定时重试
- 可通过 <dubbo:registryusername=“admin” password=“1234” /> 设置 zookeeper 登录信息
- 可通过 <dubbo:registrygroup=“dubbo”/ > 设置 zookeeper 的根节点,不设置将使用无根树
- 支持 * 号通配符 <dubbo:referencegroup=" * " version=" * "/ >,可订阅服务的所有分组和所有版本的提供者
4、Dubbo Admin
Dubbo提供了可视化的界面管理工具,方便我们对服务进行管理,它就是Dubbo Admin,
代码地址:https://github.com/apache/incubator-dubbo-ops
部署安装
第一步,下载并解压
git clone https://github.com/apache/incubator-dubbo-ops.git
第二步,修改配置文件
## 这里就是我们配置利用Docker安装好的 Zookeeper地址
在 dubbo-admin-backend/src/main/resources/application.properties 中指定注册中心地址。
第三步,使用maven进行构建项目(都要在Maven环境下执行):
#构建 打包
mvn clean package
#通过Maven插件启动项目
mvn --projects dubbo-admin-backend spring-boot:run
最后,访问系统
打开浏览器:输入对应地址就行
该工具可以查看 搜索服务信息,可以查看服务提供者和服务消费者的详细信息
5、服务的负载均衡
在集群负载均衡时,Dubbo 提供了多种均衡策略,默认为 random 随机调用。
负载均衡的策略
Random LoadBalance
- 随机,按权重设置随机概率
- 在一个界面上碰撞的概率高,但调用越大分布越均匀,而且概率使用权重也比较均匀,有利于动态调整提供者权重。
RoundRobin LoadBalance
- 轮询,按公约后的权重设置轮询比率。
- 存在慢的提供者累积请求的问题,比如:第二台机器很慢,但没挂,当请求调到第二台就卡在那,久而久之,所有请求都会卡在第二台服务器上。
6、Dubbo://协议
dubbo提供9种协议,分别是
dubbo://
rmi://
hessian://
http://
webservice://
thrift://
memcached://
redis://
rest://
Dubbo 缺省协议采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远
大于服务提供者机器数的情况。
反之,Dubbo 缺省协议不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。
- Transporter (传输): mina, netty, grizzy
- Serialization(序列化): dubbo, hessian2, java, json
- Dispatcher(分发调度): all, direct, message, execution, connection
- ThreadPool(线程池): fixed, cached
7、代码资源
写的一个消费者 RPC调用远端服务API,开启提供者多实例,测试 dubbo的随机调用和轮询机制。
核心测试类如下
配置好就可以启动了
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserServiceTest
@Reference(version = "1.0.0", loadbalance = "roundrobin")
private UserService userService;
@Test
public void testQueryAll()
for (int i = 0; i < 100; i++)
System.out.println("开始调用远程服务 >>>>>" + i);
List<User> users = this.userService.queryAll();
for (User user : users)
System.out.println(user);
try
Thread.sleep(1000);
catch (InterruptedException e)
e.printStackTrace();
当出现如下说明dubbo的服务端启动成功并且成功将自己注册进了zookeeper
dubbo入门系列之快速部署一个微服务应用(代码片段)
本文将基于DubboSamples示例演示如何快速搭建并部署一个微服务应用。背景Dubbo作为一款微服务框架,最重要的是向用户提供跨进程的RPC远程调用能力。如上图所示,Dubbo的服务消费者(Consumer)通过一系列的工作将请求发送给服务... 查看详情
dubbo--dubbo快速入门代码编写(代码片段)
文章目录1.Dubbo快速入门代码编写1.1需求分析1.2项目和模块创建1.3导入相关依赖1.4编写提供服务的接口1.5编写调用服务的程序1.6安装dubbo-service(被依赖的模块需要安装)1.7配置Tomcat1.8启动测试1.9说明1.10改造dubbo-service:... 查看详情
dubbo远程调用(rpc)-->快速入门+管理控制台+整合springboot开发(代码片段)
文章目录一、ApacheDubbo概述1.Dubbo简介2.Dubbo架构二、Dubbo快速入门1.点对点直连【1】服务提供者-service项目【2】服务消费者-web项目2.zookeeper注册中心【1】服务提供者【2】服务消费者三、Dubbo管理控制台1.jar包部署管理平台2.war包部... 查看详情
springboot+dubbo+zookeeper快速入门案例(代码片段)
项目目录结构:第一步:创建一个SpringBoot项目,这里选择Maven项目或者SpringInitializer都可以,这里创建了一个Maven项目(SpringBoot-Dubbo),pom.xml文件如下:<?xmlversion="1.0"enco 查看详情
springboot+dubbo+zookeeper快速入门案例(代码片段)
项目目录结构:第一步:创建一个SpringBoot项目,这里选择Maven项目或者SpringInitializer都可以,这里创建了一个Maven项目(SpringBoot-Dubbo),pom.xml文件如下:<?xmlversion="1.0"enco 查看详情
springboot+dubbo+zookeeper快速入门案例(代码片段)
项目目录结构:第一步:创建一个SpringBoot项目,这里选择Maven项目或者SpringInitializer都可以,这里创建了一个Maven项目(SpringBoot-Dubbo),pom.xml文件如下:<?xmlversion="1.0"enco 查看详情
dubbo快速入门介绍使用(代码片段)
1、介绍Dubbo官方文档:https://dubbo.apache.org/zh目前Dubbo最新的是Dubbo3。Dubbo3格式的Provider地址不能被Dubbo2的Consumer识别到,反之Dubbo2的消费者也不能订阅到Dubbo3Provider。这里的架构和使用都是基于Dubbo2.7版本,Dubbo2(2.7... 查看详情
dubbo快速入门demo(代码片段)
参考文章 https://blog.csdn.net/abcwanglinyong/article/details/81906027该demo包含三个项目,分别是:服务提供端项目:provider服务消费端项目:consumer共用服务接口项目:api1、新建maven项目api注意将其pom.xml中的打包方式改为jar然后在com.dubb... 查看详情
dubbo快速开始与依赖(代码片段)
1、参考快速开始:http://dubbo.apache.org/en-us/docs/user/quick-start.html依赖:http://dubbo.apache.org/en-us/docs/user/dependencies.htmlDubbo官方文档提供了一个最简单的快速入门示例,但它存在一点问题。本文从无到有, 查看详情
springcloudalibaba系列dubbo基础入门篇(代码片段)
...二、Dubbo概述1.Dubbo概念2.Dubbo架构3.Dubbo运行流程三、dubbo快速入门1.Zookeeper安装(1)下载安装(2)配置启动2.Spring和SpringMVC整合-本地调用3.服务提供者4.服务消费者Dubbo-基础入门篇学习目标分布式系统中的相关概念D... 查看详情
企业级应用,如何实现服务化三(dubbo入门案例)(代码片段)
...性、升级性。下面先来实现一个入门级的demo,直观感受一下。1.案例说明通过一个简单的案例,演示dubbo入门使用。案例中只有服务 查看详情
dubbo专题(基础篇):dubbo介绍环境搭建与实践(代码片段)
前几天复习了Dubbo相关的技术点,趁热打铁记录一下,本篇博客属于Dubbo的入门基础篇,内容主要包括Dubbo概念,Dubbo特点,Dubbo基本工作原理,Dubbo环境搭建,DubboDemo实践,一起来学习下吧。Dubbo概念... 查看详情
简单聊一下vuex的基本使用(快速入门)(代码片段)
什么是Vuex?Vuex是专门为Vue.js应用开发的状态管理模式,采用集中式存储所有组件的状态,让组件之间可以通信用人话说就是:vuex就是专门用来管理vue的数据的,统一在一个文件中存储公共的数据Vuex中有个5个内容需要学习:state—存储... 查看详情
dubbo(代码片段)
...xff1f;dubbo官方中文文档dubbo-admin的下载安装dubbo+springboot快速入门1.使用zookeeper来作为注册中心2.搭建公共接口(API)模块3.搭建服务提供者(provider)4.搭建服务消费者(consumer& 查看详情
dubbo(代码片段)
...xff1f;dubbo官方中文文档dubbo-admin的下载安装dubbo+springboot快速入门1.使用zookeeper来作为注册中心2.搭建公共接口(API)模块3.搭建服务提供者(provider)4.搭建服务消费者(consumer& 查看详情
springboot+dubbo+zookeeper快速入门案例(代码片段)
项目目录结构:第一步:创建一个SpringBoot项目,这里选择Maven项目或者SpringInitializer都可以,这里创建了一个Maven项目(SpringBoot-Dubbo),pom.xml文件如下:<?xmlversion="1.0"encoding="UTF-8... 查看详情
探花交友day00—探花交友前置dubbo(代码片段)
目录1、Dubbo的前世今生2、Dubbo的快速入门2.1、Dubbo的基本架构2.2、Nacos2.3、管理后台2.4、入门案例2.5、代码优化3、Dubbo高级特性3.2、超时与重试3.3、启动检查3.4、多版本3.5、负载均衡4、SpringCloud整合Dubbo4.1、功能概述4.2、入门案例... 查看详情
goelasticsearch增加快速入门(代码片段)
...RESTfulAPI参考文献创建完ES的index,便可以向index中添加记录。1.创建单个文档1.1Golang借助IndexService创建指定ID的文档。//Create2ES添加记录到ESfuncCreate2ES(ctxcontext.Context,index, 查看详情