RPC框架手撕之路---初步了解RPC(小白勿喷)

lzy

2021-09-28

1891 0 0

博主小菜鸡一只,目前研二上学期,之前对rpc框架了解不多,想课余时间丰富一下自己的java知识,通过该系列博客勉励自己,内容对大佬来说可能过于简单,还请轻喷,谢谢。

初步理解:

RPC是指远程过程调用,通过网络从远程计算机程序上请求服务,此框架需要做到的是——使得客户端直接调用服务端的方法就像调用本地方法一样简单,所以一般不涉及到解析和封装HTTP请求和相应的问题。

主体结构:

主体结构,借用JavaGuide这位大佬的图:

image

registry是注册中心,一般使用zookeeper,服务提供端 Server 向注册中心注册服务,服务消费者 Client 通过注册中心拿到服务相关信息,然后再通过网络请求服务提供端 Server。

简单来说,可以把registry看成一家家政公司,服务人员在公司里面把自己能做的事做简单的注册,然后客户在公司里面找到自己“心仪”的工作人员,然后再自己根据服务人员提供的地址,找他提供服务。

实现的关键点:

注册中心:

负责服务地址的注册于查找。服务端启动时,将服务名称及其对应地址(IP+ port)注册到注册中心,客户端根据服务名找到服务器地址,向其发送请求。

网络传输:

发送请求才能调用远程方法,请求中应该包含调用方法的类名,方法名以及一些相关参数。可以使用NIO的Netty框架。

序列化:

请求和相应在传送过程中需要转化为二进制,所以我们需要选择一种序列化协议,比如hession2、kyro、protostuff等等。

动态代理:

RPC的关键在于调用远程方法要像调用本地方法一样简单,所以使用动态代理可以屏蔽远程方法调用的细节部分,比如网络传输。当调用远程方法时,通过代理对象传输网络请求,不是传统的http协议那样。

负载均衡:

后续补充,暂时没有了解到。

有关的Java知识:

本篇文章我们先来了解以上述实现关键点中,Java部分的知识。 1、动态代理机制,用于实现远程方法调用。

2、序列化机制中,各个框架的对比。

3、线程池的使用。

4、CompletableFuture 的使用。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

RPC 定义 和 原理

一、RPC  1.RPC是什么  RPC(RemoteProcedureCallProtocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了

Rpc基础 原理 框架

一.RPC的原理1.RPC是什么RPC(RemoteProcedureCallProtocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC