Dubbo调用流程学习总结

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 首先我们知道Dubbo是一个RPC框架,因此解决的问题是服务治理,这个治理是解决服务注册和调用列表的维护治理,产生注册中心维护服务列表和更新,同时方便远程调用和本地调用是一样的,同时方便解耦,我猜这个是dubbo框架产生的初衷吧。而服务的调用和服务的引用是采用网络编程框架Netty,由于其基于NIO,因此其具有很高的性能。同时因为服务的调用和服务的引用,与IM通信或者我们看到的Http请求三次握手是类似的,采用的是应答模式。

首先我们知道Dubbo是一个RPC框架,因此解决的问题是服务治理,这个治理是解决服务注册和调用列表的维护治理,产生注册中心维护服务列表和更新,同时方便远程调用和本地调用是一样的,同时方便解耦,我猜这个是dubbo框架产生的初衷吧。而服务的调用和服务的引用是采用网络编程框架Netty,由于其基于NIO,因此其具有很高的性能。同时因为服务的调用和服务的引用,与IM通信或者我们看到的Http请求三次握手是类似的,采用的是应答模式。

下面我们来看一下服务的调用和服务流程,如图1所示:

0 (14).jpg

                          图1 服务提供、引用与注册中心、监控

从这张图,可以看到服务端则会事先将自己的信息注册到注册中心,同时暴露接口,这样的话,方便服务提供者和服务引用调用,注册到注册中,以zookeeper为例,可以看到注册服务信息在树状列表中,也即dubbo下面的service下的providers的信息。也即它只负责将服务注册到注册中心,同时将服务提供信息统计到监控Monitor。

同时可以看到服务引用服务首先经过Proxy,而Proxy中会持有一个Invoker对象,然后出发invoke调用过程。在调用过程中,首先经过Cluster进行容错,比如默认的Failover,失败重试。经过Directory列表,这里包含动态注册列表信息和静态注册列表信息。如果用户配置了路由,则会进行用户配置的路由规则进行路由,常用的路由:脚本路由和条件路由。路由完之后,会进行负载均衡。常见的负载均衡:随机、轮询、最少活跃,千筛万选最终调用符合条件的Invoker。这里涉及到的容错、注册信息目录列表、路由、负载均衡,可以在图2中可以看到。

0 (15).jpg

                     图2 Dubbo的Cluster、Router、Directory、LoadBalance

两条主线:订阅变更通知、进行数据传输。也即进行调用首先进行协议的适配Protocol,适配之后,进行服务的订阅subscribe和notify变更通知,如图1。接着进行Transporter操作,满足条件的Invoker会调用Client,采用同步的方式,默认采用Netty进行数据交互。这个过程会首先会对Header进行编码Codec,对Body进行序列化,然后调用服务端。服务端会进行收发Dispather到线程池中进行处理。此时它会根据请求找到Invoker,也即代理找到具体的接口,从而拿到实现,如图3。

0 (16).jpg

                                              图3   远程调用

也就是采用注册建立服务提供和服务引用的列表信息和变更,通过Netty进行远程调用,采用register将服务注册到注册中心,采用subscirbe从服务中心订阅需要调用的服务,采用notify进行变更通知操作,通知服务引用,服务提供者是否变更服务。而服务引用调用服务时,采用invoke适配协议拿到服务。同时可以看到Container,我猜它应该是启动的服务器,类似tomcat一样,这个待确认,这个从SPI中可以看到的默认服务器是Netty。服务的提供和调用采用Montior进行监控。


相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
6月前
|
Dubbo Java 应用服务中间件
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
|
1月前
|
存储 负载均衡 监控
dubbo学习一:zookeeper与dubbo的关系,下载安装启动zookeeper(解决启动中报错)
这篇文章是关于Apache Dubbo框架与Zookeeper的关系,以及如何下载、安装和启动Zookeeper的教程,包括解决启动过程中可能遇到的报错问题。
52 3
dubbo学习一:zookeeper与dubbo的关系,下载安装启动zookeeper(解决启动中报错)
|
1月前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
1月前
|
监控 Dubbo Java
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
这篇文章详细介绍了如何将Spring Boot与Dubbo和Zookeeper整合,并通过Dubbo管理界面监控服务注册情况。
81 0
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
|
1月前
|
Dubbo IDE Java
dubbo学习二:下载Dubbo-Admin管理控制台,并分析在2.6.1及2.6.1以后版本的变化
这篇文章是关于如何下载和部署Dubbo管理控制台(dubbo-admin)的教程,并分析了2.6.1版本及以后版本的变化。
42 0
dubbo学习二:下载Dubbo-Admin管理控制台,并分析在2.6.1及2.6.1以后版本的变化
|
6月前
|
Dubbo Java 应用服务中间件
Java从入门到精通:3.2.2分布式与并发编程——了解分布式系统的基本概念,学习使用Dubbo、Spring Cloud等分布式框架
Java从入门到精通:3.2.2分布式与并发编程——了解分布式系统的基本概念,学习使用Dubbo、Spring Cloud等分布式框架
533 0
|
Dubbo Java 应用服务中间件
dubbo 服务开发流程,运行流程?zookeeper 注册中心的作用?
dubbo 服务开发流程,运行流程?zookeeper 注册中心的作用?
89 0
|
分布式计算 监控 Dubbo
【e3项目学习二】——zk与dubbo的组合运用
注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。使用dubbo-2.3.3以上版本,建议使用zookeeper注册中心。
|
Dubbo Java 应用服务中间件
dubbo的入门学习(三)springboot整合dubbo
dubbo的入门学习(三)springboot整合dubbo
dubbo的入门学习(三)springboot整合dubbo
|
XML Dubbo Java
dubbo的入门学习(二)
dubbo的入门学习(二)
dubbo的入门学习(二)