简介
- Dubbo:高性能、轻量级、开源的RPC框架
- 什么是RPC?Remote Procedure Call,远程过程(方法)调用
- 远程方法调用和本地方法调用为两个相对概念,一个是进程外,一个是进程内
- RPC自定义性很强,对与数据传输协议(HTTP或TCP)和数据传输格式
- dubbo就是一个RPC框架,数据传输支持支持dubbo协议及http协议
- 通信协议包括:数据格式 + 网络通讯协议
- dubbo协议:dubbo数据格式 + netty、Mina
- HTTP协议:http数据格式 + Tomcat、jetty
- dubbo早期定义为RPC框架,最新为服务框架,因为微服务的盛行
基本用法
- 定义服务提供接口
- 编写服务提供者接口实现业务逻辑
- 配置服务注册基本信息及调用协议等,暴露服务
- 消费者配置引用远程服务
- 消费或者发起调用
- 具体参考官方:快速开始
手写Dubbo,理解核心原理
- 核心思路是什么?
- 编写服务提供者接口及实现
- 启动HttpServer,统一提供接收请求服务
- 封装反射必须的参数到invocation对象
- 根据invocation对象做反射,调用接口实现
- 消费者从注册中心获取到服务地址信息
- 通过简单封装httpClient调用服务即可,关键传入invocation对象作为输入参数
-
本地注册与远程注册
- 本地注册,注册的是服务接口名与对应的服务实现类之间的关系,后面给到自己反射用的
- 远程服务注册:相当于注册中心服务,注册的是服务接口名与对应服务的IP与端口关系,给到消费者感知
-
存在的问题:
- 消费者端:调用逻辑复杂,不符合常规编程思想,调用服务不支持负载均衡、服务容错、mock等机制
- 服务提供者:远程注册逻辑可考虑增强,支持zk、Redis等
- 服务提供者:支持通信协议的增强,比如增加Netty协议或自定义扩展
-
优化的方案:
- 利用动态代理机制,统一处理服务调用核心逻辑
- 实现负载均衡调用算法,从注册中心获取可用服务列表
- 通信协议考虑通过增加ProtocolFactory工厂,根据用户配置,生产不同协议的服务
- 扩展协议,考虑使用Java中的SPI机制实现