聊聊RPC原理二
之前写了一篇关于RPC的文章,浏览量十分感人:),但是感觉文章写得有些粗,觉得很多细节没有讲出来,这次把里边的细节再次补充和说明。
这次主要说的内容分为:
1. RPC的主要结构图。
2.分析结构图的中的细节和步骤。
关于RPC,大家都不陌生,其简写和介绍什么的我就不过多介绍了,可以从我上篇文章中看到,下面直接上我画的图,简单粗暴:

RPC的主要目的是将一个庞大的系统分离成不同的子系统,按照不同的功能,比如读库功能,记录日志等可以单独出来的功能单独出来,这样的好处是,不会像以前那样庞大的系统部署的时候每次都要整个系统进行重启,可以修改单独的模块,并且自己独立部署,这样大大提升效率。但是如果拆分的过细的话,可能需要维护很多的小项目,代码工程由一个大工程,拆分成很多小工程,而且启动功能并且进行测试的话一般至少启动两个服务,一个server和一个client,同时相应的zookeeper也要启动。
下面来说一下上图中每个模块的功能。
先来说一下zookeeper, 可能有些同学已经很熟悉zookeeper使用了,当然我也在博客中写过zookeepr实现的锁文章,它非常强大,但是这里不过多解释它强大之处,这次说它的作用。在RPC中zookeeper承担着服务的注册,心跳检测,记录client的相关信息,最关键的是要记录server的IP和端口号以及它提供service信息,版本号等信息。每个client在调用之前都要从zookeeper那里获取存活server的相关信息及提供服务的版本。这样client拿到这些信息后可以直接和server进行通信了。
里边有一个细节就是client和server在zookeeper中注册的znode是临时的ephemral的,这样的目的是在心跳检测的时候发现client或者server已经down了,需要从zk中剔除,这样client连接server失败的情况下重新从zookeeper中获取有效的server及service信息。
接下来就是server,在一些大型系统中,其实server是由很多台机器构成的,这里我为了简化就画了一台机器,当server和其中部署的service启动之后需要到zookeeper中进行注册,这样client就可以发现新部署的service了,通过zookeeper实现了动态的service上线和下线,是不是很厉害。在server中,由service声明和implementation实现,同时还有在使用过程中对应的bean对象。当然在server中还部署着netty服务,这个一会儿咱们就说。
继续看client,client在这里边充当着的是consumer,就是消费service所produce的服务。client应该也是多台的。client其实就相对比较简单,因为是调用方,所以只需要声明对应的service接口和相应的bean对象就行了。
然后就是netty服务了,这次咱们不说netty的详细内容,大家知道它是用来进行通信的,拥有高吞吐量,高并发,多协议实现,并且支持NIO,AIO的工具。有兴趣的同学可以读一些关于netty的文章。netty在这里扮演的角色就是通信,将调用的service以及相关的bean对象和参数进行序列化,找到从zookeeper获取的service所在的主机、IP、端口号、服务及版本等信息后进行TCP连接,发送给server后,在server中也有一个netty在对应的端口进行接口,接收后进行反序列化,然后通过动态代理实现接口调用,关于动态代理的实现可以参考我之前写过的文章。调用之后获取到执行结果后再以相反的顺序返回去。这就是netty实现的功能了。
这块基本就是RPC的主要核心实现细节,当然里边可能还会有一些细节我没有提到,因为RPC的功能也在不断完善中,所以还有一些新增的一些功能没有提及,比如server机器的比重等,这些在用到的工程中一看应该就会明白。
好了,希望你们能从这篇文章中获得收获。
欢迎转载,但转载请署名黄青石,谢谢。
聊聊RPC原理二的更多相关文章
- 你应该知道的RPC原理
你应该知道的RPC原理 在学校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示.这些程序的特点是服务消费方和服务提供方是本地调用关系. 而一旦踏入公司尤其是大型互 ...
- word2vec原理(二) 基于Hierarchical Softmax的模型
word2vec原理(一) CBOW与Skip-Gram模型基础 word2vec原理(二) 基于Hierarchical Softmax的模型 word2vec原理(三) 基于Negative Sa ...
- RPC原理解析
1.RPC原理解析 1.1 什么是RPC RPC(Remote Procedure Call Protocol) --远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络 ...
- 简述RPC原理实现
前言 架构的改变,往往是因为业务规模的扩张. 随着业务规模的扩张,为了满足业务对技术的要求,技术架构需要从单体应用架构升级到分布式服务架构,来降低公司的技术成本,更好的适应业务的发展. 分布式服务 ...
- RPC 原理
转载地址:你应该知道的 RPC 原理 在校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示.这些程序的特点是服务消费方和服务提供方是本地调用关系. 而一旦踏入公司 ...
- juc线程池原理(二):ThreadPoolExecutor的成员变量介绍
概要 线程池的实现类是ThreadPoolExecutor类.本章,我们通过分析ThreadPoolExecutor类,来了解线程池的原理. ThreadPoolExecutor数据结构 Thread ...
- 并发之AQS原理(二) CLH队列与Node解析
并发之AQS原理(二) CLH队列与Node解析 1.CLH队列与Node节点 就像通常医院看病排队一样,医生一次能看的病人数量有限,那么超出医生看病速度之外的病人就要排队. 一条队列是队列中每一个人 ...
- 一文搞懂RPC原理
RPC原理解析 什么是RPC RPC(Remote Procedure Call Protocol)--远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.R ...
- Mybatis架构原理(二)-二级缓存源码剖析
Mybatis架构原理(二)-二级缓存源码剖析 二级缓存构建在一级缓存之上,在收到查询请求时,Mybatis首先会查询二级缓存,若二级缓存没有命中,再去查询一级缓存,一级缓存没有,在查询数据库; 二级 ...
随机推荐
- python - class类 (五) 继承补充-子类继承父类属性/函数方法
子类继承父类属性/函数方法: #方式一:(原生方式,不建议使用) class Dongwu(object): def __init__(self,name,sex,old): self.name = ...
- maven配置jdk1.8环境
<!-- 局部jdk配置,pom.xml中 --> <build> <plugins> <plugin> <groupId>org.apac ...
- oracle存储过程,sql语句执行时间
create or replace procedure sum_info is i integer; temp1 varchar2(50); temp2 varchar2(50); t1 date; ...
- hadoop学习笔记之一步一步部署hadoop分布式集群
一.准备工作 同一个局域网中的三台linux虚拟机,我用的是redhat6.4,如果主机是windows操作系统,可以先安装vmware workstation, 然后在workstation中装上3 ...
- jQuery的end() 方法
定义和用法 end() 方法结束当前链条中的最近的筛选操作,并将匹配元素集还原为之前的状态. 语法 .end() 详细说明 大多数 jQuery 的遍历方法会操作一个 jQuery 对象实例,并生成一 ...
- JavaScript中 this 的指向
很多人都会被JavaScript中this的指向(也就是函数在调用时的调用上下文)弄晕,这里做一下总结: 首先,顶层的this指向全局对象. 函数中的this按照调用方法的不同,其指向也不同: 1.函 ...
- 命令行command line 使用 http proxy的设置方法 Setting Up HTTP Proxy in Terminal
Step 1: Install Shadowsocks Client Shadowsocks is an open-source proxy project to help people visit ...
- hdu2476
/* dp[l][r]表示将任意串的[l,r]刷成s2样子的最小代价 ans[i]表示将s1的前i位刷成s2的代价 按照区间dp的常用做法,dp[l][r]的状态由dp[l][k],dp[k+1][r ...
- idea 快键键
debug快键键 F9 resume programe 恢复程序 Alt+F10 show execution point 显示执行断点 F8 Step Over 相当于eclipse的f6 跳到下一 ...
- 使用Struts,实现简单的登录
一.新建项目Struts 1.右键 new————Web Project 2.点击项目——右键——myeclipse——add Struts Capabilities.....——选择struts2. ...