Dubbo 第一节_ Dubbo框架介绍与手写模拟Dubbo 第二节_ Dubbo的基本应用与高级应用

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 官⽹地址:http://dubbo.apache.org/zh/docs/v2.7/user/examples/generic-service/官⽹地址:http://dubbo.apache.org/zh/docs/v2.7/user/examples/local-mock/官⽹地址:http://dubbo.apache.org/zh/docs/v2.7/user/examples/async-call/

第一节_ Dubbo框架介绍与手写模拟Dubbo


文章目录


正文

⼿写代码地址

⼿写模拟Dubbo代码地址:https://gitee.com/archguide/rpc

git clone地址:https://gitee.com/archguide/rpc.git

什么是RPC

维基百科是这么定义RPC的:

在分布式计算,远程过程调⽤(英语:Remote Procedure Call,缩写为 RPC)是⼀个计算机通信协

议。该协议允许运⾏于⼀台计算机的程序调⽤另⼀个地址空间(通常为⼀个开放⽹络的⼀台计算机)的

1

⼦程序,⽽程序员就像调⽤本地程序⼀样,⽆需额外地为这个交互作⽤编程(⽆需关注细节)。RPC是

⼀种服务器-客户端(Client/Server)模式,经典实现是⼀个通过发送请求-接受回应进⾏信息交互的

系统。

如果涉及的软件采⽤⾯向对象编程,那么远程过程调⽤亦可称作远程调⽤或远程⽅法调⽤,例:Java

RMI。

所以,对于Java程序员⽽⾔,RPC就是远程⽅法调⽤。

远程⽅法调⽤和本地⽅法调⽤是相对的两个概念,本地⽅法调⽤指的是进程内部的⽅法调⽤,⽽远程⽅法

调⽤指的是两个进程内的⽅法相互调⽤。

如果实现远程⽅法调⽤,基本的就是通过⽹络,通过传输数据来进⾏调⽤。

所以就有了:

  1. RPC over Http:基于Http协议来传输数据
  2. PRC over Tcp:基于Tcp协议来传输数据
    对于所传输的数据,可以交由RPC的双⽅来协商定义,但基本都会包括:
  3. 调⽤的是哪个类或接⼝
  4. 调⽤的是哪个⽅法,⽅法名和⽅法参数类型(考虑⽅法重载)
  5. 调⽤⽅法的⼊参
    所以,我们其实可以看到RPC的⾃定义性是很⾼的,各个公司内部都可以实现⾃⼰的⼀套RPC框架,⽽
    Dubbo就是阿⾥所开源出来的⼀套RPC框架。
    什么是Dubbo
    官⽹地址:http://dubbo.apache.org/zh/
    ⽬前,官⽹上是这么介绍的:Apache Dubbo 是⼀款⾼性能、轻量级的开源 Java 服务框架
    在⼏个⽉前,官⽹的介绍是:Apache Dubbo 是⼀款⾼性能、轻量级的开源 Java RPC框架
    为什么会将RPC改为服务?
    Dubbo⼀开始的定位就是RPC,专注于两个服务之间的调⽤。但随着微服务的盛⾏,除开服务调⽤之外,
    Dubbo也在逐步的涉猎服务治理、服务监控、服务⽹关等等,所以现在的Dubbo⽬标已经不⽌是RPC框架
    了,⽽是和Spring Cloud类似想成为了⼀个服务框架。
    2
    Dubbo⽹关参考:https://github.com/apache/dubbo-proxy(社区不是很活跃)

开源RPC框架对⽐

仅作为参考

负载均衡

官⽹地址:http://dubbo.apache.org/zh/docs/v2.7/user/examples/loadbalance/

如果在消费端和服务端都配置了负载均衡策略,以消费端为准。

这其中⽐较难理解的就是最少活跃调⽤数是如何进⾏统计的?

讲道理,最少活跃数应该是在服务提供者端进⾏统计的,服务提供者统计有多少个请求正在执⾏中。

但在Dubbo中,就是不讲道理,它是在消费端进⾏统计的,为什么能在消费端进⾏统计?

