简介

  1. Dubbo:高性能、轻量级、开源的RPC框架
  2. 什么是RPC?Remote Procedure Call,远程过程(方法)调用
  1. 远程方法调用和本地方法调用为两个相对概念,一个是进程外,一个是进程内
  2. RPC自定义性很强,对与数据传输协议(HTTP或TCP)和数据传输格式
  3. dubbo就是一个RPC框架,数据传输支持支持dubbo协议及http协议
  4. 通信协议包括:数据格式 + 网络通讯协议
  5. dubbo协议:dubbo数据格式 + netty、Mina
  6. HTTP协议:http数据格式 + Tomcat、jetty
  7. dubbo早期定义为RPC框架,最新为服务框架,因为微服务的盛行

手写Dubbo,理解内部核心设计原理-LMLPHP

基本用法

  1. 定义服务提供接口
  2. 编写服务提供者接口实现业务逻辑
  3. 配置服务注册基本信息及调用协议等,暴露服务
  4. 消费者配置引用远程服务
  5. 消费或者发起调用
  6. 具体参考官方:快速开始

手写Dubbo,理解核心原理

  1. 核心思路是什么?
    • 编写服务提供者接口及实现
    • 启动HttpServer,统一提供接收请求服务
    • 封装反射必须的参数到invocation对象
    • 根据invocation对象做反射,调用接口实现
    • 消费者从注册中心获取到服务地址信息
    • 通过简单封装httpClient调用服务即可,关键传入invocation对象作为输入参数

手写Dubbo,理解内部核心设计原理-LMLPHP

  1. 本地注册与远程注册

    • 本地注册,注册的是服务接口名与对应的服务实现类之间的关系,后面给到自己反射用的
    • 远程服务注册:相当于注册中心服务,注册的是服务接口名与对应服务的IP与端口关系,给到消费者感知
  2. 存在的问题:

    • 消费者端:调用逻辑复杂,不符合常规编程思想,调用服务不支持负载均衡、服务容错、mock等机制
    • 服务提供者:远程注册逻辑可考虑增强,支持zk、Redis等
    • 服务提供者:支持通信协议的增强,比如增加Netty协议或自定义扩展
  3. 优化的方案:

手写Dubbo,理解内部核心设计原理-LMLPHP

- 利用动态代理机制,统一处理服务调用核心逻辑
- 实现负载均衡调用算法,从注册中心获取可用服务列表
- 通信协议考虑通过增加ProtocolFactory工厂,根据用户配置,生产不同协议的服务
- 扩展协议,考虑使用Java中的SPI机制实现
06-18 20:22