自己来写RPC框架—第一章
来源:互联网 发布:芈十四知乎 编辑:程序博客网 时间:2024/04/30 23:56
第一章
RPC概述
RPC(Remote Procedure Call)——远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。例如有两台服务器分别部署了A,B两个服务,A要调用B服务的某个方法或者函数,由于两个服务不在同一个内存空间,所以不能直接调用,这样就必须通过网络的请求来达到调用的目的。
那么我们在尝试自己写RPC框架时,需要考虑哪几点问题:
l 远程调用类似于我们使用的网络请求(http,socket)调用其他的服务,所以我们最开始就要解决通讯问题,包括建立tcp连接,数据交换,传入参数序列化,接受返回参数序列化,调用完成以后就释放占用资源。市场上知名度很广的dubbo(RPC框架),默认使用的socket长连接,多个调用过程共享一个连接。
l 消费者寻找调用的服务提供者,这里我们需要一个注册中心来完成,把所有的内容提供者注册到注册中心中,然后消费者在寻找调用的内容提供者时直接去注册中心去获取调用的服务的ip,端口,调用方法等等信息。例如我要去吃饭,我就要找饭店,这里注册中心会告诉我们具体去哪个饭店是最适合我的。如果我要去取钱,我就要去银行,这里注册中心会告诉我哪个银行取钱是最适合我的。(PS后续我会详细讲解注册中心)
l 在A服务器尝试调用B服务器时,方法跟所有的参数都需要通过底层的网络协议传输到B服务器,由于网络传输是基于二进制的,内存中所有的参数都需要被序列化(java中比较方便的是实现Serializable接口,进行序列化,我们在后续的代码实践中会介绍多种相对来说高效率的序列化方式)
l 在B服务器收到tcp请求后,需要对传入的参数,需要调用的方法,调用源等信息进行反序列化,然后进行本地调用得到返回值,返回到消费者端。
RPC解决了哪些痛点:
l 可以比较优雅的解决无法在一个进程内,甚至一个计算机内通过本地调用的方式完成的需求,比如比如不同的系统间的通讯,甚至不同的组织间的通讯。
l 透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
l 软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
l 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者
l 系统极大程度上的解耦,解决各个业务的耦合程度。
调用流程图如下:
阅读全文
0 0
- 自己来写RPC框架—第一章
- 自己来写RPC框架-第二章
- 编写自己rpc框架——java rpc的实现
- 自己实现一个RPC框架
- 自己实现RPC框架(1)
- 自己实现RPC框架(2)
- 自己实现RPC框架(3)
- 自己实现RPC框架(4)
- 自己动手写Rpc框架系列
- 来,咱们自己写一个Android的IOC框架!
- 自己实现一个简单的RPC框架
- frpc 自己开发rpc框架--解决问题
- 一起写RPC框架(二)RPC之项目搭建
- 一起写RPC框架(二十七)RPC 写在最后
- 自己写一个框架
- 一起写RPC框架开篇说明
- 【Android开发经验】来,咱们自己写一个Android的IOC框架!
- 写Wireshark CORBA插件,来分析CORBA RPC
- MySQL使用存储实现快速创建多分表
- Collections.sort()方法的使用及Comparable和comparator的qubie
- 开发环境搭建-Spring Tool Suite安装
- 正交向量和子空间学习
- ROS包全攻略:消息vs服务;可执行vs插件
- 自己来写RPC框架—第一章
- 四、Android安全机制之数据加密
- 最全的常用正则表达式大全
- 用Python实现常见机器学习算法(三)
- 机器学习之-逻辑回归算法【人工智能工程师--AI转型必修课】
- skynet学习笔记项目搭建(mac环境)
- Cadence jiuINCISIVE v15.20.001 Linux
- 【Scikit-Learn 中文文档】处理文本数据
- jQuery事件:bind、delegate、on的区别