Apache Dubbo是一款高性能的RPC框架,Dubbo提供三个核心能力:面向接口的远程方法调用,只智能容错和负载均衡,以及服务自动注册和发现。

什么是RPC

RPC全称remote procedure call ,即远程过程调用。例如服务A ,和服务B,分别部署在两台机器上,服务A想要调用服务B 里的一个接口,因为不在同一台机器上,是在两台机器上,不同的内存空间,所以这个时候就需要远程调用。

java中的RPC框架比较多,常见的有RMI、Hessian、gRPC、bRPC、Dubbo等,其实对于RPC框架而言,核心的模块就是通讯和序列化。rpc服务框架完成远程服务调用。

手写RPC框架思路

Dubbo简述_提供方

 

一、dubbo高可用:集群容错、服务治理、

集群容错,服务路由,集群容错的几种策略,

Dubbo简述_提供方_02

负载均衡策略,按照权重设置随机概率,无状态;轮询有状态;最少活跃数随机,方法维度的统计服务调用数;一致性Hash,让相同请求,打到一台机器上。

服务治理:

服务降级,使用mock,mock= "return null"     mock= "true",当调用服务提供方出现超时的时候,通过mock,返回null,或者mock 服务提供方的接口,返回mock的里的数据。

整合hystrix熔断,一旦方法出现错误异常,就会被熔断,最终目的是实现dubbo的高可用。

二、dubbo线程IO模型,dubbo选择的是NIO

IO模型常见的有两种,BIO和NIO,BIO的意思是每个客户端接过来后,服务端都会启动一个线程去处理该客户端的请求,阻塞IO的通信模型,在传统的IO模型中,每个连接创建成功后都需要一个线程来维护。好比一个餐厅有多个服务员,每个服务员对应一桌客人,点菜。

NIO,也叫做new-IO或者non-blocking-IO,可理解为非阻塞IO,NIO编程模型中,新来一个连接不在创建一个新的线程,而是把这条线程直接绑定到某个固定的线程,然后这条连接所有的读写都在这个线程上来负责,通过批量轮询,定时的去询问,好比一个餐厅只有一个服务员,定时的去询问客人都要点什么菜。dubbo选择的是NIO模型,选择这个解决线程资源受限的问题,

三、dubbo原理:

dubbo的架构图,左侧是服务调用方,右侧是服务提供方,

四、dubbo源码解析:

Dubbo SPI,首先说下SPI, 全称Service Provider Interface 是一种服务发现机制,本质就是接口和实现类分开了,解耦。java的原生SPI,

dubbo服务暴露

服务引入