【中间件】深入理解dubbo

简介: 【中间件】深入理解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.服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
6月前
|
Kubernetes 监控 安全
使用Istio实现细粒度流量管理:金丝雀发布实战
使用Istio实现细粒度流量管理:金丝雀发布实战
|
缓存 资源调度 JavaScript
nodejs全局(npm、cnpm、yarn)及缓存基本配置,一篇就搞定
nodejs全局(npm、cnpm、yarn)及缓存基本配置,一篇就搞定
|
SpringCloudAlibaba 负载均衡 Dubbo
【SpringCloud Alibaba系列】Dubbo高级特性篇
本章我们介绍Dubbo的常用高级特性,包括序列化、地址缓存、超时与重试机制、多版本、负载均衡。集群容错、服务降级等。
1965 7
【SpringCloud Alibaba系列】Dubbo高级特性篇
|
7月前
|
存储 编解码 API
如何利用阿里云OSS进行图片和视频处理?
本文介绍了如何利用阿里云对象存储OSS进行图片和视频处理。内容包括OSS的基本功能、上传与管理媒体资源、图片处理(缩放、裁剪、旋转、水印等)、视频处理(转码、截图、拼接等)以及相关API的使用方法。通过OSS,用户可高效实现多媒体资源的存储与处理,适用于各类企业和开发者。
|
SpringCloudAlibaba JavaScript Dubbo
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
本文介绍了 Dubbo-Admin 的安装和使用步骤。Dubbo-Admin 是一个前后端分离的项目,前端基于 Vue,后端基于 Spring Boot。安装前需确保开发环境(Windows 10)已安装 JDK、Maven 和 Node.js,并在 Linux CentOS 7 上部署 Zookeeper 作为注册中心。
3940 1
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
|
11月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2025 年 3 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
缓存 负载均衡 Dubbo
Dubbo技术深度解析及其在Java中的实战应用
Dubbo是一款由阿里巴巴开源的高性能、轻量级的Java分布式服务框架,它致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
501 6
|
监控 负载均衡 Dubbo
《Dubbo架构设计大揭秘:八大层次,带你领略微服务之美!》
【8月更文挑战第24天】Dubbo是一款广泛应用于微服务架构中的高性能Java RPC框架。其设计强调可扩展性和可维护性。整体架构分为八个层次:接口层定义服务API;代理层处理RPC请求;服务层实现接口;注册中心层管理服务注册与发现;路由层实现服务寻址;监控层收集调用数据;集群层提供负载均衡及容错;远程调用层负责网络通信。各层职责分明,便于应对多变的业务需求。
241 1
|
Dubbo Java 应用服务中间件
源码分析Dubbo 泛化调用与泛化实现原理
源码分析Dubbo 泛化调用与泛化实现原理
源码分析Dubbo 泛化调用与泛化实现原理