逻辑是这样的:

  1. 消费者会缓存所调⽤服务的所有提供者,⽐如记为p1、p2、p3三个服务提供者,每个提供者内都有⼀
    个属性记为active,默认位0
  2. 消费者在调⽤次服务时,如果负载均衡策略是leastactive
  3. 消费者端会判断缓存的所有服务提供者的active,选择最⼩的,如果都相同,则随机
  4. 选出某⼀个服务提供者后,假设位p2,Dubbo就会对p2.active+1
  5. 然后真正发出请求调⽤该服务
  6. 消费端收到响应结果后,对p2.active-1
  7. 这样就完成了对某个服务提供者当前活跃调⽤数进⾏了统计,并且并不影响服务调⽤的性能
    服务超时
    在服务提供者和服务消费者上都可以配置服务超时时间,这两者是不⼀样的。
    消费者调⽤⼀个服务,分为三步:
  8. 消费者发送请求(⽹络传输)
  9. 服务端执⾏服务
  10. 服务端返回响应(⽹络传输)
    2
    如果在服务端和消费端只在其中⼀⽅配置了timeout,那么没有歧义,表示消费端调⽤服务的超时时间,消
    费端如果超过时间还没有收到响应结果,则消费端会抛超时异常,但,服务端不会抛异常,服务端在执⾏
    服务后,会检查执⾏该服务的时间,如果超过timeout,则会打印⼀个超时⽇志。服务会正常的执⾏完。
    如果在服务端和消费端各配了⼀个timeout,那就⽐较复杂了,假设
  11. 服务执⾏为5s
  12. 消费端timeout=3s
  13. 服务端timeout=6s
    那么消费端调⽤服务时,消费端会收到超时异常(因为消费端超时了),服务端⼀切正常(服务端没有超
    时)。

集群容错

官⽹地址:http://dubbo.apache.org/zh/docs/v2.7/user/examples/fault-tolerent-strategy/

集群容错表示:服务消费者在调⽤某个服务时,这个服务有多个服务提供者,在经过负载均衡后选出其中

⼀个服务提供者之后进⾏调⽤,但调⽤报错后,Dubbo所采取的后续处理策略。

服务降级

官⽹地址:http://dubbo.apache.org/zh/docs/v2.7/user/examples/service-downgrade/

服务降级表示:服务消费者在调⽤某个服务提供者时,如果该服务提供者报错了,所采取的措施。

集群容错和服务降级的区别在于:

  1. 集群容错是整个集群范围内的容错
  2. 服务降级是单个服务提供者的⾃身容错

本地存根

官⽹地址:http://dubbo.apache.org/zh/docs/v2.7/user/examples/local-stub/

本地存根,名字很抽象,但实际上不难理解,本地存根就是⼀段逻辑,这段逻辑是在服务消费端执⾏的,

这段逻辑⼀般都是由服务提供者提供,服务提供者可以利⽤这种机制在服务消费者远程调⽤服务提供者之

3

前或之后再做⼀些其他事情,⽐如结果缓存,请求参数验证等等。

本地伪装

官⽹地址:http://dubbo.apache.org/zh/docs/v2.7/user/examples/local-mock/

本地伪装就是Mock,Dubbo中Mock的功能相对于本地存根更简单⼀点,Mock其实就是Dubbo中的服务

容错的解决⽅案。

参数回调

官⽹地址:http://dubbo.apache.org/zh/docs/v2.7/user/examples/callback-parameter/

官⽹上的Demo其实太复杂,可以看课上的Demo更为简单。

⾸先,如果当前服务⽀持参数回调,意思就是:对于某个服务接⼝中的某个⽅法,如果想⽀持消费者在调

⽤这个⽅法时能设置回调逻辑,那么该⽅法就需要提供⼀个⼊参⽤来表示回调逻辑。

因为Dubbo协议是基于⻓连接的,所以消费端在两次调⽤同⼀个⽅法时想指定不同的回调逻辑,那么就需

要在调⽤时在指定⼀定key进⾏区分。

异步调⽤

官⽹地址:http://dubbo.apache.org/zh/docs/v2.7/user/examples/async-call/

理解起来⽐较容易,主要要理解CompletableFuture,如果不理解,就直接把它理解为Future

其他异步调⽤⽅式:https://mp.weixin.qq.com/s/U3eyBUy6HBVy-xRw3LGbRQ

4

泛化调⽤

官⽹地址:http://dubbo.apache.org/zh/docs/v2.7/user/examples/generic-reference/

泛化调⽤可以⽤来做服务测试。

在Dubbo中,如果某个服务想要⽀持泛化调⽤,就可以将该服务的generic属性设置为true,那对于服务消

费者来说,就可以不⽤依赖该服务的接⼝,直接利⽤GenericService接⼝来进⾏服务调⽤。

泛化服务

官⽹地址:http://dubbo.apache.org/zh/docs/v2.7/user/examples/generic-service/

实现了GenericService接⼝的就是泛化服务

Dubbo中的REST

官⽹地址:http://dubbo.apache.org/zh/docs/v2.7/user/rest/

注意Dubbo的REST也是Dubbo所⽀持的⼀种协议。

当我们⽤Dubbo提供了⼀个服务后,如果消费者没有使⽤Dubbo也想调⽤服务,那么这个时候我们就可以

