资讯专栏INFORMATION COLUMN

RPC框架原理及从零实现系列博客(一):思路篇

tracy / 3338人阅读

摘要:等之所以支持跨语言,是因为他们自己定义了一套结构化数据存储格式,如的,用于编解码对象,作为各个语言通信的中间协议。

前段时间觉得自己一直用别人的框架,站在巨人的肩膀上,也该自己造造轮子了 一时兴起 就着手写起了RPC框架 这里写了系列博客拿给大家分享下

这篇是开篇的思路篇 项目最终的代码放在了我的github上
https://github.com/wephone/Me...
欢迎star,提issues

首先说下关于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这样的弱类型 会降低使用的灵活性)

下一篇博客中 将带大家用11个Java类 实现一个基于spring的Java RPC框架
暂时不使用一些常见设计模式,暂时不做zookeeper的支持和异常处理等细节问题

后续版本再对这个demo进行优化,并支持zookeeper

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/68274.html

相关文章

  • RPC框架原理从零实现系列博客(三):zookeeper注册中心原理

    摘要:每个都可以通过其路径唯一标识,同时每个节点还可以存储少量数据。监听机制,监听某个当该发生变化时,会回调该,但是这个是一次性的,下次需要监听时还得再注册一次。 前面的文章中 我用netty实现了一个简单的一对一的RPC 11个类实现简单java rpc 接下来的文章中 我将使用zookeeper作为rpc调用的分布式注册中心 从而实现多对多(多个调用者,多个提供者)的rpc调用,负载均...

    codergarden 评论0 收藏0
  • RPC框架原理从零实现系列博客(二):11个类实现简单RPC框架

    摘要:项目版本源码在上一博文中跟大家讲了的实现思路思路毕竟只是思路那么这篇就带着源码给大家讲解下实现过程中的各个具体问题读懂本篇需要的基本知识若尚未清晰请自行了解后再阅读本文动态代理框架的基本使用的基本配置最终项目的使用如下调用端代码及配置测试类 项目1.0版本源码 https://github.com/wephone/Me... 在上一博文中 跟大家讲了RPC的实现思路 思路毕竟只是思路...

    you_De 评论0 收藏0
  • java

    摘要:多线程编程这篇文章分析了多线程的优缺点,如何创建多线程,分享了线程安全和线程通信线程池等等一些知识。 中间件技术入门教程 中间件技术入门教程,本博客介绍了 ESB、MQ、JMS 的一些知识... SpringBoot 多数据源 SpringBoot 使用主从数据源 简易的后台管理权限设计 从零开始搭建自己权限管理框架 Docker 多步构建更小的 Java 镜像 Docker Jav...

    honhon 评论0 收藏0
  • Java后端

    摘要:,面向切面编程,中最主要的是用于事务方面的使用。目标达成后还会有去构建微服务,希望大家多多支持。原文地址手把手教程优雅的应用四手把手实现后端搭建第四期 SpringMVC 干货系列:从零搭建 SpringMVC+mybatis(四):Spring 两大核心之 AOP 学习 | 掘金技术征文 原本地址:SpringMVC 干货系列:从零搭建 SpringMVC+mybatis(四):Sp...

    joyvw 评论0 收藏0
  • 几行代码实现RPC框架

    摘要:前言昨天看了一篇关于用几行代码实现框架的博客,收获很大,于是我想在这篇博客的基础上理一理思路,尽可能的多加一点注释,进一步降低学习框架原理的门槛。 前言 昨天看了一篇关于用几行代码实现RPC框架的博客[http://javatar.iteye.com/blog...](),收获很大,于是我想在这篇博客的基础上理一理思路,尽可能的多加一点注释,进一步降低学习RPC框架原理的门槛。 原理图...

    Caicloud 评论0 收藏0

发表评论

0条评论

tracy

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<