(001)dubbo简介
1.dubbo技术简介
dubbo是一款高性能、轻量级的开源的Java RPC框架。主要提供了三个核心功能:面向接口的远程调用、智能容错和负载均衡、服务自动注册和发现。
1.1. 什么是rpc
rpc(Remote Procedure Call):远程过程调用,实际上就是为了解决部署在不同机器上的服务A、B如何相互调用。当然可以通过发送http请求的方式进行调用,但是可能慢而且优化也做得不好。
rpc的调用过程图

1. 服务消费方(client)以一种类似本地方法调用的方式调用远程服务上的方法
2. client stub接收到方法的调用后,负责将方法名称、参数等信息进行序列化,便于进行网络上的传输
3. client stub找到服务地址,将序列化后的信息发送至服务端
4. server stub对收到的消息进行反序列化
5. server stub根据反序列化的结果找到本地方法并进行调用
6. 本地服务执行方法并将结果返回给server stub
7. server stub将方法结果值序列化后并发送至服务调用方
8. client stub收到结果返回后进行反序列化
9. 服务消费方最终得到调用结果
rpc调用时序图

1.2 为什么使用dubbo
dubbo的应用和分布式架构有很大的关系。分布式架构就是将工程拆分为服务层和表现层两个工程,服务层只需负责提供涉及业务逻辑的功能,表现层主要处理和页面的交互,需要处理的逻辑只需调用服务层的功能。分布式架构主要两个角色:服务提供者(Provider)和服务消费者(Consumer)。
分布式的服务也可以通过使用基于http方式的服务调用(例如springmvc),为什么使用dubbo呢?主要有下面几点:
1. 负载均衡。同一个服务部署在多台机器上时,该选择哪台机器上的服务调用。
2. 服务调用链路生成。随着服务越来越多,服务之间的依赖关系错综复杂,甚至分不清楚哪个应用在哪个应用之前启动。dubbo可以解决服务之间是如何调用的。
3. 服务访问压力及时长统计、资源调度和治理。基于访问压力实时管理集群容量,提高集群利用率。
4. 服务降级。某个服务挂掉后,调用备用服务。
1.3 为什么使用分布式架构
分布式架构基于业务将工程进行拆分,每个团队负责一个服务,开发效率高。并且服务便于维护和扩展,如当某一个服务修改代码后只需部署当前服务即可(未拆分前可能需要部署整个项目工程)
2. dubbo架构

1. 服务提供者基于服务容器启动,并向注册中心注册自己所能提供的服务
2. 服务消费者启动,向注册中心订阅自己所需要的服务
3. 注册中心向服务消费方返回服务提供者地址列表,若有变更,注册中心基于长连接推送变更的信息
4. 服务消费者基于服务提供者的地址列表,基于负载均衡算法,挑选一台服务提供者进行调用
5. 服务消费者和提供者,定时向监控中心发送调用的时间和调用的次数
注意:注册中心通过长连接感知服务提供者的存在,若服务提供者宕机,注册中心立即推送事件通知消费者
2.1 dubbo工作原理

dubbo主要分十层
1. service层:接口层,用于服务提供者和消费者实现
2. config层:配置层,主要对dubbo进行各种配置
3. proxy层:服务接口的代理,主要生成客户端 Stub 和服务器端 Skeleton
4. registry层:注册层,用于服务注册与发现
5. cluster层:集群层,封装多个服务之间的路由和负载均衡
6. monitor层:监控层,对接口的调用次数和时长进行监控
7. protocol层:协议层,封装rpc调用
8. exchange层:信息交换层,封装请求响应模式,同步转异步
9. transport层:传输层,传输信息
10. serialize层:序列化层,网络传输需要
2.2 dubbo负载策略
1. Random LoadBalance(默认,基于权重的随机负载均衡机制)

2. RoundRobin LoadBalance(不推荐,基于权重的轮询负载均衡机制)

缺点:若某一台机器上的响应比较慢时,使用轮询负载均衡,可能后期落在当前服务器上请求阻塞
3. LeastActive LoadBalance
最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。(响应慢的服务活跃数比较差,因此调用的比较少)
4. ConsistentHash LoadBalance
一致性 Hash,相同参数的请求总是发到同一提供者。当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。
2.3 dubbo直连
注册中心负责服务地址的注册与查找,相当于目录服务,但服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。因此,我们可以完全可以绕过注册中心——采用 dubbo 直连 ,即在服务消费方配置服务提供方的位置信息。

浙公网安备 33010602011771号