让我们的服务⽀持REST协议,这样消费者就可以通过REST形式调⽤我们的服务了。

管理台

github地址:https://github.com/apache/dubbo-admin

动态配置

官⽹地址:http://dubbo.apache.org/zh/docs/v2.7/user/examples/config-rule/

注意动态配置修改的是服务参数,并不能修改服务的协议、IP、PORT、VERSION、GROUP,因为这5个

信息是服务的标识信息,是服务的身份证号,是不能修改的。

服务路由

5

官⽹地址:http://dubbo.apache.org/zh/docs/v2.7/user/examples/routing-rule/

什么是蓝绿发布、灰度发布

https://zhuanlan.zhihu.com/p/42671353

Zookeeper可视化客户端⼯具

Zookeeper可视化客户端:

📎 ZooInspector.zip

解压后运⾏:


相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
3月前
|
XML Dubbo Java
【Dubbo3高级特性】「框架与服务」服务的异步调用实践以及开发模式
【Dubbo3高级特性】「框架与服务」服务的异步调用实践以及开发模式
110 0
|
3月前
|
负载均衡 Dubbo Java
Dubbo 3.x:探索阿里巴巴的开源RPC框架新技术
随着微服务架构的兴起,远程过程调用(RPC)框架成为了关键组件。Dubbo,作为阿里巴巴的开源RPC框架,已经演进到了3.x版本,带来了许多新特性和技术改进。本文将探讨Dubbo 3.x中的一些最新技术,包括服务注册与发现、负载均衡、服务治理等,并通过代码示例展示其使用方式。
199 9
|
3月前
|
监控 负载均衡 Dubbo
Dubbo 框架揭秘:分布式架构的精髓与魔法【一】
Dubbo 框架揭秘:分布式架构的精髓与魔法【一】
193 0
|
3月前
|
Dubbo Java 应用服务中间件
微服务框架(十六)Spring Boot及Dubbo zipkin 链路追踪组件埋点
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文第一部分为调用链、OpenTracing、Zipkin和Jeager的简述;第二部分为Spring Boot及Dubbo zipkin 链路追踪组件埋点
|
3月前
|
JSON Dubbo Java
微服务框架(二十)Dubbo Spring Boot 生产就绪特性
  此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。   本文为Dubbo Spring Boot 生产就绪特性
|
3月前
|
缓存 负载均衡 Dubbo
Dubbo 第二节_ Dubbo的基本应用与高级应用
官⽹地址:http://dubbo.apache.org/zh/docs/v2.7/user/examples/loadbalance/ 如果在消费端和服务端都配置了负载均衡策略,以消费端为准。 这其中⽐较难理解的就是最少活跃调⽤数是如何进⾏统计的? 讲道理,最少活跃数应该是在服务提供者端进⾏统计的,服务提供者统计有多少个请求正在执⾏中。 但在Dubbo中,就是不讲道理,它是在消费端进⾏统计的,为什么能在消费端进⾏统计? 逻辑是这样的:官⽹地址:http://dubbo.apache.org/zh/docs
|
6天前
|
开发框架 Dubbo 应用服务中间件
微服务开发框架-----Apache Dubbo
这篇文章介绍了Apache Dubbo微服务开发框架,它提供RPC通信和微服务治理能力,支持服务发现、负载均衡和流量治理等功能,并强调了Dubbo在微服务规模化实践和企业级治理方面的优势。
微服务开发框架-----Apache Dubbo
|
7天前
|
缓存 负载均衡 监控
Dubbo框架整体认知
该文章主要介绍了Dubbo框架的整体认知,包括Dubbo的概念、产生的背景、解决的问题、架构以及功能特性等。
Dubbo框架整体认知
|
12天前
|
负载均衡 Dubbo 应用服务中间件
框架巨擘:Dubbo如何一统异构微服务江湖,成为开发者的超级武器!
【8月更文挑战第8天】在软件开发中,微服务架构因灵活性和可扩展性备受欢迎。面对异构微服务的挑战,Apache Dubbo作为高性能Java RPC框架脱颖而出。它具备服务注册与发现、负载均衡及容错机制等核心特性,支持多种通信协议和序列化方式,能有效连接不同技术栈的微服务。Dubbo的插件化设计保证了面向未来的扩展性,使其成为构建稳定高效分布式系统的理想选择。
26 5
|
5天前
|
开发框架 Dubbo 应用服务中间件
微服务开发框架-----Apache Dubbo
这篇文章介绍了Apache Dubbo微服务开发框架,它提供RPC通信和微服务治理能力,支持服务发现、负载均衡和流量治理等功能,并强调了Dubbo在微服务规模化实践和企业级治理方面的优势。