【中间件】深入理解dubbo

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 【中间件】深入理解dubbo

随着互联网的发展,单一架构、垂直应用架构已经无法满足需求,分布式服务架构势在必行,但是分布式服务自身存在的问题要求有一个分布式治理系统来管理

需求

当服务越来越多时,服务 URL 配置管理变得非常困难,F5 硬件负载均衡器的单点压力也越来越大,就需要一个服务注册中心来管理这些服务,推荐使用zookeeper

架构

服务如何调用

生产者启动之后将自己注册到注册中心,然后消费者去注册中心订阅服务,将服务列表缓存在本地缓存中,每次注册中心的服务更新时会通知消费者更新本地缓存,同时Monitor检测消费者和生产者的变化,消费者通过服务列表去调用生产者

Dubbo分层

总体是分层 Business、RPC、Remoting 三大层

Business

Service 业务层:业务代码的接口与实现。我们实际使用 Dubbo 的业务层级

RPC

config 配置层:对外配置接口,以 ServiceConfig, ReferenceConfig 为中心,可以直接初始化配置类,也可以通过 Spring 解析配置生成配置类。

proxy 服务代理层:服务接口透明代理,生成服务的客户端 Stub 和服务器端 Skeleton, 扩展接口为 ProxyFactory 。

registry 注册中心层:封装服务地址的注册与发现,以服务 URL 为中心,扩展接口为 RegistryFactory, Registry, RegistryService 。cluster 路由层:封装多个提供者的路由及负载均衡,并桥接注册中心,以 Invoker 为中心,扩展接口为 Cluster, Directory, Router, LoadBalance 。

monitor 监控层:RPC 调用次数和调用时间监控,以 Statistics 为中心,扩展接口为 MonitorFactory, Monitor, MonitorService 。

Remoting

protocol 远程调用层:封将 RPC 调用,以 Invocation, Result 为中心,扩展接口为 Protocol, Invoker, Exporter

exchange 信息交换层:封装请求响应模式,同步转异步,以 Request, Response 为中心,扩展接口为 Exchanger, ExchangeChannel, ExchangeClient, ExchangeServer 。

transport 网络传输层:抽象 mina 和 netty 为统一接口,以 Message 为中心,扩展接口为 Channel, Transporter, Client, Server, Codec 。

serialize 数据序列化层:可复用的一些工具,扩展接口为 Serialization, ObjectInput, ObjectOutput, ThreadPool

Dubbo支持哪些协议?各有什么特点?

1. dubbo协议

Dubbo 缺省协议采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。

反之,Dubbo 缺省协议不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低

2. rmi协议

RMI 协议采用 JDK 标准的 java.rmi.* 实现,采用阻塞式短连接和 JDK 标准序列化方式。

3. hessian协议

Hessian [1] 协议用于集成 Hessian 的服务,Hessian 底层采用 Http 通讯,采用 Servlet 暴露服务,Dubbo 缺省内嵌 Jetty 作为服务器实现。

4.http协议

基于 HTTP 表单的远程调用协议,采用 Spring 的 HttpInvoker 实现

5. thrift协议

当前 dubbo 支持 的 thrift 协议是对 thrift 原生协议 的扩展,在原生协议的基础上添加了一些额外的头信息,比如 service name,magic number 等。

6.WebService 协议

可以和原生 WebService 服务互操作,即:

提供者用 Dubbo 的 WebService 协议暴露服务,消费者直接用标准 WebService 接口调用,

或者提供方用标准 WebService 暴露服务,消费方用 Dubbo 的 WebService 协议调用。

7. 基于 Redis实现的 RPC 协议

8. 基于 Memcached 实现的 RPC 协议

dubbo的负载均衡策略

Random LoadBalance: 随机选取提供者策略,有利于动态调整提供者权重。截面碰撞率高,调用次数越多,分布越均匀;

RoundRobin LoadBalance: 轮循选取提供者策略,平均分布,但是存在请求累积的问题;

LeastActive LoadBalance: 最少活跃调用策略,解决慢提供者接收更少的请求;

ConstantHash LoadBalance: 一致性 Hash 策略,使相同参数请求总是发到同一提供者,一台机器宕机,可以基于虚拟节点,分摊至其他提供者,避免引起提供者的剧烈变动;

dubbo的健壮性

1.监控中心宕掉不影响使用,只是丢失部分采样数据

2.数据库宕掉之后,注册中心仍能通过缓存提供服务列表查询,但是不能注册新服务

3.注册中心对等集群,任意一台宕掉之后,将自动切换到另一台

4.注册中心全部宕掉,服务提供者和服务消费者仍能通过本地缓存通讯

5.服务提供者无状态,任意一台宕掉后,不影响使用

6.服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
Dubbo Java 应用服务中间件
微服务技术系列教程(30) - Dubbo-SpringCloud与Dubbo区别
微服务技术系列教程(30) - Dubbo-SpringCloud与Dubbo区别
79 0
|
3月前
|
负载均衡 监控 Dubbo
分布式-Dubbo-dubbo能解决什么问题
分布式-Dubbo-dubbo能解决什么问题
|
7月前
|
存储 监控 Dubbo
dubbo(2.7.3) 3.架构
dubbo(2.7.3) 3.架构
|
XML Dubbo Java
Dubbo第一讲:从RPC到Dubbo框架详解
Dubbo第一讲:从RPC到Dubbo框架详解
162 0
|
负载均衡 Dubbo 网络协议
微服务RPC框架:Feign和Dubbo
微服务RPC框架:Feign和Dubbo
746 0
|
负载均衡 监控 Dubbo
Dubbo——初识RPC、Dubbo框架、使用直连方式实现Dubbo
Dubbo——初识RPC、Dubbo框架、使用直连方式实现Dubbo
Dubbo——初识RPC、Dubbo框架、使用直连方式实现Dubbo
|
监控 负载均衡 网络协议
分布式RPC框架Dubbo详解
分布式RPC框架Dubbo详解
151 0
|
传感器 SpringCloudAlibaba 运维
SpringCloudAlibaba篇(四)整合Dubbo(RPC 分布式服务框架)
SpringCloudAlibaba篇(四)整合Dubbo(RPC 分布式服务框架)
1143 0
SpringCloudAlibaba篇(四)整合Dubbo(RPC 分布式服务框架)
|
传感器 缓存 运维
Dubbo 架构介绍
Dubbo 架构介绍
125 0
Dubbo 架构介绍
|
Dubbo 安全 应用服务中间件
Dubbo服务治理篇——如何实现Dubbo服务的集群
集群的目的:实现高可用,容错功能,集群的服务器不要放在一台物理机,要分散节点,才能实现高可用,高容错性能,一台提供者挂了,还有其他提供者,保证系统正常、稳定运行。
489 0
Dubbo服务治理篇——如何实现Dubbo服务的集群