RPC框架原理及从零实现系列文章(一):思路篇
2018-01-14 00:00
288 查看
摘要: 什么是RPC? 常见的RPC框架有哪些?
RPC和普通HTTP调用什么区别?
怎么实现RPC?RPC的原理是什么? 这一系列文章将给你答案
首先说下关于RPC的几个常见问题
在分布式系统中,每个节点之间的通信都是靠RPC来完成 RPC是分布式应用的基本组件
Google的gprc
阿里巴巴的dubbo等
dubbo应该是3这中最简单易用的了,但dubbo只支持Java语言,thrift和gprc都是支持跨语言的,并且dubbo内部帮你实现了对分布式注册中心zookeeper的使用,另外两个仍需自己实现对注册中心的操作。
thrift grpc等之所以支持跨语言,是因为他们自己定义了一套结构化数据存储格式,如Google的protobuf,用于编解码对象,作为各个语言通信的中间协议。
RPC的使用比起curl一个重要的点就是忽略底层细节,像使用本地服务一样调用远程服务 我们将在RPC框架中使用动态代理来实现这个要求
本系列博客由浅到深,带大家打造一个支持跨语言,也支持zookeeper的RPC框架 目前先用Java实现
调用端使用动态代理 代理我们需要远程调度的接口 实现忽略底层细节 像使用本地服务一样使用调用远程服务
将我们本地调用的接口方法信息(形参,方法名,返回类型等)通过网络发送至远程实现端
远程实现端接收到相应信息,反射调用对象的实现类
执行完实现类后把返回值发回给调用端
调用端接收到返回值,代理返回结果 远程调用完毕
为尽量支持跨语言 传输数据编解码使用json格式(本来想用protobuf 但它只支持强类型Int这种 不支持编解码Object这样的弱类型 会降低使用的灵活性)
下一篇博客中 将带大家用11个Java类 实现一个基于spring的Java RPC框架
暂时不使用一些常见设计模式,暂时不做zookeeper的支持和异常处理等细节问题
后续版本再对这个demo进行优化,并支持zookeeper
项目最终的代码放在了我的github上
MeiZhuoRPC
欢迎star,提issues
RPC和普通HTTP调用什么区别?
怎么实现RPC?RPC的原理是什么? 这一系列文章将给你答案
首先说下关于RPC的几个常见问题
什么是RPC
PRC:Remote Procedure Call 远程过程调用在分布式系统中,每个节点之间的通信都是靠RPC来完成 RPC是分布式应用的基本组件
常见的RPC框架
Apache的ThriftGoogle的gprc
阿里巴巴的dubbo等
dubbo应该是3这中最简单易用的了,但dubbo只支持Java语言,thrift和gprc都是支持跨语言的,并且dubbo内部帮你实现了对分布式注册中心zookeeper的使用,另外两个仍需自己实现对注册中心的操作。
thrift grpc等之所以支持跨语言,是因为他们自己定义了一套结构化数据存储格式,如Google的protobuf,用于编解码对象,作为各个语言通信的中间协议。
RPC和HTTP请求有什么区别
RPC是一个概念,普通web开发的curl rest接口,也可以算作一种基于HTTP协议的RPC调用RPC的使用比起curl一个重要的点就是忽略底层细节,像使用本地服务一样调用远程服务 我们将在RPC框架中使用动态代理来实现这个要求
本系列博客由浅到深,带大家打造一个支持跨语言,也支持zookeeper的RPC框架 目前先用Java实现
实现思路
RPC有两个使用方 一个是本地调用端 一个是远程实现端调用端使用动态代理 代理我们需要远程调度的接口 实现忽略底层细节 像使用本地服务一样使用调用远程服务
将我们本地调用的接口方法信息(形参,方法名,返回类型等)通过网络发送至远程实现端
远程实现端接收到相应信息,反射调用对象的实现类
执行完实现类后把返回值发回给调用端
调用端接收到返回值,代理返回结果 远程调用完毕
实现细节
使用Netty作为Java端网络传输框架为尽量支持跨语言 传输数据编解码使用json格式(本来想用protobuf 但它只支持强类型Int这种 不支持编解码Object这样的弱类型 会降低使用的灵活性)
下一篇博客中 将带大家用11个Java类 实现一个基于spring的Java RPC框架
暂时不使用一些常见设计模式,暂时不做zookeeper的支持和异常处理等细节问题
后续版本再对这个demo进行优化,并支持zookeeper
项目最终的代码放在了我的github上
MeiZhuoRPC
欢迎star,提issues
相关文章推荐
- RPC框架原理及从零实现系列文章(三):zookeeper注册中心原理
- RPC框架原理及从零实现系列文章(四):支持zookeeper注册中心与负载均衡
- RPC框架原理及从零实现系列文章(二):11个类实现简单RPC框架
- C#仿QQ皮肤-实现原理系列文章导航
- 插件框架实现思路及原理
- Consul实现原理系列文章3: Consul的整体架构
- Adhesive框架系列文章--公共模块实现
- C#仿QQ皮肤-实现原理系列文章
- RPC框架实现思路浅析
- Adhesive框架系列文章--Mongodb数据服务模块实现(上)
- Consul实现原理系列文章3: Consul的整体架构
- Adhesive框架系列文章--WCF 分布式服务模块使用和实现
- Consul实现原理系列文章1: 用Raft来实现分布式一致性
- Android 插件框架实现思路及原理
- [读书笔记]深入解析MapReduce架构设计与实现原理——CH4 Hadoop RPC基本框架
- 从零开始实现RPC框架 - RPC原理及实现
- Consul实现原理系列文章2: 用Gossip来做集群成员管理和消息广播
- Web框架系列:Session的实现原理
- 笔记:深入解析MapReduce架构设计与实现原理 第4章 RPC框架解析
- Adhesive框架系列文章--报警服务模块使用和实现