概念
Dubbo
在Dubbo官网介绍到,Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题。
RPC
RPC(Remote Procedure Call)远程过程调用协议,一种通过网络从远程计算机上请求服务,而不需要了解底层网络技术的协议。
Dubbo架构
Dubbo基本架构由以下四个部分组成:
①提供者:提供者包括服务容器和服务提供者程序。服务容器负责启动,加载,运行服务提供者程序。服务提供者程序需要在服务启动时,向注册中心注册自己提供的服务。
②消费者:即服务消费者,是调用远程服务的消费方。消费者在启动时需要向注册中心订阅自己所需要的服务。拉取数据之后存放到本地。在远程调用时,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
③注册中心:是服务注册与发现的中心,功能是存放服务提供者列表和返回服务提供者地址列表给消费者,如果有变更,将基于长连接推送变更数据给消费者。
④监控中心:服务消费者和提供者,在内存中累计调用次数和调用时间,定时发送一次统计数据到监控中心。
Dubbo调用流程
①Proxy:代理加了@Reference注解的成员变量,由Proxy负责接口调用逻辑。
②Cluster:负责感知提供者列表信息。
③Protocol:负责提供者和消费者之间协议交互数据。
④Service:真实的业务逻辑。被代理接口的实现类。
我的架构
根据以上Dubbo相关概念以及逻辑图,我构思了一幅自己的架构图。按照这个来实现自己的Dubbo框架。我只留了这三部分
根原来的架构一样,提供者负责业务逻辑,启动时向注册中心注册自己的服务;消费者负责远程调用,启动时从注册中心拉取提供者服务列表;注册中心负责存储提供者列表。
我的调用流程
因为从零开始搞,所以我把控制层调用逻辑也加上了。我的调用流程如图:
整个服务启动之后,用户发送请求调用controller,controller调用接口,接口通过代理调用服务提供者。
①Proxy:代理的是加了@Reference注解的接口。
②socket:代理通过socket向服务提供者发送交互数据,收到响应之后,把调用数据返回给接口,实现远程调用。