RPC 学习笔记
Remote procedure call 远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。
RPC是一种技术思想而非一种规范或协议,常见RPC技术和框架:
- 应用级服务框架:阿里的Dubbo/Dubbox,Google gRPC,Sping Boot/Sping Cloud
- 远程通信协议:RMI,Socket,SOAP(Http XML)REST(HTTP JSON)
- 通信框架:MINA和Netty
Dubbo
Dubbo是一个高性能的,轻量级的 开源java的RPC框架,底层基于Netty,通常与Zookeeper配合使用。它提供了三大核心能力:
- 面向接口的远程方法调用
- 智能容错和负载均衡
- 服务自注册和发现
主要核心部件:
- Remoting:网络通信框架,实现了sync-over-async和request-response消息机制
- RPC 一个远程调用的抽象,支持负载均衡,容灾和集群功能。
- Registry 服务目录框架,用于服务的注册和服务事件发布和订阅。
工作原理:
- Provider 暴露服务提供方称之为“服务提供者”
- Consumer 调用远程服务方称之为“服务消费者”
- Registry 服务注册与发现中心,目录服务称之为“服务注册中心”
- Monitor 统计乙的调用次数和调用时间的日志服务,称之为“服务监控中心”
- Container 服务运行容器
Dubbo技术架构
发布订阅过程
- 启动容器,加载,运行服务提供者
- 服务提供者在启动时,在注册中心发布注册自己提供的服务
- 服务消费者在启动时,在注册中心订阅自己所需的服务
如果需要考虑失败或变更的情况,就需要考虑下面的过程
- 注册中心返回服务提供者列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
- 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
- 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
除了dubbo依赖还需要Netty和Curator依赖。
Dubbo SpringBoot
引用pom依赖
dubbo-sprong-boot-starter
引入zookeeper依赖 com.101tec zkclient
@Service 是dubbo里的注解,作用是暴露服务,不要选择spring的service
@component
在spring的启动类上加一个开启dubbo注解
@EnableDubboconfigration
@SpringbootApplication
消费时用@Reference注解
需要引用
<group>io.dubbo.spring.boot</group>
<artifactid>spring-boot-starter-dubbo</artifactid>
Spring Boot
springboot 是用来简化新spring的初始搭建和开发过程。
SpringBoot框架中还有两个非常重要的策略:开箱即用和约定优于配置。开箱即用,Outofbox,是指在开发过程中,通过在MAVEN项目的pom文件中添加相关依赖包,然后使用对应注解来代替繁琐的XML配置文件以管理对象的生命周期。这个特点使得开发人员摆脱了复杂的配置工作以及依赖的管理工作,更加专注于业务逻辑。约定优于配置,Convention over configuration,是一种由SpringBoot本身来配置目标结构,由开发者在结构中添加信息的软件设计范式。这一特点虽降低了部分灵活性,增加了BUG定位的复杂性,但减少了开发人员需要做出决定的数量,同时减少了大量的XML配置,并且可以将代码编译、测试和打包等工作自动化。