博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从零实现一个RPC框架系列文章(一):思路篇
阅读量:6955 次
发布时间:2019-06-27

本文共 989 字,大约阅读时间需要 3 分钟。

首先说下关于RPC的几个常见问题

什么是RPC

PRC:Remote Procedure Call 远程过程调用 在分布式系统中,每个节点之间的通信都是靠RPC来完成 RPC是分布式应用的基本组件

常见的RPC框架

Apache的Thrift Google的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这样的弱类型 会降低使用的灵活性)

下一篇博客中 暂时不使用一些常见设计模式,暂时不做zookeeper的支持和异常处理等细节问题

后续版本再对这个demo进行优化,并支持zookeeper 项目最终的代码放在了我的github上 欢迎star,提issues

转载于:https://juejin.im/post/5a5b210f51882573273990ba

你可能感兴趣的文章
Htmlparser专题
查看>>
大数据开发实战:数据平台大图和离线数据平台整体架构
查看>>
Spring MVC 3 深入总结
查看>>
Android自定义控件View(一)
查看>>
C/C++中的getline函数总结:
查看>>
【转】雪崩光电二极管(APD)偏置电源及其电流监测
查看>>
关于CAShapeLayer的一些实用案例和技巧
查看>>
Android中Service 使用详解(LocalService + RemoteService)
查看>>
使用scrapy抓取Youtube播放列表信息
查看>>
leetcode 简化路径
查看>>
微信小程序开发系列教程三:微信小程序的调试方法
查看>>
Spring Boot(十四)RabbitMQ延迟队列
查看>>
Babel 插件原理的理解与深入
查看>>
vue项目打包为APP,静态资源正常显示,但API请求不到数据
查看>>
Windows Phone 7 使用数据模板DataTemplate进行数据绑定
查看>>
从IP数据包到端口发送究竟经历了什么?
查看>>
[杭州/新加坡] imToken 招聘前端工程师
查看>>
Linux备份策略解析
查看>>
eclipse maven 刷新报错
查看>>
Apache与Tomcat的整合
查看>>