【中间件】深入理解dubbo

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月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.服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复。

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
7月前
|
Dubbo Java 应用服务中间件
微服务技术系列教程(30) - Dubbo-SpringCloud与Dubbo区别
微服务技术系列教程(30) - Dubbo-SpringCloud与Dubbo区别
54 0
|
1月前
|
存储 监控 Dubbo
dubbo(2.7.3) 3.架构
dubbo(2.7.3) 3.架构
|
8月前
|
XML Dubbo Java
Dubbo第一讲:从RPC到Dubbo框架详解
Dubbo第一讲:从RPC到Dubbo框架详解
110 0
|
8月前
|
负载均衡 Dubbo 网络协议
微服务RPC框架:Feign和Dubbo
微服务RPC框架:Feign和Dubbo
382 0
|
负载均衡 监控 Dubbo
Dubbo——初识RPC、Dubbo框架、使用直连方式实现Dubbo
Dubbo——初识RPC、Dubbo框架、使用直连方式实现Dubbo
Dubbo——初识RPC、Dubbo框架、使用直连方式实现Dubbo
|
监控 负载均衡 网络协议
分布式RPC框架Dubbo详解
分布式RPC框架Dubbo详解
112 0
|
负载均衡 监控 Dubbo
我太喜欢Dubbo的设计了
Dubbo是阿里巴巴开源的一款高性能、轻量级的分布式服务框架。Dubbo提供了服务治理、负载均衡、容错等功能,让开发者可以更方便地实现分布式系统。
62 0
|
监控 Dubbo 网络协议
Dubbo技术
Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring 框架无缝集成。Dubbo 框架,是基于容器运行的.。容器是 Spring。
Dubbo技术
|
传感器 SpringCloudAlibaba 运维
SpringCloudAlibaba篇(四)整合Dubbo(RPC 分布式服务框架)
SpringCloudAlibaba篇(四)整合Dubbo(RPC 分布式服务框架)
1063 0
SpringCloudAlibaba篇(四)整合Dubbo(RPC 分布式服务框架)
|
传感器 缓存 运维
Dubbo 架构介绍
Dubbo 架构介绍
114 0
Dubbo 架构介绍